如何防止Cordova Android中gradle.properties文件被覆盖?
Cordova Android构建时gradle.properties被覆盖的解决办法
问题背景
在Cordova 11.0.0项目中构建Android平台(依赖cordova-android: ^10.1.2),使用gradle 7.4.2时出现报错:
Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module
该问题与Java 18兼容性有关,需在platforms/android/gradle.properties中添加对应属性修复。但使用官方推荐的before_build钩子脚本复制自定义文件后,文件仍会被默认版本覆盖。
可行解决方案
1. 切换到after_prepare钩子脚本
before_build的执行时机早于Cordova生成/覆盖平台文件的流程,改用after_prepare钩子:
- 在项目根目录的
hooks文件夹下创建after_prepare目录,放入自定义脚本,在平台资源准备完成后复制自定义gradle.properties到platforms/android/目录。此时文件不会被后续构建步骤覆盖。
2. 使用Cordova模板机制
在项目根目录创建路径res/native/android/,将自定义的gradle.properties文件放入该目录。Cordova在生成Android平台文件时,会优先使用此目录下的模板文件,而非默认版本,从根源避免覆盖问题。
3. 直接在config.xml中注入属性
无需替换整个gradle.properties,直接在项目根目录的config.xml中添加配置,让Cordova自动注入所需属性:
<platform name="android"> <preference name="gradleProperties" value="org.gradle.jvmargs=--add-opens java.base/java.io=ALL-UNNAMED" /> </platform>
此方式无需操作平台目录下的文件,完全避免覆盖问题。
内容的提问来源于stack exchange,提问作者glennr
相关产品推荐
相关产品推荐

