由於有些人可能已經觀看了Android Studio Gradle I/O,Xavier Ducrohet在其快速演講中提到了如何使用Android gradle build system。我的問題是,文檔和演示文稿缺乏快速入門的信息。或者至少對我來說。在我下面的代碼中,我試圖解決gradle android插件系統的用法,並且我確定我有一些錯誤的步驟和一些權利。 (我還沒有使用螞蟻或maven很多)Android Studio Gradle First Steps
也許我會通過它一步一步與我到目前爲止所做的一切。
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
signingStoreLocation = "debug.keystore"
signingStorePassword = "***************"
signingKeyAlias = "***************"
signingKeyPassword = "**************"
}
起初IM配置調試版本的默認設置(或使用默認settings..that每次構建意味着沒有buildtypes或香料?)
sourceSets:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject']
res.srcDirs = ['res', 'resfromotherprojectusingpartsofsamecode']
assets.srcDirs = ['assets']
}
}
在這一步我定義了sourceSets。這是我得到第一個問題的地方。如果我有我要使用兩個項目相同的代碼,是有可能/或要那樣定義諸如更sourcesets - >
sourceSets {
main {...}
srcsetforanotherproject {...}
}
...取決於基本的src文件夾?還是應該像在我的第一個sourceSets聲明中那樣定義sourceSets的定義,通過定義一組不同的文件夾,比如Xavier Ducrohet提到的? (它也不清楚我是否只能以這種方式對res文件夾執行此操作,或者對於java.srcDirs = ['com.project.maingradle','com.otherproject.changedsourcefilesforthisproject']這樣的java src代碼文件夾也可以。「
signingConfigs:
signingConfigs {
debugRelease {
storeFile file("debug.keystore")
}
release {
storeFile file("release.keystore")
}
testflight {
storeFile file("testflight.keystore")
}
}
在這一步我已經定義使用不同版本不同的鍵應該是好的...
buildTypes:
buildTypes {
debugRelease.initWith(buildTypes.release)
testflight.initWith(buildTypes.release)
sourceSets.debugRelease.setRoot("src/release")
sourceSets.debugRelease.setRoot("src/release")
sourceSets.debugRelease.setRoot("src/release")
debugRelease {
packageNameSuffix ".debugRelease"
versionNameSuffix "-DEBUG"
debuggable true
signingConfig signingConfigs.debug
}
testflight {
packageNameSuffix ".testflight"
versionNameSuffix "-TESTFLIGHT"
signingConfig signingConfigs.testflight
}
release {
packageNameSuffix ".release"
versionNameSuffix "-RELEASE"
runProguard true
proguardFile getDefaultProguardFile('proguard-android.txt')
signingConfig signingConfigs.release
}
}
此步驟比gradle android插件的任何其他步驟都更清楚地解釋。除了我不知道是否有預定義的版本或調試設置在後臺工作...我是否需要澄清它...至少我認爲是這樣,因爲使用名稱後綴,proguard或聲明這個版本的關鍵(signingConfig)。
口味:
flavorGroups "abi", "version"
productFlavors {
arm {
flavorGroup "abi"
}
standardproject1 {
flavorGroup "version"
minSdkVersion 7
targetSdkVersion 14
packageName "com.project.maingradle.normal"
sourceSet sourceSets.main
}
standardproject2 {
flavorGroup "version"
minSdkVersion 6
targetSdkVersion 14
packageName "com.otherproject.normal"
sourceSet sourceSets.main
}
testflightproject1 {
flavorGroup "version"
minSdkVersion 7
targetSdkVersion 14
packageName "com.project.maingradle.testflight"
sourceSet sourceSets.main
}
testflightproject2 {
flavorGroup "version"
minSdkVersion 6
targetSdkVersion 14
packageName "com.otherproject.testflight"
sourceSet sourceSets.main
}
}
}
我個人認爲口味的最有趣的部分。 Xavier Ducrohet表示,如果你想爲不同的風格構建使用不同的鍵,你不應該在構建類型中定義一個鍵(而應該在風格中聲明)?我不知道我是否理解正確。
無論如何......我在這裏試圖做的是定義不同的風格,應該使用不同的設置來構建,如不同系統的sdk版本控制,獨佔程序包名稱和設置依賴源代碼集,就像您在示例中看到的那樣。我不確定的是,這些構建類型如何依賴於口味......它們是否只是將每種類型的每種口味都增加到每種構建類型?並且...可以設置一個sourceSet(如果可以設置更多的sourceSets),像這樣的味道?
我試過類似的東西。你命令是否運行簽名你的發佈apk,'gradle build'?我只在我的'build/apk'文件夾中看到未簽名的apk文件。 –
優秀的問題,gradle文檔只是很糟糕 – Piotr
重複sourceSets.debugRelease.setRoot(「src/release」)三次故意? –