问题描述
新项目中需要使用新的类覆盖系统framework里的类,在Android 4.1.3
版本中配置如下:
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:<path to my framework jar file>')
}
}
}
在下载最新版本Android Studio Arctic Fox | 2020.3.1 Patch 3
后,运行报错,新类里的方法、变量都无法识别,新增的类也无法识别,以上配置已失效
问题原因
网上搜索,发现是java 9
版本中移除了java -Xbootclasspath
和-Xbootclasspath/p
选项:https://www.oracle.com/java/technologies/javase/9-relnotes.html,建议使用JEP 261
中描述的--patch-module
选项。
然而无法找到如何在Android Studio
中配置--patch-module
选项的方法。
解决方法
目前自己摸索加网上搜索找到了两种方法:
降级jdk
Android Studio Arctic Fox | 2020.3.1 Patch 3
默认使用了内置的jdk11
,手动配置选择使用旧版本的jdk1.8
可以解决问题
这个方案有局限性,编译用的jdk
被限制在jdk1.8
及以下版本
使用bootstrapClasspath
选项
在https://blog.csdn.net/zou249014591/article/details/109752786这篇博文中介绍了如下方案:
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
Set<File> fileSet = options.bootstrapClasspath.getFiles()
List<File> newFileList = new ArrayList<>();
newFileList.add(new File("<path to my framework jar file>""))
newFileList.addAll(fileSet)
options.bootstrapClasspath = files(
newFileList.toArray()
)
}
}
同样解决问题,这个方案使用jdk1.8
及jdk11
都可以编译
--patch-module
选项
官方建议采用--patch-module
选项来替换-Xbootclasspath/p
选项,目前还没研究出来怎么配置
TODO
参考
-Xbootclasspath/p is no longer a supported option
android编译 配置-Xbootclasspath/p优先级无效(AndroidStudio升级到4.2.2后失效,或者jenkins 多模块依赖不同framework.jar导致失效)
没有评论:
发表评论