天天看點

cocos2dx項目使用proguard

如果你的應用要上架googleplay,則必須使用加密。 android SDK中已經內建了proguard。 是以,整個流程就容易多了。

在proj.android下的project.properties檔案中,加入一行  proguard.config=proguard.cfg

然後,将{android-sdk-root}\tools\proguard\proguard-android.txt 拷貝過來,改名為proguard.cfg。(這裡還有一個帶 optimize的,具體操作直接看這個檔案裡面的說明就可以了。)

如果你的項目內建了第三方JAR庫,則像下面這樣無腦添加如下選項,保證你沒問題

一、添加外部引用

-libraryjars ./libs/tapjoyconnectlibrary.jar 
-libraryjars ./libs/chartboost.jar 
-libraryjars ./libs/crashlytics.jar 
-libraryjars ./libs/in-app-purchasing-2.0.1.jar      

二、指定不混淆且不提示下面的包錯誤(這是第三方包,我們要保護的是自己的代碼,是以,沒必要混淆它)

-keep class com.tapjoy.** { *; }

-keep class com.amazon.** { *; } 
-dontwarn com.amazon.** 
-dontwarn com.tapjoy.**      

注:如果你的SDK有明确告訴你哪些系統庫不能忽略,則你需要手工指定。比如tapjoy明确了要添加下面的代碼。

-keep class com.tapjoy.** { *; } 
-keepattributes JavascriptInterface 
-keep class * extends java.util.ListResourceBundle { 
protected Object[][] getContents(); 
} 
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
public static final *** NULL; 
} 
-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
@com.google.android.gms.common.annotation.KeepName *; 
} 
-keepnames class * implements android.os.Parcelable { 
public static final ** CREATOR; 
} 
-keep class com.google.android.gms.ads.identifier.** { *; }      

三、-keep class org.cocos2dx.lib.** {*;}

這個加了,才能防止org.cocos2dx.lib的代碼不被proguard移除。因為proguard會幫你删掉未引用的代碼。、

而你的org.cocos2dx.lib是被JNI調用的,proguard查不到你對他的引用,是以預設情況下,會被移除。是以你隻能手工指定一下了。 否則啟動不了遊戲。

四、加上自己的JNI代碼。

和org.cococs2dx.lib一樣,如果你自己提供了需要C++調用的JNI類,你得自己手工指定保留。比如

-keep class com.dreamhunters.JNI {*;}