35

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

4

4 に答える 4

22

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

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

于 2015-10-05T14:52:18.950 に答える
6

最後を「8」のままにしたい人のために、簡単にするために after_prepare フックを作成しました。@ChilledFlame が手動で言及した config.xml で android-versionCode を維持する必要はありません。

注: 末尾の '8' を保持しないと、アプリをアプリストアに送信するときに、Android のバージョン コードが、Cordova 5 でビルドされた以前のものよりも小さくなり、「バージョン コードのダウングレードの問題」が発生する可能性があります。

folder の下にファイルを作成し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

于 2016-09-07T05:44:16.453 に答える
0

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

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

于 2016-09-30T14:56:47.290 に答える