最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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文件內(nèi)容在保存時已自動生成內(nèi)容,我們只需添加自定義的修改即可,內(nèi)容如下:

具體內(nèi)容:

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.**{*;}
 
#保持這個類及其內(nèi)容不被混淆
-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”,查看配置文件內(nèi)容是否正確,最后點擊下方右側“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編譯的時候直接產(chǎn)生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.**{*;}
 
#保持這個類及其內(nèi)容不被混淆
-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.*  # 一顆星只保持本包的類名(不包含內(nèi)容)
 
-keep class com.xzt.demotwo.** # 二顆星表示保持本包和子包下的類名(不包含內(nèi)容)
 
#只保持本包的類名和內(nèi)容
 
-keep class com.xzt.demotwo.*{*;}
 
#可以保持本包和子包的類名和內(nèi)容
 
-keep class com.xzt.demotwo.**{*;}
#你還可以在<fields>或<methods>前面加上private 、public、native等來進一步指定不被混淆的內(nèi)容,如
#包下的所有公共方法  
 
-keep class com.xzt.demotwo{
 
public <methods>;
 
}
 
#保持某個具體的類名不被混淆
 
-keep class com.xzt.demotwo.MainActivity
 
#保持某個具體的類及其內(nèi)容不被混淆
 
-keep class com.xzt.demotwo.MainActivity{*;}
 
#保持類中特定內(nèi)容,而不是所有的內(nèi)容可以使用如下:
 
-keep class com.xzt.demotwo.MainActivity{
 
〈init〉;#匹配所有構造器
 
〈fields〉;#匹配所有域
 
〈methods〉;#匹配所有方法
 
 } 
 
 
 
 
#表示MainActivity下的所有public方法都不會被混淆,當然你還可以加入?yún)?shù),比如以下表示用JSONObject作為入?yún)⒌臉嬙旌瘮?shù)不會被混淆
 
-keep class com.xzt.demotwo {
 
  public <init>(org.json.JSONObject);
 
}
 
#保持類中特定內(nèi)容,還可以進一步縮小范圍
 
-keep class com.xzt.demotwo.MainActivity{
 
public ;#保持該類下所有的共有方法不被混淆
 
public *;#保持該類下所有的共有內(nèi)容不被混淆
 
private ;#保持該類下所有的私有方法不被混淆
 
private *;#保持該類下所有的私有內(nèi)容不被混淆
 
public (java.lang.String);#保持該類的String類型的構造方法
 
}
 
#在方法后加入?yún)?shù),限制特定的構造方法
 
-keep class com.xzt.demotwo.MainActivity{
 
public (String);
 
}
 
#要保留一個類中的內(nèi)部類及其內(nèi)容不被混淆需要用 $ 符號
 
-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以上和以下使用工具)的詳細內(nèi)容,更多關于Java ProGuard使用的資料請關注腳本之家其它相關文章!

相關文章

  • java之CSV大批量數(shù)據(jù)入庫的實現(xiàn)

    java之CSV大批量數(shù)據(jù)入庫的實現(xiàn)

    本文主要介紹了java之CSV大批量數(shù)據(jù)入庫的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • SpringBoot注解@EnableScheduling定時任務詳細解析

    SpringBoot注解@EnableScheduling定時任務詳細解析

    這篇文章主要介紹了SpringBoot注解@EnableScheduling定時任務詳細解析,@EnableScheduling 開啟對定時任務的支持,啟動類里面使用@EnableScheduling 注解開啟功能,自動掃描,需要的朋友可以參考下
    2024-01-01
  • m1 Mac設置多jdk版本并動態(tài)切換的實現(xiàn)

    m1 Mac設置多jdk版本并動態(tài)切換的實現(xiàn)

    本文主要介紹 Mac 下如何安裝 JDK 并且多版本如何切換,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot微服務注冊分布式Consul的詳細過程

    SpringBoot微服務注冊分布式Consul的詳細過程

    這篇文章主要介紹了SpringBoot(微服務)注冊分布式Consul,Spring Boot應用可以通過向Consul注冊自身來實現(xiàn)服務發(fā)現(xiàn)和治理,使得其他服務可以在Consul中發(fā)現(xiàn)并調(diào)用它,需要的朋友可以參考下
    2023-04-04
  • JAVA通過HttpURLConnection 上傳和下載文件的方法

    JAVA通過HttpURLConnection 上傳和下載文件的方法

    這篇文章主要介紹了JAVA通過HttpURLConnection 上傳和下載文件的方法,非常具有實用價值,需要的朋友可以參考下
    2017-09-09
  • Java使用jxl庫輕松玩轉Excel表操作

    Java使用jxl庫輕松玩轉Excel表操作

    jxl?是一個非常實用的?Java?庫,專門用于操作?Excel?表格,這篇文章主要為大家介紹了如何使用jxl進行Excel的基本操作,有需要的可以了解下
    2025-02-02
  • 詳解如何用Java去除HTML標簽

    詳解如何用Java去除HTML標簽

    在平時工作中,偶爾會用 Java 做一些解析HTML的工作。有時需要刪除所有的HTML標簽,只保留純文字內(nèi)容。這個問題在做過一些爬蟲工作的朋友來說很簡單。下面來說說,我們平時使用到的集中解析的方法
    2022-12-12
  • java調(diào)用百度定位api服務獲取地理位置示例

    java調(diào)用百度定位api服務獲取地理位置示例

    java調(diào)用百度定位api服務獲取地理位置示例,大家參考使用吧
    2013-12-12
  • Java IO之序列化與反序列化詳解

    Java IO之序列化與反序列化詳解

    這篇文章主要為大家介紹了Java IO之序列化與反序列化,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java LongAdder原理解析與實戰(zhàn)應用小結

    Java LongAdder原理解析與實戰(zhàn)應用小結

    LongAdder是Java 8中java.util.concurrent.atomic包引入的高性能計數(shù)器類,專為高并發(fā)場景下的數(shù)值累加操作優(yōu)化設計,本文給大家介紹Java LongAdder原理解析與實戰(zhàn)應用小結,感興趣的朋友一起看看吧
    2025-06-06

最新評論

皮山县| 东莞市| 庆阳市| 尼木县| 彭州市| 安顺市| 铜鼓县| 水城县| 宜州市| 绥化市| 丹棱县| 邵武市| 武义县| 紫阳县| 宣城市| 通化县| 宾川县| 绥滨县| 祁阳县| 聂拉木县| 聂拉木县| 社会| 宁明县| 民丰县| 峨边| 高阳县| 柳林县| 喀喇| 葫芦岛市| 岳阳市| 和顺县| 广西| 容城县| 枣庄市| 老河口市| 凤台县| 望城县| 晋中市| 平遥县| 石林| 平乐县|