## 混淆
**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文件,得到其源代码的方法》](http://blog.csdn.net/lincyang/article/details/6333974 "反编译")
对于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](http://blog.csdn.net/lincyang/article/details/6333974)
- 前言
- 一:文本与布局
- 二:组合控件
- 三:性能测试类
- 四:语音识别
- 五:读取Excel
- 六:PreferenceActivity使用详解
- 七:按钮控制ViewPager的左右翻页
- 八:Ubuntu下切换JDK版本
- 九:最新Android开发环境(Eclipse+ADT+Android 5.0)
- 十:获得屏幕物理尺寸、密度及分辨率
- 十一:Android Studio和Gradle
- 十二:Android Studio导入第三方类库、jar包和so库
- 十三:APK签名
- 十四:混淆与反编译
- 十五:多分辨率适配常用目录
- 十六:getprop与dumpsys命令
- 十七:Linux下的模拟器硬件加速
- 十八:adb取出安装在手机中的apk
- 十九:android studio导出jar包(Module)并获得手机信息
- 二十:两个开源的图表/报表控件
- 二十一:Android原型设计工具探索
- 二十二:Android 5.1 SDK下载与配置
- 二十三:Android Studio的NDK开发
- 二十四:横竖屏切换
- 二十五:模拟器如何重启?试试Genymotion!
- 二十六:persistableMode与Activity的持久化
- 二十七:Maven编译开源二维码扫描项目zxing