Определите версию плагина Android Gradle при сборке с помощью Cordova

При создании моего проекта Android с помощью Cordova при открытии в Android Studio я получаю следующее сообщение:

Определите версию плагина Android Gradle при сборке с помощью Cordova

Мой файл build.gradle отражает несоответствие плагина (хотя определенная версия Gradle верна):

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

Я хотел бы знать, есть ли способ настроить Cordova для явного определения версии подключаемого модуля Android Gradle.

Я не могу понять, что именно вы спрашиваете, но это означает, что ваша версия класса com.android.tools.build:gradle:3.0.0. В диалоговом окне предлагается обновить его только в том случае, если вы хотите, но если вы этого не сделаете, просто нажмите «Игнорировать» или закрыть его.

Joey Dalu 18.12.2018 20:53

@JoeyDalu Меня спрашивают, потому что кордова указала версию 3.0.0 при создании платформы Android. Я хочу указать 3.2.1, чтобы не получать это предупреждение.

jwBurnside 18.12.2018 20:55

Хорошо, нажмите кнопку обновления, и он должен обновить его за вас. Если это не сработает, вы всегда можете обновить его в файле settings.gradle в корне вашего проекта.

Joey Dalu 18.12.2018 20:56

@JoeyDalu Я хочу настроить Cordova для явного определения версии плагина Android Gradle, как указано в исходном сообщении.

jwBurnside 18.12.2018 21:12
3
4
1 622
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Версия плагина Android Gradle - жестко закодированы в шаблоне build.gradle в Кордова-андроид.

Если вы установите платформу из основной ветки, вы увидите, что она использует более высокую версию (3.2.0), чем самая последняя версия npm [email protected], которая является настроен для 3.0.1.

Чтобы установить прямо из основной ветки:

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

Если вы хотите использовать самую последнюю версию, вы можете разветвить репозиторий cordova-android, закрепить нужную версию в шаблоне build.gradle, а затем установить плагин прямо из разветвленного репо:

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

Спасибо. Я попробую и отдаю вам должное, когда у меня будет возможность попробовать.

jwBurnside 19.12.2018 22:10

Работает, но просто примечание, хотя я проверил с помощью структуры проекта, что мой Gradl и версия плагина верны, он все равно будет мигать это сообщение об обновлении, когда я в первый раз открою недавно созданный проект платформы.

jwBurnside 20.12.2018 19:14

У меня возникла проблема, которая требовала, чтобы в файле platforms/android/build.gradle была указана альтернативная версия плагина gradle, а не та, что была сгенерирована сборкой Android Cordova по умолчанию. Итак, чтобы исправить это, я использовал созданный сценарий ловушки 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, я не эксперт по js.)
const fs = require('fs');
const path = require('path');
const deferral = require('q').defer();
const async = require('async');

module.exports = function(ctx) {
    console.info('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 в раздел devDependencies моего проекта Cordova package.json:
  "devDependencies": {
    "async": "3.2.2"
  }

Другие вопросы по теме