cocos2dx android 代码混淆

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2dx android 代码混淆相关的知识,希望对你有一定的参考价值。

参考技术A 您好,很高兴能帮助您
1. 下载cocos2dx 2.2.1
去cocos2dx官网下载就好,最好是2.2.1版本。3.0版本变化比较大,也没测试过。

3. 创建工程
使用cocos2dx目录下的tools/project-creator/create_project.py创建一个工程。

4. 编译android版本
网上很多文章说,编译cocos2dx的Android版本时需要安装cygwin之类的,其实这对于目前的ndk版本来说是不必要的,因为高版本的ndk都集成了cygwin的一些功能。我这里使用的是ndk r9d。下面来说一下操作步骤。
我编译的习惯是直接在jni目录下预先ndk-build命令,因为在Windows下使用.sh结尾的文件太怪异了。首先来看一下build_native.sh干的工作:

这是build_native.sh中实际工作的部分。可以看到它使用NDK_ROOT下的ndk-build来编译,还导入了NDK_MODULE_PATH, 这个NDK_MODULE_PATH是为Android.mk中的import-module提供路径选择。
现在来导入NDK_MODEL_APTH, 在Android.mk的import-module之前加上cocos2dx中的几个路径:

$(call import-add-path, G:/cocos2dx)
$(call import-add-path, G:/cocos2dx/cocos2dx/platform/third_party/android/prebuilt)
运行ndk-build, 编译。

编译时可能出现这样的错误:error: GLES2/gl2.h: No such file or directory,这是因为低版本的Android版本不支持opengl es2.0,在Application.mk中加上:

APP_PLATFORM := android-17

5. 生成apk包
在eclipse下打开创建的工程,导入相关的包后,在AndroidMenifest.xml中加入:

android:debuggable="true"

表明这是一个可以调试的包。运行,结果出现:

这是因为该工程默认使用build_native.sh编译:

因为build_native.sh现在已经没用了,所以把它改成:

这个意思是,直接使用NDK_ROOT环境变量下的ndk-build.cmd来编译工程,编译成debug版本,编译成armeabi和armeabi-v7a两种指令格式的库,执行这个命令的目录是工程目录下的jni文件夹。debug版本和armeabi-v7b主要是为了后面使用visualGDB调试做准备。
再编译,就可以生成apk包了。

VisualGDB调试
1. 下载并安装VisualGDB, 安装完成后,在Visual Studio的目录中可以看到Android选项:

2. 配置VisualGDB, 在Android -> Setup SDK/NDK location

主要配置JDK,SDK,NDK,ANT路径
3. 设置要调试的apk包。Android -> Debug a Custom APK file

4 设置完成后,在代码中设置断点,点击Debug, 开始调试

5. 等apk安装完成后,程序会运行到断点出,就可以开始用Visual Studio调试了

你的采纳是我前进的动力,
记得好评和采纳,答题不易,互相帮助,

Android代码混淆之混淆规则

请尊重他人的劳动成果,转载请注明出处:Android代码混淆技巧》

        因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。SDK已经集成了ProGuard工具,开发者可以从SDK目录下的\\tools\\proguard目录中进行查看。

        ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。它可以将类、字段和方法使用短无意义的名称进行重命名。最后,预校验的Java6或针对Java MicroEdition的所述处理后的码。

  下面就和大家分享一下对使用了第三方库的项目进行混淆的经验。

ProGuard默认会对第三方库也进行混淆的,而第三方库有的已经混淆过了,有的使用了Java反射技术,所以我们在进行代码混淆的时候要排除这些第三方库。排除对第三方库的混淆需要在混淆规则文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中将含有混淆规则的文件名配置进去就行了)中添加如下规则:

1.如果使用了Gson之类的工具要使JavaBean类即实体类不被混淆。

2.如果使用了自定义控件那么要保证它们不参与混淆。

3.如果使用了枚举要保证枚举不被混淆。

4.对第三方库中的类不进行混淆

a.混淆时保护引用的第三方jar包

如:-libraryjars libs/baidumapapi_v3_2_0.jar  #保护引用的第三方jar包不被混淆

注意:在使用Eclipse+ADT时需要加入-libraryjars libs/...,如果你是使用Android Studio开发的项目则不需要加入libs包中的jar包,这是因为,通过Android Studio进行混淆代码时,默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加,否则会出现“ java.io.IOException: The same input jar is specified twice” 错误。

b.混淆时保护第三方jar包中的类不被混淆

如:-keep class com.baidu.** *;   #让ProGuard不要警告找不到com.baidu.**这个包里面的类的相关引用

-dontwarn com.baidu.**  #保持com.baidu.**这个包里面的所有类和所有方法不被混淆。

附:小编开发中用到的一些混淆规则,大家可以根据需要复制到自己的项目中的混淆规则的文件中即可。

################common###############
-keep class com.jph.android.entity.**  *;  #实体类不参与混淆
-keep class com.jph.android.view.**  *;  #自定义控件不参与混淆

################baidu map###############
-libraryjars libs/baidumapapi_v3_2_0.jar
-libraryjars libs/locSDK_5.0.jar
-keep class com.baidu.**  *; 
-keep class vi.com.gdi.bgl.android.***;
-dontwarn com.baidu.**


################afinal##################
#-libraryjars libs/afinal_0.5_bin.jar
#-keep class net.tsz.afinal.**  *;  
#-keep public class * extends net.tsz.afinal.**  
#-keep public interface net.tsz.afinal.** *;
#-dontwarn net.tsz.afinal.**

################xutils##################
-libraryjars libs/xUtils-2.6.14.jar
-keep class com.lidroid.xutils.**  *;  
-keep public class * extends com.lidroid.xutils.**  
-keepattributes Signature
-keepattributes *Annotation*
-keep public interface com.lidroid.xutils.** *;
-dontwarn com.lidroid.xutils.**
-keepclasseswithmembers class com.jph.android.entity.** 
	<fields>;
	<methods>;


################支付宝##################
-libraryjars libs/alipaysecsdk.jar
-libraryjars libs/alipayutdid.jar
-libraryjars libs/alipaysdk.jar
-keep class com.alipay.android.app.IAliPay*;
-keep class com.alipay.android.app.IAlixPay*;
-keep class com.alipay.android.app.IRemoteServiceCallback*;
-keep class com.alipay.android.app.lib.ResourceMap*;

################gson##################
-libraryjars libs/gson-2.2.4.jar
-keep class com.google.gson.** *;
#-keep class com.google.***;
-keep class sun.misc.Unsafe  *; 
-keep class com.google.gson.stream.**  *; 
-keep class com.google.gson.examples.android.model.**  *;  
-keep class com.google.** 
    <fields>;
    <methods>;

-keepclassmembers class * implements java.io.Serializable 
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();

-dontwarn com.google.gson.**



################httpmime/httpcore##########
-libraryjars libs/httpcore-4.3.2.jar
-libraryjars libs/httpmime-4.3.5.jar
-keep class org.apache.http.** *;
-dontwarn org.apache.http.**

####################jpush##################
-libraryjars libs/jpush-sdk-release1.7.1.jar
-keep class cn.jpush.**  *; 
-keep public class com.umeng.fb.ui.ThreadView   #双向反馈功能代码不混淆
-dontwarn cn.jpush.**
-keepclassmembers class * 
    public <init>(org.json.JSONObject);

 #不混淆R类
-keep public class com.jph.android.R$* 
    public static final int *;

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


####################umeng##################
-libraryjars libs/umeng-analytics-v5.2.4.jar
-keep class com.umeng.analytics.** *;
-dontwarn com.umeng.analytics.**

#-keep public class * extends com.umeng.**  
#-keep public class * extends com.umeng.analytics.**  
#-keep public class * extends com.umeng.common.**  
#-keep public class * extends com.umeng.newxp.** 
-keep class com.umeng.**  *;   
-keep class com.umeng.analytics.**  *;   
-keep class com.umeng.common.**  *;   
-keep class com.umeng.newxp.**  *;  

-keepclassmembers class * 
   public <init>(org.json.JSONObject);

-keep class com.umeng.**

-keep public class com.idea.fifaalarmclock.app.R$*
    public static final int *;


-keep public class com.umeng.fb.ui.ThreadView 


-dontwarn com.umeng.**

-dontwarn org.apache.commons.**

-keep public class * extends com.umeng.**

-keep class com.umeng.** *; 

####################universal-image-loader########
-libraryjars libs/universal-image-loader-1.9.3.jar
-keep class com.nostra13.universalimageloader.** *;
-dontwarn com.nostra13.universalimageloader.**


####################zxing#####################
-libraryjars libs/zxing.jar
-libraryjars libs/zxing_apply.jar
-keep class com.google.zxing.** *;
-dontwarn com.google.zxing.**

####################BASE64Decoder##################
-libraryjars libs/sun.misc.BASE64Decoder.jar

####################support.v4#####################
-libraryjars libs/android-support-v4.jar
-keep class android.support.v4.**  *; 
-dontwarn android.support.v4.**

###################other####################
# slidingmenu 的混淆
-dontwarn com.jeremyfeinstein.slidingmenu.lib.**
-keep class com.jeremyfeinstein.slidingmenu.lib.**  *; 
# ActionBarSherlock混淆
-dontwarn com.actionbarsherlock.**
-keep class com.actionbarsherlock.**  *; 
-keep interface com.actionbarsherlock.**  *; 
-keep class * extends java.lang.annotation.Annotation  *; 
-keepclasseswithmembernames class * 
    native <methods>;


-keep class com.jph.android.entity.** 
    <fields>;
    <methods>;


-dontwarn android.support.**
-dontwarn com.slidingmenu.lib.app.SlidingMapActivity
-keep class android.support.**  *; 
-keep class com.actionbarsherlock.**  *; 
-keep interface com.actionbarsherlock.**  *; 
-keep class com.slidingmenu.**  *; 
-keep interface com.slidingmenu.**  *; 

推荐阅读:Android开发之反编译与防止反编译

Android代码混淆指南  


        

以上是关于cocos2dx android 代码混淆的主要内容,如果未能解决你的问题,请参考以下文章

android 怎么实现只混淆自己的代码,而不混淆第3方jar包

Android混淆代码

Android-android 怎么实现只混淆自己的代码,而不混淆第3方jar包

Android代码混淆之混淆规则

Android开发混淆使用手册

Android Studio 代码混淆(你真的会混淆吗)