我已将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');
}
Build-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文件夹中。
答案 0 :(得分:1)
我尝试了您的解决方案,发现声明用来定义不同路径的vars错误。
我为此更改了挂钩代码:
module.exports = function(ctx) {
var fs = ctx.requireCordovaModule('fs'),
path = ctx.requireCordovaModule('path'),
rootdir = ctx.opts.projectRoot,
android_dir = path.join(ctx.opts.projectRoot, 'platforms/android');
gradle_file = rootdir + '/build-extras.gradle';
dest_gradle_file = android_dir + '/build-extras.gradle';
/*
console.log("Before-Build Hook - rootdir", rootdir);
console.log("Before-Build Hook - android_dir", android_dir);
console.log("Before-Build Hook - gradle_file", gradle_file);
console.log("Before-Build Hook - dest_gradle_file", dest_gradle_file);
*/
if(!fs.existsSync(gradle_file)){
console.log(gradle_file + ' not found. Skipping');
return;
}else if(!fs.existsSync(android_dir)){
console.log(android_dir + ' not found. Skipping');
return;
}
console.log('Copy ' + gradle_file + ' to ' + android_dir);
fs.createReadStream(gradle_file).pipe(fs.createWriteStream(dest_gradle_file));
}
此外,在Hook文档中说它必须是可执行文件,因此需要用“ module.exports = function(ctx){}”包装。