Cordova 3.4.0を取得する方法Build上のAndroidバージョン名/コードを設定しますか?
質問
現在Cordova 3.4.0を使用していて、コマンドを使用してAndroidをターゲットにするためのプロジェクトを構築するためのCLIを使用しています。
cordova build android
.
または
cordova build android --release
.
my config.xmlには次のものが指定されています。
<widget id="com.example.myapp"
version="0.0.3"
versionCode="2"
...
>
</widget>
.
myapp / platforms / android の結果のandroidmanifest.xmlは、config.xmlで指定されたバージョンおよびバージョンコードで更新されません。デフォルトのままです。
<manifest
android:versionCode="1"
android:versionName="1.0"
...
</manifest>
.
これはバグですか?またはconfig.xmlのAndroidのversionCodeとversionnameを指定する必要があるもう1つの方法はありますか?多分さえ、ビルド前に正しいバージョンでandroidmanifest.xmlを更新するために使用できるフックがありますか?
私はそれがそれを変えるたびにこれを手動で更新する必要はなく、
- エラーが発生し、fidsly
- なじみのない開発者のために変更するのは明らかなことではない
- ソース管理 には、プラットフォームフォルダのどれも保存されていません。
これらの理由で、config.xmlにバージョン番号を設定したいと思います。任意のアイデア?
ありがとう
解決
最後にCordova 3.5.0-0.2.4
で、この属性を<widget>
ノードconfig.xml
android-versionCode="10"
.
とAndroidManifest.xml
は
android:versionCode="10"
. 他のヒント
基本的にそれはandroidmanifest.xml
のconfig.xmlからVersionCode属性の値をコピーします。これを実行する代わりに:
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」を再利用することができます
versionNameは、Platforms / Android(少なくともCordova 3.4.0で)config.xmlからAndroidmanifest.xmlファイルにコピーされるため、ここでは問題にならないでください。その部分私は問題がありませんでした。
versionCodeをインクリメントすることは、かなりのタスクでした。実際には、GruntのGruntFile.jsに追加された一連のタスク。
これは string-replace タスクです。 。 " grunt string-置換:versioncode "はpackage.jsonに格納されているバージョンコードを増加させます。 " grunt string-replace: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'
}
}
}
.
使用する前にGruntFile.jsファイルから呼び出す必要があります。もちろん(NPM Install Grunt-String-Replace):
grunt.loadNpmTasks('grunt-string-replace');
.
あなたのpackage.jsonファイルに次のような行を追加する必要があります。これはすべて機能します。
"androidVersionCode": "13", // or whatever value is current for you
.
上記のversionCode タスクを string-置換:versionCode のタスクで増分されます。 "version"で始まる行の後にpackage.jsonに行を入れます:
重要なトリックは、「Cordova Build Android」を「Cordova Build Android」と呼ぶ代わりに「Cordova Prepare」と呼び、次に「Grunt Replacation-String:AndroidVersionCode」を呼び出すことを確認することです。それから "Cordova Compile Android"。ビルドは「準備」を呼び出して「コンパイル」を呼び出すためのショートカットであり、それらの2つのタスクの間にAndroidmanifest.xmlファイルを変更して上書きされないようにする必要があります。
私のビルドプロセスは、実際に grunt-bump for xmlpoke string-replace を使用してページについて。 grunt-shell"> grunt-shell を実際にはすべてCordovaを呼び出すにはどこにコピーされたすべての場所にコピーされて正しい順序で実行されるようにするためのステップを構築します。
これが助けるかどうか私に知らせてください。
Cordova-custom-configプラグインを使用してこの問題を修正し、次に
内のconfig.xmlで修正しました<platform name="android">
.
put
<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">
.
バージョンコードを変更してください。update undml wont update.xmlに含まれていません。
誰かがまだこれを超えている場合: 現在最新のCordovaバージョン(6.4.0)にまだ本当です。 あなたのためにこれを行うためにいくつかのジェンキンスやその他のプロセスがない場合は、バージョンコードを独自の行に入れることができます
<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">
.
を「それ」(reflease-scriptで使ってください):
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
.
yah、汚れているが作品:)
Cordova自体によって生成されるようにAndroidmanifest.xmlを変更する必要はありません。
とそのすべてがbuild.gradleにあるプラットフォームフォルダ
にある責任があります。ファイル - >プラットフォーム/ build.gradle
を検索する
if(minsdkversion>= 20){defaultConfig.VersionCode += 9}(minsdkversion= 14){defaultConfig.VersionCode += 8}
あなたのバージョンコードがここから更新されるので、それを変更するか、またはハードコードを変更することができます