需求背景
有时候多个项目同步开发,它们共用同一些library,但是 android studio默认的方式是新建module或者从外部导入module,导入之后其实已经是原module的拷贝了,这时候如果一个项目中更新了这个library,另一个项目也要同步更新,工作量重复。
有没有什么办法像Eclipse中那样,依赖的库是独立在开发项目之外的?当然有。
网上找到一些相关的,但没发现可以直接走通的,或者由于编译环境导致过时,参考了一些资料,总结一下。
实现方式
本实现方式测试于android studio 2.3.3, gradle 3.3,gradle build tools 2.3.1,其他版本应该兼容但不保证。
下面从0开始。
- 新建一个库项目,名叫MyLibProjs,选择"Add no Activity"
- 将MyLibProjs中的app module重命名,比如:liba。
- 打开MyLibProjs项目中的liba module下的build.gradle文件
- 修改
apply plugin: 'com.android.application'
为
apply plugin: 'com.android.library'
- 删除
android {
defaultConfig {
}
里的 applicationId
再给它随便多添加几个module,比如,lib2,libt
然后新建一个实际项目,名叫MyMainProj
修改MyMainProj项目根目录下的settings.gradle为:
include ':app', ':MyLibProjs'
project(':MyLibProjs').projectDir = new File('../MyLibProjs/')
include ':MyLibProjs:liba'
include ':MyLibProjs:lib2'
其中
'../MyLibProjs/'
表示跟MyMainProj目录同级下的MyLibProjs
我MyLibProjs中有3个库,但我这个实际项目中只需要引用liba和lib2,因此include这两个就好了,这中方式比eclipse下更加灵活
- 此时Sync一下工程
- 这时Android Sdutio中MyMainProj项目目录结构由原来的
/MyMainProj
+ app/
...
变成了这样:
/MyLibProjs
+ liba/
+ lib2/
+ libt/
...
/MyMainProj
+ app/
...
这时可以看到MyLibProjs中liba和lib2的文字颜色是深黑色,而libt是浅色
这样就成功地引入了库项目。
但是这时候还不能在代码里调用这个库工程的module中的方法。
下一步:
- 在MyMainProj项目下的app module的build.gradle中,添加
compile project (':MyLibProjs:liba')
compile project (':MyLibProjs:lib2')
大功告成!这时已经成功地引入了库项目中的两个module,这时可以调用liba中的代码了。
不过如果要在MyLibProjs中再添加module的话,最好还是在as中打开MyLibProjs这个项目添加。
代码混淆注意
这时候就不能照原来的方式在库项目里对代码使用proguard了,修改方式如下:
修改库项目的module中的build.gradle文件
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled false
}
}
为:
buildTypes {
release {
consumerProguardFiles 'proguard-project.txt'
}
}
现在,工作量要节省很多了!
参考:
https://stackoverflow.com/questions/22243269/how-to-share-a-single-library-source-across-multiple-projects
http://www.wxtlife.com/2015/12/17/Android-studio-quote-same-lib/?utm_source=tuicool&utm_medium=referral