[解決済み] gradleの追加プロパティでVersionCodeを自動インクリメントする
2022-05-09 18:27:48
質問
gradleでAndroidアプリを構築しています。今まではマニフェストファイルを使ってversionCodeを増やしていましたが、外部ファイルからversionCodeを読み込んで、それがrelease flavorかdebug flavorかによってversionCodeを増やしたいと思っています。追加プロパティを試してみましたが、保存ができないので、次回ビルドしても同じversionCodeになってしまいます。 何か手助けがあれば、とてもありがたいです
project.ext{
devVersionCode = 13
releaseVersionCode = 1
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile project(':Cropper')
compile "com.android.support:appcompat-v7:18.0.+"
compile "com.android.support:support-v4:18.0.+"
compile fileTree(dir: 'libs', include: '*.jar')
}
def getReleaseVersionCode() {
def version = project.releaseVersionCode + 1
project.releaseVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getDevVersionCode() {
def version = project.devVersionCode + 1
project.devVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getLastVersioName(versionCode) {
return "0.0." + versionCode
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
proguardFile 'proguard.cfg'
debuggable false
signingConfig null
zipAlign false
}
debug {
versionNameSuffix "-DEBUG"
}
}
productFlavors {
dev {
packageName = 'com.swisscom.docsafe.debug'
versionCode getDevVersionCode()
versionName getLastVersioName(project.devVersionCode)
}
prod {
packageName = 'com.swisscom.docsafe'
versionCode getReleaseVersionCode()
versionName getLastVersioName(project.releaseVersionCode)
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '1.8'
}
解決方法は?
<ブロッククオート外部ファイルからversionCodeを読み込みたいのですが。
解決策はいくつもあると思いますが、ここではその1つを紹介します。
android {
compileSdkVersion 18
buildToolsVersion "18.1.0"
def versionPropsFile = file('version.properties')
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def code = versionProps['VERSION_CODE'].toInteger() + 1
versionProps['VERSION_CODE']=code.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
versionCode code
versionName "1.1"
minSdkVersion 14
targetSdkVersion 18
}
}
else {
throw new GradleException("Could not read version.properties!")
}
// rest of android block goes here
}
このコードでは、既存の
version.properties
ファイルは、最初のビルドの前に手作業で作成し、そのファイルに
VERSION_CODE=8
.
このコードは、各ビルドのバージョンコードを単純にバンプしています。
を見ることができます。 バージョン管理サンプルプロジェクト で、このコードのデモを行います。
関連
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
Android.support.v7.widget.Toolbar が見つかりませんでした。
-
Android TextViewは、テキスト内容が表示省略記号を超えているかどうかを判断する
-
[解決済み] Android StudioのGradleとは?
-
[解決済み] Gradleのimplementation, api, compileの違いは何ですか?
-
[解決済み] gradleに依存関係を強制的に再ダウンロードさせるには?
-
[解決済み] テストなしでGradleビルド
-
[解決済み] Gradle for Androidを使用して、外部のaarパッケージを手動でインクルードする方法
-
[解決済み] GradleとAndroid Studioを使ったアプリのビルドと実行は、Eclipseを使った場合よりも遅い
-
[解決済み】Gradleを使用してリリース署名付きapkファイルを作成する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド......を呼び出そうとしました。
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
を作ってください。*** makeするルールがない エラーの原因、分析、解決策
-
android block certificate validation CertPathValidatorException: 認証パスのトラストアンカーが見つかりません
-
view.getRootView()の本当の意味とテストについて
-
Androidカスタムドロップダウンリストボックスコントロール
-
超シンプルなアンドロイドのタイムディレイ機能
-
アンドロイドスタジオ学習入門