web-dev-qa-db-ja.com

Cordova / Phonegapが私のAndroidバージョンコードに8を追加するのはなぜですか?

私は現在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の対応するセクションを削除することはできますか、それともこの動作の背後に隠された意味がありますか?

35
Paul Weber

OK。これは、Cordovaバージョン5以降の主要な未解決のバグのようです。 チケットへのリンクはこちらです。

Build.gradleから問題のあるコードを削除しても問題はありませんでした

22
Paul Weber

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をアップロードできることです。

7
ChilledFlame

末尾の「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

6
Leon

./platforms/Android/build.gradleからversionCodeの変更を削除した後も、APKのversionCodeに「8」が追加されていました。

新しく生成されたAPKに正しいversionCodeが含まれる前に、「cordovaclean」が必要でした。

0
J. McNerney