代码之家  ›  专栏  ›  技术社区  ›  Shashank HS

通过Cordova中的build-extras.gradle向build.gradle文件添加自定义值

  •  2
  • Shashank HS  · 技术社区  · 6 年前

    我已经将CordovaAndroid版本更新到了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

    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');
    }
    

    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>
    

    1 回复  |  直到 6 年前
        1
  •  2
  •   Adan Martinez    6 年前

    我尝试了您的解决方案,发现声明用于定义不同路径的变量是错误的。

    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中,doc说它必须是可执行的,所以需要用“module.exports=function(ctx){}”包装它。