<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ProGuard是個強大的工具。 ProGuard官方文檔:[http://proguard.sourceforge.net/](http://proguard.sourceforge.net/) ## ProGuard基本介紹 * ProGuard通過刪除無用代碼,將代碼中類名、方法名、屬性名用晦澀難懂的名稱重命名從而達到代碼混淆、壓縮和優化的功能。 * 壓縮和優化使得編譯后apk包更小。 * 混淆可以保證代碼在被反編譯后很難讀懂,防止逆向工程。 ## ProGuard的生成文件介紹 * mapping.txt —> 表示混淆前后代碼的對照表,這個文件非常重要。如果你的代碼混淆后會產生bug的話,log提示中是混淆后的代碼,希望定位到源代碼的話就可以根據mapping.txt反推。每次發布都要保留它方便該版本出現問題時調出日志進行排查,它可以根據版本號或是發布時間命名來保存或是放進代碼版本控制中。 * dump.txt —> 描述apk內所有class文件的內部結構 * seeds.txt —> 列出了沒有被混淆的類和成員 * usage.txt —> 列出了源代碼中被刪除在apk中不存在的代碼 ## ProGuard不混淆 * 反射用到的類 * Android中Manifest中配置的類(Activity、Service等的子類及Framework類默認不進行混淆) * Jni中調用的類 * 用到的第三方的jar包 * 表示保留本地的bean文件下的實體類 * 特別處理js與本地原生組件之間的調用過程 * 自定義不混淆的類 ## ProGuard語法 ~~~ -include {filename} 從給定的文件中讀取配置參數 -basedirectory {directoryname} 指定基礎目錄為以后相對的檔案名稱 -injars {class_path} 指定要處理的應用程序jar,war,ear和目錄 -outjars {class_path} 指定處理完后要輸出的jar,war,ear和目錄的名稱 -libraryjars {classpath} 指定要處理的應用程序jar,war,ear和目錄所需要的程序庫文件 -dontskipnonpubliclibraryclasses 指定不去忽略非公共的庫類。 -dontskipnonpubliclibraryclassmembers 指定不去忽略包可見的庫類的成員。 ~~~ 保留選項 ~~~ -keep {Modifier} {class_specification} 保護指定的類文件和類的成員 -keepclassmembers {modifier} {class_specification} 保護指定類的成員,如果此類受到保護他們會保護的更好 -keepclasseswithmembers {class_specification} 保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。 -keepnames {class_specification} 保護指定的類和類的成員的名稱(如果他們不會壓縮步驟中刪除) -keepclassmembernames {class_specification} 保護指定的類的成員的名稱(如果他們不會壓縮步驟中刪除) -keepclasseswithmembernames {class_specification} 保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之后) -printseeds {filename} 列出類和類的成員-keep選項的清單,標準輸出到給定的文件 ~~~ 壓縮 ~~~ -dontshrink 不壓縮輸入的類文件 -printusage {filename} -whyareyoukeeping {class_specification} ~~~ 優化 ~~~ -dontoptimize 不優化輸入的類文件 -assumenosideeffects {class_specification} 優化時假設指定的方法,沒有任何副作用 -allowaccessmodification 優化時允許訪問并修改有修飾符的類和類的成員 ~~~ 混淆 ~~~ -dontobfuscate 不混淆輸入的類文件 -printmapping {filename} -applymapping {filename} 重用映射增加混淆 -obfuscationdictionary {filename} 使用給定文件中的關鍵字作為要混淆方法的名稱 -overloadaggressively 混淆時應用侵入式重載 -useuniqueclassmembernames 確定統一的混淆類的成員名稱來增加混淆 -flattenpackagehierarchy {package_name} 重新包裝所有重命名的包并放在給定的單一包中 -repackageclass {package_name} 重新包裝所有重命名的類文件中放在給定的單一包中 -dontusemixedcaseclassnames 混淆時不會產生形形色色的類名 -keepattributes {attribute_name,...} 保護給定的可選屬性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, InnerClasses. -renamesourcefileattribute {string} 設置源文件中給定的字符串常量 ~~~ ## ProGuard語法常見使用 ### 不混淆某類的構造方法,需指定構造函數的參數類型 -keepclassmembers class com.android.treesouth.Test { public?(int); } ### 不混淆某個包所有類或某個類class、某個接口interface, 不混淆指定類則把**換成類名或interface -keep class com.android.treesouth.** {?*; } ### 不混淆指某個方法,*可換成指定的方法或類名,遇到非基本數據類型要寫完整包路徑 -keepclassmembers class com.android.treesouth.Test { public boolean get(java.lang.String, android.view.View); } ### 不混淆某個類的子類,某個接口的實現 -keep public class?*extends com.ticktick.example.Test -keep class?*implementscom.ticktick.example.TestInterface { public static final com.ticktick.example.TestInterface$Creator *; } ## ProGuard實例 | 1 | -ignorewarnings # 忽略警告,避免打包時某些警告出現 -optimizationpasses 5 # 指定代碼的壓縮級別 -dontusemixedcaseclassnames # 是否使用大小寫混合 -dontskipnonpubliclibraryclasses # 是否混淆第三方jar -dontpreverify # 混淆時是否做預校驗 -verbose # 混淆時是否記錄日志 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆時所采用的算法 -libraryjars libs/treecore.jar #缺省proguard 會檢查每一個引用是否正確,但是第三方庫里面往往有些不會用到的類,沒有正確引用。如果不配置的話,系統就會報錯。 -dontwarn android.support.v4.** -dontwarn android.os.** -keep class android.support.v4.** { *; } # 保持哪些類不被混淆 -keep class com.baidu.** { *; } -keep class vi.com.gdi.bgl.android.**{*;} -keep class android.os.**{*;} -keep interface android.support.v4.app.** { *; } -keep public class * extends android.support.v4.** -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.support.v4.widget -keep public class * extends com.sqlcrypt.database -keep public class * extends com.sqlcrypt.database.sqlite -keep public class * extends com.treecore.** -keep public class * extends de.greenrobot.dao.** -keepclasseswithmembernames class * { # 保持 native 方法不被混淆 native ; } -keepclasseswithmembers class * { # 保持自定義控件類不被混淆 public (android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { # 保持自定義控件類不被混淆 public (android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.app.Activity { #保持類成員 public void *(android.view.View); } -keepclassmembers enum * { # 保持枚舉 enum 類不被混淆 public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { # 保持Parcelable不被混淆 public static final android.os.Parcelable$Creator *; } -keep class MyClass; # 保持自己定義的類不被混淆 | ## ProGuard解決Bug 常見問題及解決:[http://proguard.sourceforge.net/index.html#manual/troubleshooting.html](http://proguard.sourceforge.net/index.html#manual/troubleshooting.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看