使用Cordova构建时定义Android Gradle插件版本

643ylb08  于 2023-06-30  发布在  Android
关注(0)|答案(3)|浏览(475)

使用Cordova构建Android项目时,在Android Studio中打开时收到以下消息:

我的build.gradle文件反映了插件的差异(尽管Gradle版本定义是正确的):

dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
    }

我想知道是否有一种方法可以配置Cordova来显式定义Android Gradle插件版本。

wlwcrazw

wlwcrazw1#

Android Gradle插件版本已硬编码到cordova-android中的build.gradle模板中。
如果你从master分支安装平台,你可以看到它使用的是比最新的npm版本cordova-android@7.1.4更高的版本(3.2.0),后者是为3.0.1配置的。
要直接从master分支安装,请执行以下操作:

cordova platform add https://github.com/apache/cordova-android

如果你想使用最新的版本,你可以fork cordova-android repo,在build.gradle模板中固定你想要的版本,然后直接从你的fork repo安装插件:

cordova platform add https://github.com/my_github_username/cordova-android
rbpvctlc

rbpvctlc2#

我遇到了一个问题,需要在platforms/android/build.gradle文件中指定一个替代版本的gradle插件,而不是默认的Cordova android build生成的版本。所以,为了解决这个问题,我创建了一个Cordova钩子脚本,在after_platform_add上运行,它修改了gradle插件版本。

详情

Cordova 9构建生成了一个build.gradle文件,其中包含以下gradle插件版本3.3.0依赖项:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        classpath 'com.android.tools.build:gradle:3.3.0'
    }
}

但是,我需要版本3.3.3的插件.
1.在Cordova config.xml文件中,我在我的android平台部分添加了这个钩子:

<platform name="android">
        <hook type="after_platform_add" src="hooks/android/modify-android-gradle-plugin-version.js" />
        ...
    </platform>

1.然后我添加了这个modify-android-gradle-plugin-version.js钩子脚本。(请原谅我的JavaScript不完美,我不是jsMaven。

const fs = require('fs');
const path = require('path');
const deferral = require('q').defer();
const async = require('async');

module.exports = function(ctx) {
    console.log('Running modify-android-gradle-plugin-version.js...');

    const platformRoot = path.join(ctx.opts.projectRoot, 'platforms/android');
    const gradleFiles = [path.join(platformRoot, 'build.gradle')];
    async.each(gradleFiles, function(f, cb) {
        fs.readFile(f, 'utf8', function(err, data) {
            if (err) {
                cb(err);
                return;
            }
            // regex to replace version 3.3.0 with version 3.3.3
            const result = data.replace(/com\.android\.tools\.build:gradle:3\.3\.0/g, 'com.android.tools.build:gradle:3.3.3');
            fs.writeFile(f, result, 'utf8', cb);
        });
    }, function(err) {
        if (err) {
            deferral.reject();
        } else {
            deferral.resolve();
        }

    });
    return deferral.promise;
}

1.我还必须将async节点模块添加到cordova项目的package.jsondevDependencies部分:

"devDependencies": {
    "async": "3.2.2"
  }
wqnecbli

wqnecbli3#

AGP版本或AndroidGooglePlugin可以通过AndroidGradlePluginVersion首选项在config.xml中指定。即:

<preference name="AndroidGradlePluginVersion" value="7.2.2" />

相关问题