【发布时间】:2019-01-14 07:54:07
【问题描述】:
我已将 cordova-android 版本更新为 6.4.0,在此之前我安装了 5.1.1。这里的问题是,当更新到 6.4.0 版本时,在构建项目时出现错误。所以为了克服这个问题,我不得不添加下面的代码
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
现在的问题是每次构建项目时,我都必须编辑 build.gradle 文件,该文件是在将平台添加到 Cordova 中的项目时生成的。因为这不是源代码控制的一部分。
为了克服这个问题,我使用了post 中的解决方案。这里我添加 Javascript 文件并在 config.xml 中添加钩子
Java 脚本文件
var fs = require('fs');
var rootdir = process.argv[2];
var android_dir = rootdir + '/platforms/android';
var gradle_file = rootdir + '/build-extras.gradle';
var dest_gradle_file = android_dir + '/build-extras.gradle';
if (fs.existsSync(android_dir) && fs.existsSync(gradle_file)) {
console.log('Copy ' + gradle_file + ' to ' + android_dir);
fs.createReadStream(gradle_file).pipe(fs.createWriteStream (dest_gradle_file));
} else {
console.log(gradle_file + ' not found. Skipping');
}
构建-extras.gradle
ext.postBuildExtras = {
android {
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
}
}
Config.xml 中的钩子
<platform name="android">
<hook src="scripts/buildGradleHook.js" type="before_build" />
</platform>
添加的钩子没有反映在生成的 android 文件夹中。那就是build-extras.gradle文件没有反映在android文件夹中。
【问题讨论】:
-
您不需要更改 javascript 或 config.xml 文件。如果您的环境设置正确,您所要做的就是将
build-extras.gradle放到您的platforms/android目录中,其余的应该自己处理。您还应该只需要configurations.all块 -
@BShaps :这里在platforms/android下添加build-extras.gradle文件的问题是,当平台android被删除时,我会丢失build-extras.gradle文件,因为这不是源代码的一部分控制。
-
只需将文件保存在某处,并在删除/添加平台时将其添加回来。如果很重要,您可以创建一个简单的脚本来运行平台添加并复制 build-extras.gradle 文件。您不需要定期删除平台。
-
@BShaps 复制回 build-extras.gradle 文件不是问题。问题是当我使用新的 build-extras.gradle 文件 (如上所述) 构建项目时,会抛出错误
1: Invalid variable name. Must start with a letter but was: ?ext . At [1:1] @ line 1, column 1. ?ext.postBuildExtras = { ^。您对此有任何想法吗? build-extras.gradle 文件是否正确. -
删除
ext.postBuildExtras和android块,只包括configurations.all块。不知道为什么它认为第一个字符是 ?
标签: android cordova gradle android-gradle-plugin build.gradle