Хорошо, я смотрел видео на YouTube с Ксавье Дюкрошем на новом Android build system. Я даже переключился на использование Android Studio и доволен этим. Теперь мне нужно настроить правила сборки, чтобы делать то, что я хочу, и один из них автоматически устанавливает codeVersion
и codeName
в файле манифеста.Программирование на Android Studio Gradle
Xavier показать начало, как сделать это в одном из своих слайдов:
def getVersionCode() {
def code = ...
return code
}
android {
defaultConfig {
versionCode getVersionCode()
}
}
Так может кто-то быть так любезны указать мне хороший ресурс для заполнения точек?
Чтобы быть более конкретным, я хочу, чтобы запустить сценарий как git describe --dirty | sed -e 's/^v//'
для определения versionName
и git tag | grep -c ^v
получить versionCode
.
Благодаря
Update
Я пробовал следующий сценарий gradle.build
без успеха. Он строит отлично, но имя версии на странице сведений о приложении моих установленных приложений не изменяется.
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 getVersionName()
с versionName 'Some Text'
затем он работает и имя сборки становится Some Text
в App Info. Так почему же моя функция getVersionName не работает?
Update 2
До сих пор не работает - но почти!
Shell скрипт:
#/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 все еще пуст. Я подозреваю, что это сторона Gradle, которая все еще не получает stdout.
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