【问题标题】:Add Custom values to build.gradle file via build-extras.gradle in Cordova通过 Cordova 中的 build-extras.gradle 将自定义值添加到 build.gradle 文件
【发布时间】: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.postBuildExtrasandroid 块,只包括 configurations.all 块。不知道为什么它认为第一个字符是 ?

标签: android cordova gradle android-gradle-plugin build.gradle


【解决方案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) { }”包装。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多