如何解决React Native裸项目中jlink不存在的报错问题?
npm run android的JDK报错问题 问题重现
执行npm run android时出现报错:
Execution failed for task ':expo-modules-core:compileDebugJavaWithJavac'.
Could not resolve all files for configuration ':expo-modules-core:androidJdkImage'.
Failed to transform core-for-system-modules.jar to match attributes {artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
Execution failed for JdkImageTransform: /home/dukizwe/Android/Sdk/platforms/android-31/core-for-system-modules.jar.
jlink executable /usr/lib/jvm/java-14-openjdk-amd64/bin/jlink does not exist
系统/usr/lib/jvm/下存在多个JDK版本,且Android Studio已指定Java11,但Gradle仍尝试使用缺失jlink的Java14。
解决方案
1. 切换系统默认JDK到Java11
Gradle可能优先使用系统默认JDK而非Android Studio配置的版本,执行以下命令切换:
- 查看当前默认Java版本:
java -version javac -version - 切换默认Java和Javac到Java11:
在弹出的选项中选择sudo update-alternatives --config java sudo update-alternatives --config javacjava-11-openjdk-amd64对应的序号。
2. 强制Gradle使用Java11
在项目根目录的gradle.properties文件中添加以下配置,指定Gradle使用的JDK路径:
org.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64
或者通过Android Studio设置:进入File > Settings > Build, Execution, Deployment > Build Tools > Gradle,在Gradle JDK下拉选择java-11-openjdk-amd64,然后点击Sync Now同步项目。
3. 清理项目缓存后重新构建
执行以下命令清理缓存并重装依赖:
./gradlew clean npm cache clean --force rm -rf node_modules && npm install
之后重新运行npm run android。
4. (可选)卸载不完整的Java14
如果上述方法无效,可卸载缺失jlink的Java14版本,避免Gradle误选:
sudo apt remove openjdk-14-jdk openjdk-14-jre
内容的提问来源于stack exchange,提问作者dukizwe

