1. Exporte el paquete jar de terceros en el proyecto a un paquete 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 agrega la tarea makeJar:
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. Problemas encontrados al usar el archivo jar dx.bat para convertir a dex:
comando:
dx.bat --dex --output target-dex.jar source-java.jar
Error: código de operación no válido ba - invoquedynamic requiere --min-sdk-version >= 26 (actualmente 13)
Agregar --min-sdk-version=26 puede resolver el error, el comando se cambia a:
dx.bat --dex --min-sdk-version=26 --output target-dex.jar source-java.jar
Pero la operación fallará, error:
No se pudo abrir dex desde el descriptor de archivo para el archivo zip '/data/app/com.test/base.apk': No se pudo abrir el archivo dex 'xxx.jar' de la memoria: Número de versión no reconocido en xxx.jar: 0 3 6
No se puede reconocer la versión 036. Esto se define en el encabezado del archivo dex. La depuración encontró que –min-sdk-version afectará el valor de 036, pero modificar este parámetro hará que algunos paquetes jar no se compilen.
3. Usa d8.bat en su lugar
d8.bat --output /xxx/out-dex.jar /xxx/in-java.jar
Un montón de advertencias después de la ejecución, y finalmente un error:
Error: No se encontró la clase o interfaz java.io.IOException requerida para desugaring de try-with-resources
Finalmente, agregue el parámetro –min-api para resolver:
d8.bat --min-api 26 --output /xxx/out-dex.jar /xxx/in-java.jar