Android混淆注意事項

2021-08-03 09:46:18 字數 2982 閱讀 4450

剛開始專案中需要加入混淆時候,不知道從何開始。各種查資料,然後就是一頭霧水不知道什麼事是正確的。沒有少折騰,其實混淆還是挺簡單的,用之前還是要老老實實的看一下官方的文件。大致知道**壓縮混淆,資源壓縮是個什麼意思。

下面就是官方的兩個文件,乙個說明文件,乙個proguard使用手冊:

官方文件中有幾個要點:

1.android studio 中如何新增混淆

android 

}...

}

proguardfile的解釋(除了預設的混淆規則檔案,我們需要定義的新規則在proguard-rules.pro檔案中)

除了minifyenabled 

屬性外,還有用於定義

proguard

規則的proguardfiles 

屬性:·

getdefaultproguardfile('proguard-android.txt')

方法可從

android

sdk tools/proguard/ 

資料夾獲取預設的

proguard

設定。提示:要想做進一步的**壓縮,請嘗試使用位於同一位置的

proguard-android-optimize.txt

檔案。它包括相同的

proguard

規則,但還包括其他在位元組碼一級(方法內和方法間)執行分析的優化,以進一步減小

apk大小和幫助提高其執行速度。

·proguard-rules.pro

檔案用於新增自定義

proguard

規則。預設情況下,該檔案位於模組

根目錄(

build.gradle 

檔案旁)。

2.哪一些不能進行**混淆的

3.加入混淆之後如何進行問題定位(保留輸出檔案)

每次構建時 proguard 都會輸出下列檔案:

dump.txt

說明 apk 中所有類檔案的內部結構。

提供原始與混淆過的類、方法和欄位名稱之間的轉換。

seeds.txt

列出未進行混淆的類和成員。

usage.txt

列出從 apk 移除的**。

以下是自己使用中覺得需要注意學習的地方:

1.需要知道基本萬用字元的使用和混淆規則關鍵字(以下來自於proguard使用手冊的翻譯)

a.類的萬用字元介紹:

? 匹配類名稱中的任何單個字元,但不匹配包分隔符。例如,「mypackage.test?」比賽」mypackage.test1」和「mypackage.test2」,而不是「mypackage。test12」。

** 匹配類名稱的任何部分,可能包含任意數量的包分隔符。例如,「**.test」匹配所有包中除根包之外的所有測試類。或者,「mypackage.**」匹配中所有的類「mypackage」及其子包。

b.類中方法萬用字元:

匹配任何建構函式

匹配任何字段

匹配任何欄位或方法

*        任何欄位或方法

c.方法名稱萬用字元:

? 匹配方法名中的任何單個字元。

* 匹配方法名的任何部分。

d.方法引數的萬用字元:

%匹配任何原始型別(「布林」、「int」等),但不匹配「空」。

?匹配類名中的任何單個字元。

*匹配不包含包分隔符的類名稱的任何部分。

**匹配類名稱的任何部分,可能包含任意數量的包分隔符。

***匹配任何型別(原始的或非原始的、陣列或非陣列)。

...匹配任意型別的任意數量的引數

e:常用的混淆關鍵字:

-keep 保護指定的類檔案和類的成員

-keepclassmembers 保護指定類的成員,如果此類受到保護他們會保護的更好

-keepclasseswithmembers保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。

-keepnames 保護指定的類和類的成員的名稱(如果他們不會壓縮步驟中刪除)

-keepclassmembernames 保護指定的類的成員的名稱(如果他們不會壓縮步驟中刪除)

-keepclasseswithmembernames保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)

-keepattributes 保護給定的可選屬性,例如linenumbertable,localvariabletable,sourcefile, deprecated, synthetic, signature, andinnerclasses.

2.一些混淆方法舉例的使用(proguard給的很詳細:

a.如何不混淆指定的方法(比如該方法是反射方法或者jni動態註冊呼叫的方法)

參考:b.下面是常見的混淆規則需要知道區別:

-keepnames class packagename.**

-keep class packagename.**

-keep class packagename.**

#cordova

-keep class org.apache.cordova.**

-keep public class *extendsorg.apache.cordova.cordovaplugin

#xwalk官方提供

-keep class org.xwalk.core.**

-keep class org.chromium.**

-keepattributes **

#如果有警告需要移除以下幾個警告

-dontwarn android.view.**

-dontwarn android.media.**

-dontwarn org.chromium.**

Android布局注意事項

android的布局還是有一定的講究的。如何設定布局的屬性也要好好學習,剛學習的時候對不居中full content,wrap content,match parent,0dp,layout weight搞不清楚,終於在曲曲折折中摸索清楚,從android training course in ch...

android開發注意事項

感謝 url color blue 1.listview color listview中item的布局至關重要,必須盡可能的減少使用的控制項,布局。relativelayout是絕對的利器,通過它可以減少布局的層次。同時要盡可能的復用控制項,這樣可以減少listview的記憶體使用,減少滑動時gc次...

android友盟注意事項

android友盟注意事項 activity要在onresume中新增 mobclickagent.onresume context onpause中新增 mobclickagent.onpause context 然後framgent新增內容如下 onresume mobclickagent.on...