Gradle Library Module的复用机制
来源:互联网 发布:淘宝怎么避免同款 编辑:程序博客网 时间:2024/06/15 02:08
FBI Warning:欢迎转载,但请标明出处:http://blog.csdn.net/codezjx/article/details/49531887,未经本人同意请勿用于商业用途,感谢支持!
考虑如下情况:
这里有两个AS项目,分别为projectA和projectB,结构分别如下:
projectA/ ├----build.gradle ├----settings.gradle ├----bluewhale/ ├----krill/
projectAsettings.gradle
内容:include 'bluewhale', 'krill'
projectB/ ├----build.gradle ├----settings.gradle ├----hello/ ├----krill/
projectBsettings.gradle
内容:include 'hello', 'krill'
你可以注意到projectA
和projectB
均包含相同的modulekrill
,实际上他是一个相同的Library Project,那么问题就来了:如何高效的复用现有的module?实际开发中这个问题应该比较常见,特别针对于同时需要开发多个应用的场景,解决方法如下:
单个Library Module复用
- 假设当前Project为GradleProject,在其settings.gralde中include项目的时候指定
projectDir
目录位置,如:
include ':LibraryA'project(':LibraryA').projectDir = new File('../LibraryProject/LibraryA')include ':LibraryB'project(':LibraryB').projectDir = new File('../LibraryProject/LibraryB')
- 然后在某个App Module中添加dependencies 即可:
dependencies { ... compile project(':LibraryA') compile project(':LibraryB')}
- 最后的情况如下截图:
多个Library Module统一管理
上面的方式会有一个问题,依赖的library module都是以Project的形式导入的,如果引用越来越多library,外面的Project列表就会越来越长,这个时候我们可以把library module都放在一个Project中统一管理起来。
首先新建一个LibraryProject目录,将用到的library module放进去,如LibraryA、LibraryB…
拷贝一个默认的build.gradle过去:
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}allprojects { repositories { jcenter() }}task clean(type: Delete) { delete rootProject.buildDir}
- settings.gradle内加入:
include ':LibraryA', ':LibraryB',
- 最终目录结构如下
LibraryProject/ ├----build.gradle ├----settings.gradle ├----LibraryA/ ├----LibraryB/
- 最后修改一下GradleProject中的settings.gralde
...// Root project of common libraryinclude ':LibraryProject'project(':LibraryProject').projectDir = new File('../LibraryProject/')// Include library module we needinclude ':LibraryProject:LibraryA'include ':LibraryProject:LibraryB'
- 最后的最后在GradleProject中的某个App Module中添加dependencies 即可(注意要添加:LibraryProject路径):
dependencies { ... compile project(':LibraryProject:LibraryA') compile project(':LibraryProject:LibraryB')}
- 最后的情况如下截图:
(注意GradleProject和LibraryProject在同一个目录中哦!)
参考:
http://www.philosophicalhacker.com/2014/10/02/an-alternative-multiproject-setup-for-android-studio/
https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:multi_project_builds
下面这个是博主在SO上面的提问&回答,觉得OK请点个up vote哦
http://stackoverflow.com/questions/31910947/how-to-reuse-the-submodule-in-gradle
- Gradle Library Module的复用机制
- Gradle library module
- Package Module Library 的定义
- 用gradle编译module中的libs里的包
- AndroidStudio 删除依赖的 Android Library Module
- AndroidStudio 删除依赖的 Android Library Module
- AS下导入另一个Library的Module
- library module 只有release版本的问题
- gradle构建多module的项目
- Android Studio module + gradle的巧妙运用
- Gradle Library项目的多渠道打包实现
- Unable to find module with Gradle path. Linking to library -unspecified instead
- Android Studio中application module,library module,java module的区别
- android studio中application module,library module,java module的区别
- Library Module详解
- (转)Library Module详解
- Python中的module,library,package之间的区别
- A004: Python中的module,library,package之间的区别
- 排序算法---希尔排序
- 利用 Process Monitor 找出某个 Windows 选项所对应的注册表值
- JSON获取数组——读完你就读懂了JSON
- integer-to-roman
- 分页集合
- Gradle Library Module的复用机制
- lua - math【方法】
- SpringIoC依赖注入的过程(一)
- IE6、IE7、IE8的CSS、JS兼容
- php正则技巧,抓取、匹配中文、任意字符
- java ArrayList无限添加元素
- SDWebImage
- call和apply
- 闭包