Android Studio Gradle 第一步
Posted
技术标签:
【中文标题】Android Studio Gradle 第一步【英文标题】:Android Studio Gradle First Steps 【发布时间】:2013-06-14 19:56:07 【问题描述】:有些人可能已经看过 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),就像这样的味道?
【问题讨论】:
我尝试过类似的方法。您运行哪个命令来签署您的发布 apk,gradle build
?我在build/apk
文件夹中只看到一个未签名的 apk 文件。
好问题,gradle 文档太糟糕了
是故意重复 sourceSets.debugRelease.setRoot("src/release") 三次吗?
【参考方案1】:
构建类型如何依赖于风味...他们只是将每种风味与每种构建类型相乘吗?
是的,Gradle 将生成构建类型和产品风格的每种组合。根据Gradle Plugin User Guide,每个构建类型和产品风味组合称为构建变体。
可以设置一个sourceSet(如果可以设置更多的sourceSet),像这样的味道吗?
当然!根据Sourcesets and Dependencies documentation,产品风味(和构建变体)还自动包含来自src/myFlavorName
的自己的源集。
【讨论】:
以上是关于Android Studio Gradle 第一步的主要内容,如果未能解决你的问题,请参考以下文章
android studio gradle 两种更新方法更新
Android studio启动后卡在refreshing gradle project(包解决)
Android studio启动后卡在refreshing gradle project