Android實戰技巧之十四 混淆與反編譯

2021-08-31 08:01:50 字數 2402 閱讀 7443

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

android studio:

buildtypes     }
這個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
eclipse:在project.properties檔案中開啟proguard配置(放開注釋),如下:

proguard.config=$/tools/proguard/proguard-android.txt:proguard-project.txt
同樣,生成簽名時**就會被混淆。

混淆語法

-keep class * implements

android.os.parcelable

但是還是要自己把繼承自parcelable的類寫進來避免混淆,否則會出現badparcelableexception異常。

-keep class com

.linc

.datatype

.xxinfo

-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

參考:

給我老師的人工智慧教程打call!

Android實戰技巧 ViewStub的應用

在開發應用程式的時候,經常會遇到這樣的情況,會在執行時動態根據條件來決定顯示哪個view或某個布局。那麼最通常的想法就是把可能用到的view都寫在上面,先把它們的可見性都設為view.gone 然後在 中動態的更改它的可見性。這樣的做法的優點是邏輯簡單而且控制起來比較靈活。但是它的缺點就是,耗費資源...

Android實戰技巧 ViewStub的應用

在開發應用程式的時候,經常會遇到這樣的情況,會在執行時動態根據條件來決定顯示哪個view或某個布局。那麼最通常的想法就是把可能用到的view都寫在上面,先把它們的可見性都設為view.gone 然後在 中動態的更改它的可見性。這樣的做法的優點是邏輯簡單而且控制起來比較靈活。但是它的缺點就是,耗費資源...

Swift實戰技巧

swift實戰技巧 給oc呼叫的方法需要新增 objc標記,一般的action target的處理方法,通知的處理方法等需要新增 objc標記 objc func onrefresh 使用方法型如 selector 方法名稱 eg.selector self.onrefresh 更加詳細的介紹可以看...