Cocos2dx游戏与Proguard崩溃

时间:2014-11-18 07:57:21

标签: android cocos2d-x proguard

我已完成游戏,我正在尝试启用Proguard,但游戏正在崩溃。我已将它发布在cocos2dx论坛上

http://discuss.cocos2d-x.org/t/proguard-issues/18355

我知道这里有一个类似的问题 implement proguard with cocoas2d但这个问题没有答案。另外我可以发表评论,因为我没有足够的声誉。我的proguard配置文件包含以下内容:

-optimizationpasses 1
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dontwarn com.google.api.client.googleapis.extensions.android.gms.**
-dontwarn com.google.code.**
-dontwarn oauth.signpost.**
-dontwarn twitter4j.**
-dontwarn org.apache.**
-dontwarn org.json.*
-dontwarn org.mortbay.**
-dontwarn org.apache.log4j.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.apache.commons.codec.binary.**
-dontwarn javax.xml.**
-dontwarn javax.management.**
-dontwarn java.lang.management.**
-dontwarn android.support.**
-dontwarn org.codehaus.**

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.v4.** { *; }  

-keepclasseswithmembernames class * {
    native <methods>;
}


-keep class org.cocos2dx.lib.** { *; }
-keep class com.chartboost.** { *; }

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepnames @ com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
@ Com.google.android.gms.common.annotation.KeepName *; 
} 

-keepclassmembers public class org.cocos2dx.lib.* {
*;
}   


# ADMOB
-keep public class com.google.ads.**
-dontwarn com.google.ads.**
-keepclassmembers class com.google.ads.AdView {
<init>(...);
public void *(...);
}
-keepclassmembers class com.google.ads.AdSize {
public static <fields>;
}
-keepclassmembers class com.google.ads.AdRequest {
<init>(...);
public void *(...);
}
-keepclassmembers class com.google.ads.AdListener {
<init>(...);
public void *(...);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
游戏崩溃时

和Stack-trace是:

11-17 11:18:28.764: I/dalvikvm(10805): "GLThread 707" prio=5 tid=10 RUNNABLE
11-17 11:18:28.764: I/dalvikvm(10805):   | group="main" sCount=0 dsCount=0 obj=0x45228738 self=0x718d55c8
11-17 11:18:28.764: I/dalvikvm(10805):   | sysTid=10830 nice=0 sched=0/0 cgrp=apps handle=1905089056
11-17 11:18:28.764: I/dalvikvm(10805):   | state=R schedstat=( 1385640431 113554880 970 ) utm=130 stm=8 core=0
11-17 11:18:28.764: I/dalvikvm(10805):   at org.cocos2dx.lib.Cocos2dxRenderer.nativeInit(Native Method)
11-17 11:18:28.764: I/dalvikvm(10805):   at org.cocos2dx.lib.Cocos2dxRenderer.onSurfaceCreated((null):-1)
11-17 11:18:28.774: I/dalvikvm(10805):   at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1501)
11-17 11:18:28.774: I/dalvikvm(10805):   at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
11-17 11:18:28.774: E/dalvikvm(10805): VM aborting
11-17 11:18:28.774: A/libc(10805): Fatal signal 6 (SIGABRT) at 0x00002a35 (code=-6), thread 10830 (Thread-707)

  11-17 11:18:28.964: I/DEBUG(313): backtrace:
11-17 11:18:28.964: I/DEBUG(313):     #00  pc 00022118  /system/lib/libc.so (tgkill+12)
11-17 11:18:28.964: I/DEBUG(313):     #01  pc 00013169  /system/lib/libc.so (pthread_kill+48)
11-17 11:18:28.964: I/DEBUG(313):     #02  pc 0001337d  /system/lib/libc.so (raise+10)
11-17 11:18:28.964: I/DEBUG(313):     #03  pc 000120b3  /system/lib/libc.so
11-17 11:18:28.964: I/DEBUG(313):     #04  pc 000219cc  /system/lib/libc.so (abort+4)
11-17 11:18:28.964: I/DEBUG(313):     #05  pc 00048b1f  /system/lib/libdvm.so (dvmAbort+78)
11-17 11:18:28.964: I/DEBUG(313):     #06  pc 0004d487  /system/lib/libdvm.so (dvmDecodeIndirectRef(Thread*, _jobject*)+146)
11-17 11:18:28.964: I/DEBUG(313):     #07  pc 0004e39d  /system/lib/libdvm.so
11-17 11:18:28.964: I/DEBUG(313):     #08  pc 0016661f  /data/app-lib/com.company.gamename-1/libgame.so (cocos2d::JniHelper::jstring2string(_jstring*)+58)
11-17 11:18:28.964: I/DEBUG(313):     #09  pc 001660dd  /data/app-lib/com.company.gamename-1/libgame.so (getPackageNameJNI+48)
11-17 11:18:28.964: I/DEBUG(313):     #10  pc 00163f65  /data/app-lib/com.company.gamename-1/libgame.so (cocos2d::CCFileUtils::getWriteablePath()+16)
11-17 11:18:28.964: I/DEBUG(313):     #11  pc 0016e1cf  /data/app-lib/com.company.gamename-1/libgame.so (cocos2d::CCUserDefault::initXMLFilePath()+22)
11-17 11:18:28.964: I/DEBUG(313):     #12  pc 0016e29f  /data/app-lib/com.company.gamename-1/libgame.so (cocos2d::CCUserDefault::sharedUserDefault()+2)
11-18 12:39:24.909: I/DEBUG(309):     #13  pc 000ebe07  /data/app-lib/com.company.gamename-1/libgame.so (SplashScreenLayer::onNodeLoaded(cocos2d::CCNode*, cocos2d::extension::CCNodeLoader*)+6)

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题,我启用了CheckJNI,并且能够看到指向我为JNI调用编写的Java类中的静态函数的日志。 Proguard正在剥离这些函数,因为它们不是从Java代码中调用的任何东西。添加

-keep class com.comapnyName.gamename.classname {
static <methods>;
}

修复了问题。

相关问题