Android Studio Gradle第一步
有些人可能已经看过Android Studio Gradle i/o,Xavier Ducrohet在他的快速演讲中提到了如何使用Android Gradle构建系统。我的问题是,文档和演示缺乏快速启动的信息。至少对我来说是这样。在我下面的代码中,我试图解决gradle android插件系统的使用问题,我确信我有一些步骤是错误的,也有一些是正确的。(我很少使用ant或maven) 也许我会用我到目前为止所做的一步一步地经历它Android Studio Gradle第一步,android,gradle,android-studio,Android,Gradle,Android Studio,有些人可能已经看过Android Studio Gradle i/o,Xavier Ducrohet在他的快速演讲中提到了如何使用Android Gradle构建系统。我的问题是,文档和演示缺乏快速启动的信息。至少对我来说是这样。在我下面的代码中,我试图解决gradle android插件系统的使用问题,我确信我有一些步骤是错误的,也有一些是正确的。(我很少使用ant或maven) 也许我会用我到目前为止所做的一步一步地经历它 android { compileSdkVersion 17
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']
}
}
在这一步中,我定义了sourceset。这是我的第一个问题。如果我有相同的代码要用于两个项目,是否可以/或者应该定义更多的源集,比如-->
…取决于基础src文件夹?还是应该像我的第一个sourceSets声明中那样,通过定义一组不同的文件夹来定义sourceSets,如Xavier Ducrohet提到的res文件夹?(也不清楚我是否只能以这种方式对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插件的任何其他步骤都解释得更清楚。除了我不知道是否有一个预定义的版本或调试设置在后台工作…我是否需要澄清它…至少我认为是这样,因为使用了NameSuffix、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版本控制,一个专用的packagename和设置一个依赖的sourceset,就像你在示例中看到的那样。我不确定的是,构建类型如何依赖于风格……它们只是将每个风格相乘吗对于每种构建类型?以及…设置一个源集(如果可以设置更多的源集)可以吗,就像这样
构建类型是如何依赖于风格的……它们只是将每种风格与每种构建类型相乘吗
是的,Gradle将生成构建类型和产品风格的每个组合。根据,每个构建类型和产品风格组合称为构建变体
设置一个源集(如果可以设置更多的源集)可以吗
当然!产品风格(和构建变体)也会自动从
src/myFlavorName
中包含他们自己的源代码集,根据。我已经尝试过类似的方法。你运行哪个命令来签署你的发布apk,gradle build
?我在我的build/apk
文件夹中只看到一个未签名的apk文件。很好的问题,gradle文档只是在重复源代码集.debugRelease.setRoot(“src/release”)三次?
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
}
}
}