最近在做和车机相关的android项目,引入framework.jar一直都是正常的,今天引入新的jar,编译的时候突然报这个错
Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535,排查了一圈,发现是由于引入framework.jar导致的。
下面记录下自己是如何解决这个问题的,默认我的framework.jar是放在libs下面
产生问题的原因:
这个异常可以理解为,总函数数量超出java虚拟机的限制.
如何解决:
1. 把implementation改为compileOnly ,这样做得目的是 framework.jar只在编译阶段使用,打包apk时候不打包进入,可以减小apk包的大小
//compileOnly 是Androidstudio 3.x以上版本使用,以下版本使用provided
implementation files(‘libs/framework.jar’) 更换为 compileOnly files(‘libs/framework.jar’)
2. 在project的build.gradle中的allprojects闭包中添加
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
//注:app\\libs\\framework.jar是framework.jar 在项目的中存放的路径
options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
}
}
以上配置做完后,如果编译还是报同样的错误(我的项目就是这样的),那就再做第三步修改
3.把model的build.gradle 注释掉 implementation fileTree(include: ['*.jar'], dir: 'libs'),此引入会把lib下的所有jar包打包到apk,导致冲突造成的
这样再重新编译,就可以运行成功了。