eclipse混淆Android項(xiàng)目代碼

eclipse中對(duì)Android代碼進(jìn)行混淆操作步驟如下:

  1. 首先將project.properties中打開(去掉注釋符“#”)
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

其中,${sdk.dir}/tools/proguard/proguard-android.txt為Android SDK中提供的基本混淆規(guī)則。

  1. 修改proguard-project.txt
    proguard-project.txt是基于項(xiàng)目的混淆規(guī)則,需要我們根據(jù)項(xiàng)目的具體情況進(jìn)行添加。
    混淆規(guī)則可以查看后面的詳細(xì)說(shuō)明,此處提供一個(gè)簡(jiǎn)單的示例
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class android.support.v4.** {*;}
-keep class com.stt.photoapk.jni.JniTest {*;}

示例中,keep了需要在manifest中注冊(cè)的Android組件類;keep了support.v4包中所以類;keep了jni的Native接口類JniTest。

  1. 導(dǎo)出Apk
    debug模式,混淆是不會(huì)起作用用的,只有我們導(dǎo)出我們的項(xiàng)目的時(shí)候,混淆才會(huì)起作用,導(dǎo)出apk需要進(jìn)行簽名,我們還需要設(shè)置一下簽名信息。如果你的proguard配置沒有出現(xiàn)問題,那么導(dǎo)出后的apk已經(jīng)被進(jìn)行了混淆操作。
  2. 注意事項(xiàng)
    Project所在的目錄不可用有空格或者一些特殊字符(如“(”)等出現(xiàn),否則混淆會(huì)出錯(cuò)。
  3. 混淆規(guī)則:

Android代碼混淆常用的規(guī)則:

指定代碼的壓縮級(jí)別 
-optimizationpasses 5 
包明不混合大小寫 
-dontusemixedcaseclassnames 
不去忽略非公共的庫(kù)類 
-dontskipnonpubliclibraryclasses 
優(yōu)化 不優(yōu)化輸入的類文件 
-dontoptimize 
預(yù)校驗(yàn) 
-dontpreverify 
混淆時(shí)是否記錄日志 
-verbose 
混淆時(shí)所采用的算法 
-optimizations !code/simplification/arithmetic,!field/,!class/merging/ 
保護(hù)注解 
-keepattributes Annotation 
保持哪些類不被混淆 
-keep public class * extends android.app.Fragment 
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 
如果有引用v4包可以添加下面這行 
-keep public class * extends android.support.v4.app.Fragment 
忽略警告 
-ignorewarning 
記錄生成的日志數(shù)據(jù),gradle build時(shí)在本項(xiàng)目根目錄輸出 
apk 包內(nèi)所有 class 的內(nèi)部結(jié)構(gòu) 
-dump class_files.txt 
未混淆的類和成員 
-printseeds seeds.txt 
列出從 apk 中刪除的代碼 
-printusage unused.txt 
混淆前后的映射 
-printmapping mapping.txt

proguard 配置最常用的配置選項(xiàng)包括:

-include {filename}    從給定的文件中讀取配置參數(shù)   
-basedirectory {directoryname}    指定基礎(chǔ)目錄為以后相對(duì)的檔案名稱   
-injars {class_path}    指定要處理的應(yīng)用程序jar,war,ear和目錄   
-outjars {class_path}    指定處理完后要輸出的jar,war,ear和目錄的名稱   
-libraryjars {classpath}    指定要處理的應(yīng)用程序jar,war,ear和目錄所需要的程序庫(kù)文件   
-dontskipnonpubliclibraryclasses    指定不去忽略非公共的庫(kù)類。   
-dontskipnonpubliclibraryclassmembers    指定不去忽略包可見的庫(kù)類的成員。  
   
保留選項(xiàng)   
-keep {Modifier} {class_specification}    保護(hù)指定的類文件和類的成員   
-keepclassmembers {modifier} {class_specification}    保護(hù)指定類的成員,如果此類受到保護(hù)他們會(huì)保護(hù)的更好  
-keepclasseswithmembers {class_specification}    保護(hù)指定的類和類的成員,但條件是所有指定的類和類成員是要存在。   
-keepnames {class_specification}    保護(hù)指定的類和類的成員的名稱(如果他們不會(huì)壓縮步驟中刪除)   
-keepclassmembernames {class_specification}    保護(hù)指定的類的成員的名稱(如果他們不會(huì)壓縮步驟中刪除)   
-keepclasseswithmembernames {class_specification}    保護(hù)指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之后)   
-printseeds {filename}    列出類和類的成員-keep選項(xiàng)的清單,標(biāo)準(zhǔn)輸出到給定的文件   
   
壓縮   
-dontshrink    不壓縮輸入的類文件   
-printusage {filename}   
-dontwarn   如果有警告也不終止  
-whyareyoukeeping {class_specification}       
   
優(yōu)化   
-dontoptimize    不優(yōu)化輸入的類文件   
-assumenosideeffects {class_specification}    優(yōu)化時(shí)假設(shè)指定的方法,沒有任何副作用   
-allowaccessmodification    優(yōu)化時(shí)允許訪問并修改有修飾符的類和類的成員   
   
混淆   
-dontobfuscate    不混淆輸入的類文件   
-printmapping {filename}   
-applymapping {filename}    重用映射增加混淆   
-obfuscationdictionary {filename}    使用給定文件中的關(guān)鍵字作為要混淆方法的名稱   
-overloadaggressively    混淆時(shí)應(yīng)用侵入式重載   
-useuniqueclassmembernames    確定統(tǒng)一的混淆類的成員名稱來(lái)增加混淆   
-flattenpackagehierarchy {package_name}    重新包裝所有重命名的包并放在給定的單一包中   
-repackageclass {package_name}    重新包裝所有重命名的類文件中放在給定的單一包中   
-dontusemixedcaseclassnames    混淆時(shí)不會(huì)產(chǎn)生形形色色的類名   
-keepattributes {attribute_name,...}    保護(hù)給定的可選屬性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and   
   
InnerClasses.   
-renamesourcefileattribute {string}    設(shè)置源文件中給定的字符串常量  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,940評(píng)論 25 709
  • 在離職之際,也沒有啥事可以做,就自己搗騰下代碼混淆,言歸正傳。 為了防止自己的勞動(dòng)成果被別人竊取,混淆代碼能有效防...
    Orz013閱讀 1,084評(píng)論 0 0
  • app開發(fā)的最后階段就是給app簽名,為防止app被反編譯時(shí)泄露保密信息,可以在簽名前給代碼做混淆。 一、在mod...
    囈兮閱讀 977評(píng)論 0 1
  • 最近項(xiàng)目有點(diǎn)閑,考慮到以前的項(xiàng)目沒有做過混淆,只是用了加固軟件進(jìn)行加固,為了安全性,準(zhǔn)備給項(xiàng)目加上,這里做個(gè)總結(jié),...
    想你依然心痛閱讀 828評(píng)論 0 4
  • 根據(jù)配置文件會(huì)限制server接受的數(shù)據(jù)包大小。有時(shí)候大的插入和更新會(huì)被max_allowed_packet 參數(shù)...
    no才閱讀 11,021評(píng)論 0 1

友情鏈接更多精彩內(nèi)容