Как заставить Cordova 3.4.0 устанавливать имя/код версии Android при сборке?

StackOverflow https://stackoverflow.com//questions/23001780

  •  20-12-2019
  •  | 
  •  

Вопрос

В настоящее время я использую Cordova 3.4.0 и CLI для создания своего проекта для Android с помощью команды:

cordova build android

ИЛИ

cordova build android --release

В моем config.xml указано следующее:

<widget id="com.example.myapp" 
        version="0.0.3" 
        versionCode="2" 
        ...
        >
</widget>

Полученный файл AndroidManifest.xml в мое приложение/платформы/Android не обновляется с использованием версии и кода версии, указанных в config.xml.Он остается по умолчанию:

<manifest 
        android:versionCode="1" 
        android:versionName="1.0"
        ...
</manifest>

Это ошибка?Или есть ли другой способ указать код версии и имя версии для Android в файле config.xml?Даже, может быть, есть ли способ, который я могу использовать для обновления AndroidManifest.xml до правильной версии перед сборкой?

Я бы предпочел не обновлять это вручную каждый раз, когда я хочу, чтобы оно изменилось:

  1. Это подвержено ошибкам и неудобно
  2. Для незнакомых разработчиков изменения не будут очевидными.
  3. Ни одна из папок платформы не хранится в системе контроля версий.

По этим причинам я хотел бы, чтобы номера версий были установлены в файле config.xml.Есть идеи?

Спасибо

Это было полезно?

Решение

Наконец с Cordova 3.5.0-0.2.4 Я добавил этот атрибут в <widget> узел config.xml

 android-versionCode="10"

и AndroidManifest.xml был правильно обновлен до

 android:versionCode="10" 

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

После ответа Michaeloryl есть что-то, что я реализовал с помощью Cordova 3.4 и используя инструмент Bash Xmlstarlet

в основном это копирует значение атрибута версийCode из config.xml в androidmanifest.xml

вместо того, чтобы запустить это:

cordova build android --release
.

Запуск [должен стать скриптом]:

cordova prepare android
# grab version code from config.xml
VERSION_CODE=$(xmlstarlet sel -t -v "//@versionCode" "config.xml")
# write correct version code in manifest
xmlstarlet ed -L -u "/manifest/@android:versionCode" -v "$VERSION_CODE" "platform/android/AndroidManifest.xml"
cordova compile android --release
.

Таким образом, когда когда я модифицирую до Cordova 3.5, я могу повторно использовать обычную «Cordova Build Android --release»

yumptionname не должно быть проблемой здесь, так как она скопирована с config.xml в файл androidmanifest.xml в платформах / Android (по крайней мере, на Cordova 3.4.0). Эта часть у меня не было никакой проблемы.

Получение версийкодов увеличивается, хотя была довольно задача. Собственно серию задач, которые я добавил в GruntFile.js.

Это string-reflex task Отказ « Grunt String - заменить: версиюCode » будет увеличиваться версийный код, сохраненный в Package.json. « Grunt String - заменить: androidversionCode » примет это значение и поместите его в платформы / файл Android / AndroidManifest.xml:

    // STRING-REPLACE
    'string-replace': {
        versionCode: { // update the version code stored in package.json
            options: {
                replacements: [
                    {
                        pattern: /['"]androidVersionCode['"]:.*?['"](\d*)['"]/ig,
                        replacement: function (match, p1, offset, string) {
                            return '"androidVersionCode": "' + (parseInt(p1) + 1) + '"';
                        }
                    }
                ]
            },
            files: {
                'package.json': 'package.json'
            }
        },

        androidVersionCode: { // update the version code stored in AndroidManifest.xml
            options: {
                replacements: [
                    {
                        pattern: /android:versionCode=['"](\d*)['"]/ig,
                        replacement: function (match, p1, offset, string) {
                            var pkg = grunt.file.readJSON('package.json');
                            grunt.log.writeln("pkg.androidVersionCode: " + pkg.androidVersionCode);
                            grunt.log.writeln('Returning: ' + 'android:versionCode="' + pkg.androidVersionCode + '"');
                            return 'android:versionCode="' + pkg.androidVersionCode + '"';
                        }
                    }
                ]
            },
            files: {
                'platforms/android/AndroidManifest.xml': 'platforms/android/AndroidManifest.xml'
            }
        }
    }
.

Это требует этого , который нужно вызывать из файла gruntfile.js перед использованием, конечно (а также npm установить grunt-string-strance):

grunt.loadNpmTasks('grunt-string-replace');
.

Вам нужно добавить строку , например, следующее в файл Package.json для этого все для работы:

"androidVersionCode": "13", // or whatever value is current for you
.

Это будет увеличиваться на string-string string: версийCode выше. Я положил линию в Package.json после линии, которая начинается с «версии»:

Важный трюк чтобы получить это на работу - это убедиться, что вместо того, чтобы звонить "Cordova build android", вы называете «Cordova Pree Android», затем «Grunt Breake-String: AndroidVersionCode», а также Затем «Кордова компилирует Android». Build - это просто ярлык для вызова «подготовить», а затем «компилировать», а между этими двумя задачами, когда вы должны изменить файл AndroidManifest.xml, чтобы предотвратить его перезаписи, похоже.

Мой процесс сборки гораздо сложнее, потому что я на самом деле увеличиваю значение версии в Package.json с Grunt-Bump для Grunt, а затем впрыскивая это в Config.xml с помощью XMLPOOKE для Grunt и My of the Page, используя string-stream rings . Я использую grunt-shell , чтобы на самом деле позвонить всем Cordova Создайте шаги, чтобы все скопировало, где он идет и работает в правильном порядке.

Дайте мне знать, если это поможет.

Я исправил эту проблему с помощью плагина Cordova-Custom-Confign, затем в config.xml внутри

<platform name="android">
.

Поместите

<preference name="android-manifest/@android:versionCode" value="108" />
.

Измените значение для нужной код версии ...

Это сработало идеально для меня.

Редактировать код версии в androidmanifest.xml (/platforms/android/androidmanifest.xml)

<manifest android:hardwareAccelerated="true" android:versionCode="2"android:versionName="0.0.2" package="com.ionicframework.zinescreen841178"   xmlns:android="http://schemas.android.com/apk/res/android">
.

Измените код версии здесь, не в конфигурации .xml, он не будет обновлять. Затем, когда вы получите сборку, он будет генерировать новый код версии для вас.

В случае, если кто-то все еще спотыкается над этим: Это все еще верно на в настоящее время Новейшая версия Cordova (6.4.0) . Если у вас нет некоторых Jenkins или другого процесса для этого для вас, вы можете поставить код версии в свою строку

<widget id="com.example.yourapp" 
    android-versionCode="1112" 
    version="1.1.3" 
    xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
.

, а затем запустите это, чтобы наверх (например, используйте в своем выпуске):

VersionCode=`cat config.xml | grep android-versionCode | sed -e 's/.*android-versionCode=\"\(.*\)\"/\1/'`
VersionCode=$((VersionCode+1))
sed -i "s/.*android-versionCode=\"\(.*\)\"/    android-versionCode=\"$VersionCode\"/" config.xml
.

Я, грязный, но работает :)

Вам не нужно менять androidmanifest.xml, так как он генерируется Сами Кордовой, поэтому все ваши изменения в манифесте возвращаются Cordova

и все это несет ответственность, это build.gradle, расположенный в папке платформы

Файл -> Платформа / build.gradle

Поиск

Если (minsdkversion>= 20) {defaultconfig.versioncode += 9} else, если (minsdkversion= 14) {defaultconfig.versioncode += 8}

Как ваш код версии обновляется отсюда, вы можете изменить его или жесткий код это

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top