1.将项目中的第三方jar包输出到一个jar包:
dependencies {
//引入的第三方jar包
implementation files('libs/bcprov-jdk15-1.32.jar')
implementation files('libs/bgmprovider-1.0.3.jar')
implementation files('libs/javawriter-2.1.1.jar')
}
build.gradle 增加 makeJar Task:
task makeJar(type:Jar){
delete 'build/libs/usagestats-java.jar'//删除之前的包
archivesBaseName = "usagestats-java"//打包后的jar名
//添加module自身代码编译出的jar文件
from(project.zipTree('build/intermediates/aar_main_jar/release/classes.jar'))
//第三方jar包会在build/intermediates/aar_libs_directory/release/libs/下生成对应jar包(AS4.1.3),全部添加到目标jar包
from(project.zipTree('build/intermediates/aar_libs_directory/release/libs/bcprov-jdk15-1.32.jar'))
from(project.zipTree('build/intermediates/aar_libs_directory/release/libs/bgmprovider-1.0.3.jar'))
from(project.zipTree('build/intermediates/aar_libs_directory/release/libs/javawriter-2.1.1.jar'))
//jar包输出路径
destinationDir = file('build/libs')
}
2.使用dx.bat jar文件转dex时遇到的问题:
命令:
dx.bat --dex --output target-dex.jar source-java.jar
报错:invalid opcode ba - invokedynamic requires --min-sdk-version >= 26 (currently 13)
增加–min-sdk-version=26 可以解决该错误,命令改为:
dx.bat --dex --min-sdk-version=26 --output target-dex.jar source-java.jar
但是运行会闪退,错误:
Failed to open dex from file descriptor for zip file ‘/data/app/com.test/base.apk’: Failed to open dex file ‘xxx.jar’ from memory: Unrecognized version number in xxx.jar: 0 3 6
无法识别036版本,这个是在dex文件header中定义的,调试发现–min-sdk-version会影响036的值,但是修改该参数会导致某些jar包编译不通过。
3.改用d8.bat
d8.bat --output /xxx/out-dex.jar /xxx/in-java.jar
执行后一堆警告,最后报错:
Error: Class or interface java.io.IOException required for desugaring of try-with-resources is not found
最后添加–min-api参数解决:
d8.bat --min-api 26 --output /xxx/out-dex.jar /xxx/in-java.jar