Android实战技巧之十四:混淆与反编译
来源:互联网 发布:python 2.7安装 编辑:程序博客网 时间:2024/04/30 00:31
混淆
Android Studio:
只需在build.gradle(Module:app)中的buildTypes中增加release的编译选项即可,如下:
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
这个proguard-android.txt是sdk中groguard默认的文件,具体地址在:/opt/sdk/tools/proguard/proguard-android.txt
而proguard-rules.pro是AS中专用的proguard配置文件,其实只是后缀名不同,与Eclipse中的proguard-project.txt是一样的,配置规则相同,后面会详细提到。
老版本开启混淆的命令是runProguard,现在统一用minifyEnabled命令了,将其设为true就好了。
编译的时候可以使用命令:
./gradlew assembleRelease
或者用上一篇生成签名apk的办法都可。
Eclipse:
在project.properties文件中开启proguard配置(放开注释),如下:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
同样,生成签名时代码就会被混淆。
混淆语法
请参考${sdk.dir}/tools/proguard/proguard-android.txt文件,需要注意的是文件中虽然有了不混淆Parcelable的语句,如下:
-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}
但是还是要自己把继承自Parcelable的类写进来避免混淆,否则会出现BadParcelableException异常。
-keep class com.linc.datatype.XXInfo {*;}
为微信分享而引入的jar包,我们不需要对其进行混淆,也需要在proguard-android.txt中注明,如下:
-keep class com.tencent.** { *; }-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}
为了验证是否混淆成功,可以使用下面的反编译工具验证。
反编译
主要用到三个工具:
dex2jar:将dex文件转为jar文件
jd-gui:反编译jar文件
AXMLPrinter2.jar:反编译xml文件
使用方法参见《反编译apk文件,得到其源代码的方法》
对于Ubuntu64位,运行jd-gui或许会报错:
尝试解决如下:
$ sudo apt-get install libgtk2.0-0:i386 libnss3:i386 libcurl3-gnutls:i386 libidn11:i386 libpango1.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 librtmp0:i386 libxft2:i386
又报错:
$ /opt/sdk/tools/jd-gui: error while loading shared libraries: libXxf86vm.so.1: cannot open shared object file: No such file or directory
解决办法如下:
$ sudo apt-get install libgtk2.0-0:i386 libxxf86vm1:i386 libsm6:i386 lib32stdc++6
参考:
http://blog.csdn.net/lincyang/article/details/6333974
- Android实战技巧之十四:混淆与反编译
- Android APK之代码混淆与反编译
- Android APK之代码混淆与反编译
- Android反编译与混淆
- Android 混淆打包与反编译
- Android开发反编译与混淆
- android 代码混淆与反编译
- android混淆代码与反编译
- Android实战技巧之二十四:横竖屏切换
- android反编译与混淆网址保存学习
- 【学习】Android代码混淆与反编译
- Android 反编译与混淆技术完全解析
- Android 反编译与混淆技术(上)
- Android 反编译与混淆技术(下)
- Android反编译与加密(代码混淆)
- Android App 反编译与代码混淆
- Android中级:代码混淆与反编译
- Android 混淆与反编译的简单记录
- Activity和Fragment的五种交互方式(Activity可以改变Fragment的UI,Fragment也可以改变ActivityUI)
- Ural1924(模拟+贪心)
- iOS App设置icon,启动图,App名称的方法
- java中特殊的String类型
- android.content.res.Resources$NotFoundException: String resource ID #0x1
- Android实战技巧之十四:混淆与反编译
- 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数【while循环】
- runtime动态添加属性
- shell十三问之10:&& 与 || 差在哪?
- 淘宝 第三方应用安全规范
- Spring 浅谈
- hdu 3401 Trade (单调队列优化)
- Android input keyevent
- java读取properties配置文件