在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 混淆與反編譯
多分辨率適配常用目錄
Android 開發(fā)環(huán)境(Eclipse+ADT+Android 5.0)
Android 原型設(shè)計工具探索
Makefile 快速入門
Android Studio的NDK開發(fā)
人臉檢測-靜態(tài)
getprop 與 dumpsys 命令
Maven 編譯開源二維碼掃描項目 zxing
畫布 Canvas
組合控件
Linux 下的模擬器硬件加速
讀取 Excel
android.hardware.camera2 使用指南
橫豎屏切換
Ubuntu 下切換 JDK 版本
拍照和錄像 with Camera
文本與布局
按鈕控制 ViewPager 的左右翻頁
用 TableLayout 偽裝表格顯示數(shù)據(jù)
Preference Activity 使用詳解
模擬器如何重啟?試試 Genymotion!
獲得屏幕物理尺寸、密度及分辨率
語音識別
了解 native activity
Android Studio 導(dǎo)入第三方類庫、jar 包和 so 庫
啟動另一個 App/apk 中的 Activity
APK 簽名
兩個開源的圖表/報表控件
android studio 導(dǎo)出 jar 包(Module)并獲得手機(jī)信息
圖片的 Base64 編解碼
混淆與反編譯
Android Studio 和 Gradle
Android 5.1 SDK 下載與配置
persistableMode 與 Activity 的持久化
adb 取出安裝在手機(jī)中的 apk
Android Studio 中的源代碼管理
Handler 使用中可能引發(fā)的內(nèi)存泄漏

混淆與反編譯

混淆

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 默認(rèn)的文件,具體地址在:/opt/sdk/tools/proguard/proguard-android.txt
而 proguard-rules.pro 是 AS 中專用的 proguard 配置文件,其實只是后綴名不同,與 Eclipse 中的 proguard-project.txt 是一樣的,配置規(guī)則相同,后面會詳細(xì)提到。

老版本開啟混淆的命令是 runProguard,現(xiàn)在統(tǒng)一用 minifyEnabled 命令了,將其設(shè)為 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 的類寫進(jìn)來避免混淆,否則會出現(xiàn) BadParcelableException 異常。

    -keep class com.linc.datatype.XXInfo {*;}

為微信分享而引入的 jar 包,我們不需要對其進(jìn)行混淆,也需要在 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 文件轉(zhuǎn)為 jar 文件

jd-gui:反編譯 jar 文件

AXMLPrinter2.jar:反編譯 xml 文件

使用方法參見《反編譯 apk 文件,得到其源代碼的方法》

對于 Ubuntu64位,運(yùn)行 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