android jar包編譯與反編譯技巧
android studio 打jar包
- 生成可執行的jar包
gradle配置
apply plugin: 'java'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
jar {
archiveName 'alantest.jar'
manifest {
attributes 'Main-Class': 'com.actview.alantest.AlanTest'
}
}
主要用來打成可執行的java程序,比如寫一寫小的輔助工具,需要指定jar包名稱,main函數所在文件
- 生成java依賴支持jar包
方法就行新建java library
新建好的module如下:
gradle配置如下
apply plugin: 'java-library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
jar {
archiveName 'mytest.jar'
}
- 打android依賴包jar包
新建android module
新建完的module如下
點擊build==》》make module,編譯module,生成編譯文件,結果如下,jar包已生成
android jar包反編譯
在平時的開發過程中,有時候會使用到第三方的jar包文件,由於第三方的jar包文件集成度比較高,並不符合我們自己項目的相關功能或者業務邏輯要求,需要對jar包文件進行修改,然後重新打成jar包使用,或者直接使用反編譯出的jar包源文件作爲依賴庫。
以上面我們打出的jar包爲例,我們拿到的只有jar文件
首先需要將.class文件轉換成java文件供我們修改
.class文件查看可以直接在android studio內查看,如下所示
打開的.class文件由於沒有用到混淆編譯,所以與源文件相同,起始混淆和不混淆在機器面前都是一樣的,只是增加反編譯的難度,方法變量等名稱不便於理解,要一步步找,費事
將.class文件反編譯成java文件,使用android studio 使用到的開源工具fernflower,源碼庫可以從GitHub找到
將fernflower打包成jar工具包,
輸入反編譯指令進行反編譯
D:\mywork>java -jar fernflower.jar -dgs=true D:\mywork\mytest.jar D:\mywork\decompile
跳轉到fernflower所在的工作目錄,指定需要反編譯的jar文件mytest.jar,輸入到路徑decompile下
反編譯結果在decompile文件夾下,生成的是一個jar包,可以解壓到本目錄,解壓之後發現文件已變成.java可編輯的java源碼
將反編譯後的java文件,放入到新建的module中,包名一致,修改後根據上面編譯打包jar文件的步驟重新進行相關打包工作,即完成jar文件的反編譯替換,或者將重新編譯後的jar中的.class文件替換目標jar包中的.class文件