android dx.bat、d8.bat jar转dex错误记录

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

猜你喜欢

转载自blog.csdn.net/weixin_40652755/article/details/129246538