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