有些人可能看过 Android Studio Gradle i/o,Xavier Ducrohet 在他的快速演讲中提到了如何使用 android gradle 构建系统。我的问题是,文档和演示文稿缺乏快速入门的信息。或者至少对我来说。在我的以下代码中,我试图解决 gradle android 插件系统的使用问题,我确定我的一些步骤是错误的,一些是正确的。(我没有经常使用 ant 或 maven)
也许我会按照我到目前为止所做的逐步完成它。
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
signingStoreLocation = "debug.keystore"
signingStorePassword = "***************"
signingKeyAlias = "***************"
signingKeyPassword = "**************"
}
起初我为调试构建配置默认设置(或每个使用默认设置的构建......这意味着没有构建类型或风格?)
源集:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject']
res.srcDirs = ['res', 'resfromotherprojectusingpartsofsamecode']
assets.srcDirs = ['assets']
}
}
在这一步中,我已经定义了 sourceSets。这是我第一个问题的地方。如果我有相同的代码要用于两个项目,是否有可能/或者是否应该定义更多的源集,例如 -->
sourceSets {
main {...}
srcsetforanotherproject {...}
}
...取决于底层的 src 文件夹?还是应该像在我的第一个 sourceSets 声明中那样定义 sourceSets,通过定义一组不同的,例如 res 文件夹,就像提到的 Xavier Ducrohet?(也不清楚我是否只能以这种方式对 res 文件夹执行此操作,或者也可以对 java.srcDirs = ['com.project.maingradle', 'com.otherproject.changedsourcefilesforthisproject'] 等 java src 代码文件夹执行此操作。
签名配置:
signingConfigs {
debugRelease {
storeFile file("debug.keystore")
}
release {
storeFile file("release.keystore")
}
testflight {
storeFile file("testflight.keystore")
}
}
在这一步中,我定义了用于不同版本的不同键。应该没问题...
构建类型:
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(如果可以设置更多的sourceSet),就像这样的味道?