2021年12月6日星期一

Android Studio Arctic Fox中-Xbootclasspath/p选项失效问题

 

问题描述

新项目中需要使用新的类覆盖系统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.8jdk11都可以编译

--patch-module选项

官方建议采用--patch-module选项来替换-Xbootclasspath/p选项,目前还没研究出来怎么配置

TODO

参考

-Xbootclasspath/p is no longer a supported option

JDK 9 Release Notes

android编译 配置-Xbootclasspath/p优先级无效(AndroidStudio升级到4.2.2后失效,或者jenkins 多模块依赖不同framework.jar导致失效)

没有评论:

发表评论

Android logcat

Log等级 Android log 等级在 android/log.h 中定义如下: typedef   enum   android_LogPriority {    /** For internal use only. */ ANDROID_LOG_UNKNOWN =...