さて、私はXavier Ducrohetの新しいビデオであるAndroid build systemを見ました。私はAndroid Studioを使用することに切り替えましたし、それに満足しています。ビルドルールをカスタマイズして、私が望むようにする必要があります。その1つは、マニフェストファイルにcodeVersion
とcodeName
を自動的に設定しています。Androidスタジオのグラデルプログラミング
ザビエルは、彼のスライドの一つにこれを行う方法の開始を示しています。
def getVersionCode() {
def code = ...
return code
}
android {
defaultConfig {
versionCode getVersionCode()
}
}
だから、いくつかの1ドットを埋めるための優れたリソースに私を指すほど親切だろうか?
私はversionCode
を得るためにversionName
とgit tag | grep -c ^v
を決定するためにgit describe --dirty | sed -e 's/^v//'
ようなスクリプトを実行したい。具体的に。
おかげで、私は成功せず、次のgradle.build
のスクリプトを試してみた
を更新。それはうまく構築されますが、私のインストールされたアプリのApp Infoページのバージョン名は変わりません。
task getVersionName(type:Exec) {
commandLine '../scripts/version-name.sh'
//store the output instead of printing to the console:
standardOutput = new ByteArrayOutputStream()
//extension method stopTomcat.output() can be used to obtain the output:
ext.output = {
return standardOutput.toString()
}
}
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile project(':Common')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
versionName getVersionName()
}
}
私はversionName 'Some Text'
で設定versionName getVersionName()
を交換する場合、それが動作し、ビルド名はアプリの情報でSome Text
となります。では、なぜ私のgetVersionName関数は動作しないのですか?
アップデート2
はまだ働いていない - しかし、ほとんど!
シェルスクリプトは:
#/bin/bash
NAME=`git describe --dirty | sed -e 's/^v//'`
COMMITS=`echo ${NAME} | sed -e 's/[0-9\.]*//'`
if [ "x${COMMITS}x" = "xx" ] ; then
VERSION="${NAME}"
else
BRANCH=" (`git branch | grep "^\*" | sed -e 's/^..//'`)"
VERSION="${NAME}${BRANCH}"
fi
logger "Build version: ${VERSION}"
echo ${VERSION}
これは動作し、ログ行は、プロジェクトを作成するときにスクリプトが複数回呼び出されたことを確認します。しかし、versionNameはまだ空白です。私はまだそれがstdoutを得ていない事のGradleの側面だと思う。
task getVersionCode(type: Exec) {
exec { commandLine '../scripts/version-code.sh' }
//store the output instead of printing to the console:
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString()
}
}
task getVersionName(type: Exec) {
exec { commandLine '../scripts/grMobile/scripts/version-name.sh' }
//store the output instead of printing to the console:
standardOutput = new ByteArrayOutputStream()
ext.output = {
return standardOutput.toString()
}
}
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile project(':Common')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
versionCode getVersionCode()
versionName getVersionName.output()
}
}
おそらく、あなたはシェルスクリプトでそれをまとめて出力をキャプチャする必要があります。ここを参照してください:http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html –
@Dhrubajyoti提案に感謝します。私はそれを試してみました、上記を参照してくださいしかし、まだ私が得ていないGradleのスクリプトについては何か。 – Dobbo