私は現在Cordovaプロジェクトに取り組んでおり、プロジェクトのversionCodeに8が不思議に追加されるという問題がありました。例:私の元のバージョンコードは100でしたが、新しいバージョンコードは1008です。
ビルドパイプライン全体で問題を追跡し、Gradleビルドスクリプトで責任のあるコードを見つけました。
if (Boolean.valueOf(cdvBuildMultipleApks)) {
productFlavors {
armv7 {
versionCode cdvVersionCode ?: defaultConfig.versionCode + 2
ndk {
abiFilters "armeabi-v7a", ""
}
}
x86 {
versionCode cdvVersionCode ?: defaultConfig.versionCode + 4
ndk {
abiFilters "x86", ""
}
}
all {
ndk {
abiFilters "all", ""
}
}
}
} else if (!cdvVersionCode) {
def minSdkVersion = cdvMinSdkVersion ?: privateHelpers.extractIntFromManifest("minSdkVersion")
// Vary versionCode by the two most common API levels:
// 14 is ICS, which is the lowest API level for many apps.
// 20 is Lollipop, which is the lowest API level for the updatable system webview.
if (minSdkVersion >= 20) {
defaultConfig.versionCode += 9
} else if (minSdkVersion >= 14) {
defaultConfig.versionCode += 8
}
}
コードバがバージョンコードを変更することが正しいと考える理由がわかりません。さらに、この動作が正しいかどうかもわかりません...番号を追加して追加しないでください。
Build.gradleの対応するセクションを削除することはできますか、それともこの動作の背後に隠された意味がありますか?
OK。これは、Cordovaバージョン5以降の主要な未解決のバグのようです。 チケットへのリンクはこちらです。
Build.gradleから問題のあるコードを削除しても問題はありませんでした
Platform\Android\build.gradleスクリプトは、ターゲットアーキテクチャ(arm/x86)またはターゲットAPIバージョンのAndroid)に応じて、バージョンファイルに4、2、8、または9を追加します。
プロジェクトのバージョン番号に「8」が追加されている状況があり、これがPlayストアにアップロードされました。それ以上のビルドでは8が削除されたようです。つまり、それ以上の更新をアップロードできませんでした-cordova prepare
コマンドは、AndroidManifest.xmlファイルを再作成し、これに対する手動の変更をオーバーライドします。
バージョンの問題は、次の内容でplatforms\Android\gradle.propertiesファイルを作成することで解決できますcdvVersionCode=13008
または、私の場合、Android-versionCode属性をconfig.xmlに挿入しました。
<widget xmlns:cdv="http://cordova.Apache.org/ns/1.0" xmlns:vs="http://schemas.Microsoft.com/appx/2014/htmlapps" id="uk.co.my.app" Android-versionCode="103008" version="1.3.0" xmlns="http://www.w3.org/ns/widgets" defaultlocale="en-GB">
目的のAndroidバージョン、私の場合は103008が、ビルドに使用されるAndroidManifest.xmlファイルに正しく書き込まれます。
欠点は、Androidバージョンを手動で更新する必要があることです。利点は、apkをアップロードできることです。
末尾の「8」を維持したい場合は、簡単にするためにafter_prepareフックを作成しました。これは、@ ChilledFlameによって手動で言及されたconfig.xmlのAndroid-versionCodeを維持する必要がありません。
注:末尾の「8」を保持しない場合、アプリをアプリストアに送信すると、Androidバージョンコードは、Cordova 5によってビルドされた以前のコードよりも小さくなり、「バージョン」が発生する可能性があります。コードダウングレードの問題」。
フォルダhooks/after_prepare/
の下にファイルを作成し、次のコードを追加します。
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var xml2js = require('xml2js');
function xmlFileToJs(filename, cb) {
var filepath = path.normalize(path.join(__dirname, filename));
fs.readFile(filepath, 'utf8', function (err, xmlStr) {
if (err) throw (err);
xml2js.parseString(xmlStr, {}, cb);
});
}
function jsToXmlFile(filename, obj, cb) {
var filepath = path.normalize(path.join(__dirname, filename));
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
fs.writeFile(filepath, xml, cb);
}
var androidManifestRPath = '../../platforms/Android/AndroidManifest.xml';
xmlFileToJs(androidManifestRPath, function(error, data) {
var config = data;
config.manifest.$['Android:versionCode'] += '8';
jsToXmlFile(androidManifestRPath, config)
});
またはこのリンクからダウンロードしてください: append_8_to_version_code.js
./platforms/Android/build.gradleからversionCodeの変更を削除した後も、APKのversionCodeに「8」が追加されていました。
新しく生成されたAPKに正しいversionCodeが含まれる前に、「cordovaclean」が必要でした。