Tac*_*0sS 61 android multi-project gradle android-studio build.gradle
我试图了解如何处理以下项目设置:
?Top Android Project
?
??? Project 1 - (Pure Java Modules)
? ?
? ??? Module A1
? ??? Module B1
? :
? ??? Module Z1
?
??? Project 2 - (Android Libraries Modules)
? ?
? ??? Module A2
? ??? Module B2
? :
? ??? Module Z2
?
??? Module - Actual Android Project
Run Code Online (Sandbox Code Playgroud)
在当前的设置中,我在每个模块中都有一个build.gradle,我真正讨厌这个设置的是build.gradle的所有内容在模块之间重复.
事实上,我想在大多数情况下都使用相同的逻辑," 纯Java模块 "都是基础模块,我想将输出,JavaDoc和源,以及部署到某个远程存储库(*默认).
另一方面,' 纯Java模块 '的一些模块我想有第二个议程,例如,除了默认*构建之外,我想部署一个具有特定项目的依赖项的jar,或类似的东西.
在构建Actual Android Project时,我希望模块能够在默认的*build中编译,最后为我的所有Android项目配置一个默认的build.gradle,这些项目很多,我不想复制它文件.
================================================== =============
我想我正在寻找的东西就像Maven父母pom,但由于我不完全理解Gradle是如何工作的,我打开这个给你们分享你的想法......
考虑到重复相同的构建文件(我敢说)是不可接受的,因为我可能想要在所有模块的所有构建逻辑中更改某些内容
处理这种设置的最佳方法是什么?
Eth*_*han 58
其中大部分内容与http://www.gradle.org/docs/current/userguide/multi_project_builds.html页面相似.但是你需要添加
evaluationDependsOn(':project1')
evaluationDependsOn(':project2')
Run Code Online (Sandbox Code Playgroud)
这样gradle将在模块之前评估project1和project2.在包含代码的所有项目中,您将需要一个空的build.gradle文件.这还允许您根据需要自定义项目.
示例: https ://github.com/ethankhall/AndroidComplexBuild
在项目的根目录中添加build.gradle.所以你需要有4个有用的信息.
/build.gradle
/settings.gradle
/project1/build.gradle
/project2/build.gradle
/module/build.gradle
Run Code Online (Sandbox Code Playgroud)
在/build.gradle中
dependencies {
project(":module")
}
Run Code Online (Sandbox Code Playgroud)
在/settings.gradle中
include ':module'
include ':project1', ':project1:A1', ':project1:B1', ':project1:Z1'
include ':project2', ':project2:A2', ':project2:B2', ':project2:Z2'
Run Code Online (Sandbox Code Playgroud)
在/project1/build.gradle中
apply plugin: 'java'
subprojects {
apply plugin: 'java'
sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6
repositories{
mavenCentral()
}
//Anything else you would need here that would be shared across all subprojects
}
Run Code Online (Sandbox Code Playgroud)
/project2/build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
subprojects {
apply plugin: 'android-library'
android {
compileSdkVersion 17
buildToolsVersion "17.0"
}
sourceCompatibility = JavaVersion.VERSION_1_6
targetCompatibility = JavaVersion.VERSION_1_6
repositories{
mavenCentral()
}
//Anything else you would need here that would be shared across all subprojects
}
Run Code Online (Sandbox Code Playgroud)
在/module/build.gradle中
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
evaluationDependsOn(':project1')
evaluationDependsOn(':project2')
apply plugin: 'android'
android {
compileSdkVersion 17
buildToolsVersion "17.0"
}
dependencies {
compile project(":project1:A1")
compile project(":project1:B1")
compile project(":project1:Z1")
compile project(":project2:A2")
compile project(":project2:B2")
compile project(":project2:Z2")
}
Run Code Online (Sandbox Code Playgroud)
如果您具有与该结构匹配的文件夹,则可以将相同的构建逻辑应用于多个项目.
如果您的settings.gradle包含
include ':project2:moduleA2'
Run Code Online (Sandbox Code Playgroud)
然后':project2'也是一个项目,它可以有自己的build.gradle,你可以在其中编写:
subprojects { project ->
apply plugin 'android-library'
// more configuration
}
Run Code Online (Sandbox Code Playgroud)
如果你没有将任何插件应用于':project2'本身,那么这个项目根本不会输出任何东西(这可能是你想要的),但是这样你就可以在一个简单的go中配置它的所有子项目.
然后你也可以让你的所有子模块都有一些特定的逻辑
如果要将它们全部保存在同一个文件中,您还可以在project2/build.gradle中进行技术操作.您可以阅读http://www.gradle.org/docs/current/userguide/multi_project_builds.html,了解如何从父build.gradle文件配置子项目,访问所有子项目或特定子项目,或使用过滤.
| 归档时间: |
|
| 查看次数: |
27757 次 |
| 最近记录: |