进行代码混淆的程序被称为代码混淆器(混淆工具)。进行代码混淆的意义主要在于对代码进行一定程度的加密。
在android 2.3之后,sdk中就已经集成了混淆器proguard(目录在sdk\tools\proguard),所以我们可以很方便的直接在工程中开启代码混淆。
eclipse android工程开启混淆功能,我们需要手动在项目文件.properties(我的是project.properties文件)中添加下面的代码
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
某些方式创建的项目中可能已经有如上两行了,只是默认被注释掉了,只要把proguard.config这一行解注释就好了。这样代码混淆功能就开启了,在打签名包时,项目会自动进行代码混淆。
1 把项目的生成路径改成Release(通过项目的属性-生成来修改)2 把整个Release文件夹拷到另外一个地方,然后用防止反编译软件来生成新的exe,再覆盖掉
3 在打包项目里面把覆盖完后的Release文件夹里面内容添加进来,生成快捷方式以及卸载在此不详细说明。
混淆后出错(为什么用proguard混淆后,友盟AndroidSDK的一些功能不可用?)如果您的应用使用了混淆, 请添加
-keepclassmembers class * {
public <init>(org.json.JSONObject)
}
这是由于SDK中的部分代码使用反射来调用构造函数, 如果被混淆掉, 在运行时会提示"NoSuchMethod"错误。
另外,由于SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请在proguard配置文件中添加keep命令如:
-keep public class [您的应用包名].R$*{
public static final int *
}
把[您的应用包名] 替换成您自己的包名,如com.yourcompany.example。
如果您使用了双向反馈功能,还需要添加下面代码,以免我们自定义的UI被混淆:
-keep public class com.umeng.fb.ui.ThreadView {
}
如果使用的是自动更新2.7.0版本,则需要加上以下混淆代码:
-dontwarn okio.**
-dontwarn com.squareup.wire.**
-keep class okio.** {*}
-keep class com.squareup.wire.** {*}
如果仍存在问题,可以再做如下 *** 作:
# 添加第三方jar包
-libraryjars libs/umeng-sdk.jar
# 以下类过滤不混淆
-keep public class * extends com.umeng.**
# 以下包不进行过滤
-keep class com.umeng.** { *}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)