## 混淆
**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