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文件