Как заставить Cordova 3.4.0 устанавливать имя/код версии Android при сборке?
Вопрос
В настоящее время я использую 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 до правильной версии перед сборкой?
Я бы предпочел не обновлять это вручную каждый раз, когда я хочу, чтобы оно изменилось:
- Это подвержено ошибкам и неудобно
- Для незнакомых разработчиков изменения не будут очевидными.
- Ни одна из папок платформы не хранится в системе контроля версий.
По этим причинам я хотел бы, чтобы номера версий были установлены в файле config.xml.Есть идеи?
Спасибо
Решение
Наконец с Cordova 3.5.0-0.2.4
Я добавил этот атрибут в <widget>
узел config.xml
android-versionCode="10"
и AndroidManifest.xml
был правильно обновлен до
android:versionCode="10"
Другие советы
После ответа
в основном это копирует значение атрибута версий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'
}
}
}
.
grunt.loadNpmTasks('grunt-string-replace');
.
"androidVersionCode": "13", // or whatever value is current for you
.
Это будет увеличиваться на string-string string: версийCode выше. Я положил линию в Package.json после линии, которая начинается с «версии»:
Мой процесс сборки гораздо сложнее, потому что я на самом деле увеличиваю значение версии в 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, он не будет обновлять. Затем, когда вы получите сборку, он будет генерировать новый код версии для вас.
В случае, если кто-то все еще спотыкается над этим:
Это все еще верно на в настоящее время
<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}
Как ваш код версии обновляется отсюда, вы можете изменить его или жесткий код это