欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java代碼混淆工具ProGuard使用指南(附有1.8以上和以下使用工具)

 更新時間:2025年05月08日 10:59:57   作者:往上爬的泥  
ProGuard是一個開源的Java?class文件縮小器、優(yōu)化器、混淆器和預驗證器,它通過刪除未使用的類、字段、方法和屬性,優(yōu)化字節(jié)碼指令,并重命名類、字段和方法,使反編譯后的代碼難以理解,從而提高應用的安全性,本文給大家詳細介紹了ProGuard使用指南,需要的朋友可以參考下

1.混淆工具版本

ProGuard是一款Java代碼混淆工具。 在開發(fā)組件功能對涉及到公司的核心代碼時,我們需要對項目組件進行Jar包加密。

2、混淆工具使用步驟

2.1 解壓后,執(zhí)行 bin目錄下的proguardgui.bat

2.2、執(zhí)行proguardgui.bat后

如圖:

2.2.1、注意不要關閉DOS窗口

執(zhí)行proguardgui.bat后會出現(xiàn)一個cmd命令框,不要關閉,最小化即可。

2.3、 點擊左側菜單欄中的“Input/Output”按鈕

2.4、點擊右側菜單欄中的“Add input...”按鈕,導入需要被混淆的jar包,選擇文件類型-所有文件

2.5、點擊右側菜單欄中的“Add Output...”按鈕,填寫配置我們需要混淆后輸出的jar包

輸出的jar包需要自己手動填寫,jar包名稱可以自定義 ,所有的jar包類型。

2.6、配置好jar包輸入輸出后

如圖:

2.7、添加支持庫

即eclipse里java project里的libraries所有Library的jar包,或者是idea maven項目中的依賴文件

2.7.1、點擊下方“Library jars,aara,wars,wars,zips,apks,and directories”框右側“Add”按鈕

2.7.2、idea 的lib文件 例如:git 拉取的項目位置 \....\target\.....\WEB-INF\lib (下面有所有依賴的jar包)

當前項目中需要依賴的jar包等

導出maven工程lib依賴

pom.xml
 
方法一:
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-dependency-plugin -->  
    <!--將所依賴的jar包插件導到 -Maven將依賴項復制到target/lib中-->  
    <dependency> 
      <groupId>org.apache.maven.plugins</groupId>  
      <artifactId>maven-dependency-plugin</artifactId>  
      <version>3.1.1</version> 
    </dependency> 
 
 
方法二:
 
   <plugin> 
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-dependency-plugin</artifactId>  
        <executions> 
          <execution> 
            <id>copy-dependencies</id>  
            <phase>package</phase>  
            <goals> 
              <goal>copy-dependencies</goal> 
            </goals>  
            <configuration> 
              <!-- 拷貝項目依賴包到lib/目錄下 -->  
              <outputDirectory>${project.build.directory}/lib</outputDirectory>  
              <!-- 間接依賴也拷貝 -->  
              <excludeTransitive>false</excludeTransitive>  
              <!-- 帶上版本號 -->  
              <stripVersion>false</stripVersion> 
            </configuration> 
          </execution> 
        </executions> 
      </plugin> 

2.8、添加需要的jar包資源

2.9、全不選

2.10、推薦勾選,ukf kk c

2.10.1、混淆規(guī)則

2.11、使用默認規(guī)范

2.12、當前創(chuàng)建jar的環(huán)境

2.13、點擊“process”,再點擊“save configuration”,在彈出的對話框中,輸入要保存的配置文件

首先在指定文件夾下創(chuàng)建一個空test.pro文件,選中test.pro),最后點擊“保存”:

2.14、保存完test.pro文件之后,關閉ProGuard,開始手動修改配置文件test.pro

test.pro文件內容在保存時已自動生成內容,我們只需添加自定義的修改即可,內容如下:

具體內容:

proguard.pro 文件的混淆規(guī)則(test.pro)

2.14.1、自定義配置文件說明

1、這里是列表文本解決Proguard的bug:“java.lang.ClassFormatError: LVTT entry for 'clazz' in class file ** does not match any LVT entry”,需要配置以下參數(shù):

#不優(yōu)化 代碼/配置/變量 
-optimizations !code/allocation/variable 
 
#忽略警告 -ignorewarnings 
 
#忽略泛型 -keepattributes Signature 
 
#忽略注解 -keepattributes *Annotation*

2、解決找不到引用的類是第三方包里面的情況,因為這種情況會在混淆過程中報錯,導致不能混淆代碼,需要配置以下參數(shù):

#不要警告找不到com.alibaba.fastjson.**這個包里面的類的相關引用
-dontwarn com.alibaba.fastjson.**
 
#保持com.alibaba.fastjson.**這個包里面的所有類和所有方法而不混淆
-keep class com.alibaba.fastjson.**{*;}

3、混淆代碼:

#不優(yōu)化 代碼/配置/變量
-optimizations !code/allocation/variable
 
#忽略警告
-ignorewarnings
 
#忽略泛型
-keepattributes Signature
 
#忽略注解
-keepattributes *Annotation*
 
#不要警告找不到com.alibaba.fastjson.**這個包里面的類的相關引用
-dontwarn com.alibaba.fastjson.**
 
#保持com.alibaba.fastjson.**這個包里面的所有類和所有方法而不混淆
-keep class com.alibaba.fastjson.**{*;}
 
#保持這個類及其內容不被混淆
-keep class com.LicenseAuthorization.ClientServices.common.config.InterceptorConfig{*;}
 
#保持只保留類名
-keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckedFilter
 
#保持只保留類名
-keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckListener
 
#保持該類下所有的共有方法不被混淆
-keep class com.LicenseAuthorization.ClientServices.licenseMatch.LicenseVerify{public <methods>;}
 
#保持這個包里面的所有類和所有方法而不混淆
-keep class com.LicenseAuthorization.ClientServices.common.utils.**{*;}
 
#保持這個包里面的所有類和所有方法而不混淆
-keep class com.LicenseAuthorization.license.entity.**{*;}

4、重新啟動ProGuard,加載配置文件test.pro,點擊左菜單“ProGuard”,然后點擊“Load configuration”,選擇之前配置好的pro文件,打開即可,如圖:

5、選擇做菜單“Process”,點擊下方“View configuration”,查看配置文件內容是否正確,最后點擊下方右側“Porcess!”,程序開始進行混淆,如圖:

6、出現(xiàn)“Processing completed successfully”,代表混淆成功!如圖:

3、可能遇到的問題

1.提示:Warning: can’t find referenced class xxx

解決:-dontwarn javax.crypto.** -keep class javax.crypto.** 其他類似警告也如此處理

2.提示 there were 4 unresolved references to classes or interfaces. You may need to add missing …

解決:如果jar包沒有問題,則 在proe文件中,加一行 -ignorewarnings

3.問題:

解決:當前的ProGuard 版本過低,需要換更高的ProGuard版本,或者是將依賴的jar包降低到可以讓ProGuard解析

4.問題

構建該jar包需要的依賴結構不夠完整,就是創(chuàng)建這個jar包的代碼實現(xiàn)所需要引用的import的依賴不完整 (具體可以將所有的jar包都導出來,具體看maven工程導出所有的lib 依賴)

您似乎缺少一些類,導致類層次結構不完整,請參閱手冊中的疑難解答頁面:

ProGuard Manual: Home | Guardsquare

5.問題:在編寫pro文件做jar包數(shù)據(jù)混淆的時候沒有寫對代碼,或者是代碼規(guī)范出錯

原因:

4、其他查閱

proguard.pro 文件的混淆規(guī)則

proguard包括四個功能,shrinker(壓縮), optimizer(優(yōu)化),obfuscator(混淆),preverifier(預校驗),他們的作用分別是:

shrink: 檢測并移除沒有用到的類,變量,方法和屬性;

optimize: 優(yōu)化代碼,非入口節(jié)點類會加上private/static/final, 在字節(jié)碼級別執(zhí)行優(yōu)化,讓應用運行的更快。。

obfuscate: 增大反編譯難度,類和類成員會被隨機命名,除非用keep保護。

preverify: 預校驗代碼是否符合Java1.6或者更高的規(guī)范.

除了proguard之外,還有一個DexGuard,是專門用來優(yōu)化混淆Android應用的。它包括資源混淆,字符串加密,類加密和dex文件分割等。它是在android編譯的時候直接產生Dalvik字節(jié)碼.......

混淆后我們會在工程目錄app/build/outputs/mapping/release(debug)下找到一個mapping.txt文件,這就是混淆規(guī)則,我們可以根據(jù)這個文件把混淆后的代碼反推回源本的代碼,所以這個文件比較重要,請妥善保管

5、優(yōu)先查閱

#不優(yōu)化 代碼/配置/變量
-optimizations !code/allocation/variable
 
#忽略警告
-ignorewarnings
 
#忽略泛型
-keepattributes Signature
 
#忽略注解
-keepattributes *Annotation*
 
#不要警告找不到com.alibaba.fastjson.**這個包里面的類的相關引用
-dontwarn com.alibaba.fastjson.**
 
#保持com.alibaba.fastjson.**這個包里面的所有類和所有方法而不混淆
-keep class com.alibaba.fastjson.**{*;}
 
#保持這個類及其內容不被混淆
-keep class com.LicenseAuthorization.ClientServices.common.config.InterceptorConfig{*;}
 
#保持只保留類名
-keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckedFilter
 
#保持只保留類名
-keep class com.LicenseAuthorization.ClientServices.common.config.LicenseCheckListener
 
#保持該類下所有的共有方法不被混淆
-keep class com.LicenseAuthorization.ClientServices.licenseMatch.LicenseVerify{public <methods>;}
 
#保持這個包里面的所有類和所有方法而不混淆
-keep class com.LicenseAuthorization.ClientServices.common.utils.**{*;}
 
#保持這個包里面的所有類和所有方法而不混淆
-keep class com.LicenseAuthorization.license.entity.**{*;}
 
-keep class com.xzt.demotwo.*  # 一顆星只保持本包的類名(不包含內容)
 
-keep class com.xzt.demotwo.** # 二顆星表示保持本包和子包下的類名(不包含內容)
 
#只保持本包的類名和內容
 
-keep class com.xzt.demotwo.*{*;}
 
#可以保持本包和子包的類名和內容
 
-keep class com.xzt.demotwo.**{*;}
#你還可以在<fields>或<methods>前面加上private 、public、native等來進一步指定不被混淆的內容,如
#包下的所有公共方法  
 
-keep class com.xzt.demotwo{
 
public <methods>;
 
}
 
#保持某個具體的類名不被混淆
 
-keep class com.xzt.demotwo.MainActivity
 
#保持某個具體的類及其內容不被混淆
 
-keep class com.xzt.demotwo.MainActivity{*;}
 
#保持類中特定內容,而不是所有的內容可以使用如下:
 
-keep class com.xzt.demotwo.MainActivity{
 
〈init〉;#匹配所有構造器
 
〈fields〉;#匹配所有域
 
〈methods〉;#匹配所有方法
 
 } 
 
 
 
 
#表示MainActivity下的所有public方法都不會被混淆,當然你還可以加入參數(shù),比如以下表示用JSONObject作為入參的構造函數(shù)不會被混淆
 
-keep class com.xzt.demotwo {
 
  public <init>(org.json.JSONObject);
 
}
 
#保持類中特定內容,還可以進一步縮小范圍
 
-keep class com.xzt.demotwo.MainActivity{
 
public ;#保持該類下所有的共有方法不被混淆
 
public *;#保持該類下所有的共有內容不被混淆
 
private ;#保持該類下所有的私有方法不被混淆
 
private *;#保持該類下所有的私有內容不被混淆
 
public (java.lang.String);#保持該類的String類型的構造方法
 
}
 
#在方法后加入參數(shù),限制特定的構造方法
 
-keep class com.xzt.demotwo.MainActivity{
 
public (String);
 
}
 
#要保留一個類中的內部類及其內容不被混淆需要用 $ 符號
 
-keep class com.xzt.demotwo.MainActivity$MyClass{*;}
 
 
#使用Java的基本規(guī)則來保護特定類不被混淆,比如用extends,implement等這些Java規(guī)則,
 
#如下:保持Android底層組件和類不要混淆
 
  -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.view.View
 
#如果不需要保持類名,只需要保持該類下的特定方法保持不被混淆,
 
#需要使用keepclassmembers,而不是keep,因為keep方法會保持類名。
 
#保持MainActivity類下test(String)方法不被混淆
 
-keepclassmembernames class com.xzt.demotwo.MainActivity{
 
public void test(java.lang.String);
 
}
  # 如果擁有某成員,保留類和類成員
 
  -keepclasseswithmembernames class com.xzt.demotwo.MainActivity

以上就是Java代碼混淆工具ProGuard使用指南(附有1.8以上和以下使用工具)的詳細內容,更多關于Java ProGuard使用的資料請關注腳本之家其它相關文章!

相關文章

  • log4j2日志異步打印(實例講解)

    log4j2日志異步打印(實例講解)

    下面小編就為大家?guī)硪黄猯og4j2日志異步打印(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Spring Boot異常處理靜止trace

    Spring Boot異常處理靜止trace

    這篇文章主要介紹了Spring Boot異常處理靜止trace,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java ObjectMapper使用詳解

    Java ObjectMapper使用詳解

    ObjectMapper類是Jackson的主要類,它可以幫助我們快速的進行各個類型和Json類型的相互轉換,本文給大家介紹Java ObjectMapper的相關知識,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • mybatis的ParamNameResolver參數(shù)名稱解析

    mybatis的ParamNameResolver參數(shù)名稱解析

    這篇文章主要為大家介紹了mybatis的ParamNameResolver參數(shù)名稱解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Java synchronize線程安全測試

    Java synchronize線程安全測試

    這篇文章主要介紹了Java synchronize線程安全測試,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Spring的嵌套事務(Propagation.NESTED)到底是個啥案例代碼講解

    Spring的嵌套事務(Propagation.NESTED)到底是個啥案例代碼講解

    SavePoint是數(shù)據(jù)庫事務中的一個概念,?可以將整個事務切割為不同的小事務,可以選擇將狀態(tài)回滾到某個小事務發(fā)生時的樣子,本文通過案例代碼講解Spring的嵌套事務(Propagation.NESTED)到底是個啥,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • 詳解Springboot Oauth2 Server搭建Oauth2認證服務

    詳解Springboot Oauth2 Server搭建Oauth2認證服務

    這篇文章主要介紹了Springboot Oauth2 Server 搭建Oauth2認證服務,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Java ConcurrentModificationException異常解決案例詳解

    Java ConcurrentModificationException異常解決案例詳解

    這篇文章主要介紹了Java ConcurrentModificationException異常解決案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • SpringBoot 動態(tài)定時器的使用方法

    SpringBoot 動態(tài)定時器的使用方法

    這篇文章主要介紹了SpringBoot 動態(tài)定時器的使用方法,非常不錯,具有一定的參考借鑒借鑒價值,需要的朋友可以參考下
    2018-05-05
  • Spring實戰(zhàn)之獲取方法返回值操作示例

    Spring實戰(zhàn)之獲取方法返回值操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之獲取方法返回值操作,涉及spring配置文件與方法返回值操作相關使用技巧,需要的朋友可以參考下
    2019-12-12

最新評論