AndroidStudio解决引入framework.jar造成的 Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535问题

AndroidStudio解决引入framework.jar造成的 Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535问题

需求场景:需要在AS中导入framework.jar

业务需要,对底层代码进行了定制,在上层app开发中需要引入framework.jar进行相关开发工作.

引入framework.jar后造成的错误:

Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535
这个异常可以理解为,总函数数量超出java虚拟机的限制. 有很多种解决方案,比如使用谷歌提供的multi进行分包处理.但是这种方法不适用我这种场景

解决方案:修改framework.jar的编译方式

将:implementation files(‘libs/framework.jar’)的引用方式更换为compileOnly files(‘libs/framework.jar’)
后者的含义为只编译不集成进apk或者jar包中, 相当于编译的时候有framework.jar环境,但是却不会将framework.jar的相关引用编译进jar或者apk中.至此,这次遇到的问题就得到了有效的解决.

注意

AS会默认使用SDK中的framework相关api,所以需要在项目根目录中的build.gradle文件中做如下配置:
AndroidStudio解决引入framework.jar造成的 Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535问题
最关键的配置为:options.compilerArgs.add(’-Xbootclasspath/p:app/libs/framework.jar’)
这样在AS的编译过程中,会优先从我们的framework.jar中读取相关api接口.
以上,作为个人记录,有疑问可留言.