2015-10-05 8 views
35

私は現在Cordovaプロジェクトに取り組んでおり、私のプロジェクトのversionCodeに8が不思議に追加されてしまうという問題がありました。例えば:私のオリジナルバージョンのコードは100だった、新しいバージョンのコードは1008なぜCordova/PhonegapはAndroidバージョンコードに8を追加しますか?

である私は私の全体のビルドパイプラインを通じて問題を追跡して、スクリプトを作成し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の対応するセクションを削除するか、この行動の背後にあるいくつかの隠された感がありますができますか?

答えて

21

O.K.これはCordova Version 5以降の未解決なバグです。私のbuild.gradle

+0

これはいいですね。私は間違いをしたと思っていますが、それはまだ6.0.0です。 –

+0

最近、コードバ - アンドロイドへの修正が最近になったようですが(まだhttps://github.com/apache/cordova-android/pull/270)リリースされました(cordova-android 5.1.1には修正がありません) –

+6

これはCordova 6.2.0で修正されているようです。しかし、これ以上の数字がバージョンコードに追加されなくなったので、このバージョンのCordovaを使用して作成したAPKは、以前のバージョンよりもバージョンコードが小さいため、Google PlayはこれらのAPKを受け入れません。 – Ehsan

7

から問題のあるコードを取り外すときHere is the link to the ticket.

は、私は全く問題がなかったのプラットフォーム\ androidの\のbuild.gradleスクリプトが4、2、8または9対象architecureに依存バージョンファイルに追加されます - arm/x86またはAndroidのターゲットapiバージョン。

私は私のプロジェクトは、バージョン番号に追加「8」があったが、これはPlayストアにアップロードされた状況がありました。さらにビルドすると8が落ちてしまったように見えました。これは、それ以上のアップデートをアップロードできなかったことを意味します。cordova prepareコマンドはAndroidManifest.xmlファイルを再作成し、これに手動による変更を無効にします。

バージョンの問題は、私の場合には、cdvVersionCode=13008

また内容のファイルのandroid \ gradle.properties \プラットフォームを作成することで対処することができ、私はアンドロイド-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"> 

私のケースでは、私のケースでは103008が正しくビルドに使用されるAndroidManifest.xmlファイルに書き込まれます。

欠点は、手動でのAndroidバージョンを更新する必要がされ、逆さま、APKをアップロードすることができます!

+0

私はgradle.propertiesにcdvVersionCodeを設定することをお勧めします。 –

5

最後に8を残したい人には、@ChilledFlameによって手動で記述されたconfig.xmlにandroid-versionCodeを維持する必要はありません。

注:あなたがアプリストアにアプリを提出するときに、あなたがアンドロイドのバージョンコードが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

+0

フックのおかげで。どうすればビルドに追加することができますか?私はまだ同じ問題に直面しています。あなたは他の解決策を見つけましたか? – krv

+0

あなたのプロジェクトにこのファイルを作成します:hooks/after_prepare/append_8_to_version_code.js。 @krv – Leon

+0

私は8を削除したかったことが分かりません。なぜ8が追加されていますか、誰があなたがこの投稿を書いた誰のためにそれを保持したいのですか? – krv

0

./platforms/android/build.gradleからversionCode修正を除去した後、 "8" はまだ私のAPKでversionCodeに追加されていました。

新しく生成されたAPKが正しいversionCodeを持つには、「cordova clean」が必要でした。

関連する問題