OK, tôi đã xem video trên YouTube bằng Xavier Ducrohet trên Android build system mới. Tôi thậm chí đã chuyển sang sử dụng Android Studio và hài lòng với nó. Bây giờ tôi cần phải tùy chỉnh các quy tắc xây dựng để làm những việc theo cách tôi muốn và một trong số đó tự động đặt codeVersion
và codeName
trong tệp kê khai.Android Studio Lập trình Gradle
Xavier hiển thị khi bắt đầu làm thế nào để làm điều này trong một trong slide của mình:
def getVersionCode() {
def code = ...
return code
}
android {
defaultConfig {
versionCode getVersionCode()
}
}
Vì vậy, có thể có một ai đó loại như vậy để chỉ cho tôi nguồn lực tốt cho điền vào các dấu chấm?
Để cụ thể hơn, tôi muốn chạy tập lệnh như git describe --dirty | sed -e 's/^v//'
để xác định versionName
và git tag | grep -c ^v
để nhận được versionCode
.
Cảm ơn
Cập nhật
Tôi đã thử những điều sau gradle.build
kịch bản nhưng không thành công. Nó xây dựng tốt nhưng tên phiên bản trong trang Thông tin ứng dụng của các ứng dụng đã cài đặt của tôi không thay đổi.
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()
}
}
Nếu tôi thay thế các cấu hình versionName getVersionName()
với versionName 'Some Text'
sau đó nó hoạt động và tên xây dựng trở thành Some Text
trong Thông tin App. Vậy tại sao hàm getVersionName của tôi không hoạt động?
Cập nhật 2
Vẫn không làm việc - nhưng hầu như!
Shell script:
#/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}
này hoạt động, và dòng nhật ký khẳng định rằng kịch bản được gọi là nhiều lần khi thực hiện dự án. Nhưng tên phiên bản vẫn đang trống. Tôi nghi ngờ rằng đó là bên Gradle của những thứ mà vẫn không nhận được 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()
}
}
Có thể bạn sẽ phải bao bọc nó trong một kịch bản trình bao và sau đó bắt đầu ra. Tham khảo tại đây: http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.Exec.html –
@Dhrubajyoti Rất cám ơn vì đề xuất này. Tôi đã thử nó, xem ở trên nhưng vẫn còn một cái gì đó về Gradle kịch bản mà tôi không nhận được. – Dobbo