梦天2015 2025-06-04 14:50 采纳率: 0%
浏览 48

androidstudio如何在jdk11中引用systemApi正常编译出apk

在androidstudio中通过compileOnly引用自编译的framework且配置jdk为1.8,就可以在代码中使用systemApi或hide api,能正常打包出apk,能正常运行。
activity内容

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int a = Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT;
        Log.d("MainActivity", "onCreate: a:" + a);
    }
}

app的build.gradle配置如下:

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
//        sourceCompatibility JavaVersion.VERSION_11
//        targetCompatibility JavaVersion.VERSION_11
    }
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            println "bootstrapClasspath is null: " + (options.bootstrapClasspath == null)
            if (options.bootstrapClasspath != null) {
                Set<File> fileSet = options.bootstrapClasspath.getFiles()
                List<File> newFileList = new ArrayList<>();
                newFileList.add(new File("libs/framework.jar"))
                newFileList.addAll(fileSet)
                options.bootstrapClasspath = files(newFileList.toArray())
            }
        }
    }
}

但jdk1.8是很老的版本了,目前最新的是jdk24。在把compileOptions的jdk版本改成1.8之后项目就无法编译运行了,比如compileOptions改成如下,

    compileOptions {
//        sourceCompatibility JavaVersion.VERSION_1_8
//        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

app编译就报错:

img

请问这个怎么解?

说明:我是在androidstudio里开发系统app,要直接使用systemApi,另外我的代码以及部分引用的库使用了jdk1.8之后新特性。所以不要说降低jdk版本或是反射使用systemApi。
问题代码已上传github:https://github.com/haipinghuang/SystemApiDemo, 拉下来可直接运行

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-06-04 14:50
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    Android Studio如何在 JDK 11 中引用 System API 正常编译出 APK

    你遇到的问题是,在 Android Studio 中使用 JDK 11 作为编译器,无法正常编译包含 System API 的代码,并生成可运行的 APK。

    解决方案是:

    1. build.gradle 文件中添加以下配置:
    android {
        compileSdkVersion 29
        defaultConfig {
            targetSdkVersion 29
            minSdkVersion 21
        }
        compileOptions {
            sourceCompatibility = 1.8
            targetCompatibility = 1.8
        }
    }
    

    这将设置编译器的源兼容性和目标兼容性为 JDK 1.8。

    1. build.gradle 文件中添加以下配置:
    android {
        // ...
        javaCompileOptions {
            bootClasspath = [files('libs/boot.jar')]
        }
    }
    

    这将添加 boot.jar 到编译器的类路径中,以便编译器可以正确地处理 System API。

    1. settings.gradle 文件中添加以下配置:
    include ':app'
    

    这将将 app 模块添加到项目中,以便 Android Studio 可以正确地编译和打包 APK。

    1. 重新编译和打包 APK。

    这样,你就可以在 Android Studio 中使用 JDK 11 作为编译器,正常编译包含 System API 的代码,并生成可运行的 APK。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月4日