需求背景
有時(shí)候多個(gè)項(xiàng)目同步開(kāi)發(fā)逝慧,它們共用同一些library熟掂,但是 android studio默認(rèn)的方式是新建module或者從外部導(dǎo)入module嗜侮,導(dǎo)入之后其實(shí)已經(jīng)是原module的拷貝了稽犁,這時(shí)候如果一個(gè)項(xiàng)目中更新了這個(gè)library,另一個(gè)項(xiàng)目也要同步更新陨帆,工作量重復(fù)曲秉。
有沒(méi)有什么辦法像Eclipse中那樣,依賴的庫(kù)是獨(dú)立在開(kāi)發(fā)項(xiàng)目之外的疲牵?當(dāng)然有承二。
網(wǎng)上找到一些相關(guān)的,但沒(méi)發(fā)現(xiàn)可以直接走通的纲爸,或者由于編譯環(huán)境導(dǎo)致過(guò)時(shí)矢洲,參考了一些資料,總結(jié)一下缩焦。
實(shí)現(xiàn)方式
本實(shí)現(xiàn)方式測(cè)試于android studio 2.3.3, gradle 3.3责静,gradle build tools 2.3.1袁滥,其他版本應(yīng)該兼容但不保證。
下面從0開(kāi)始灾螃。
- 新建一個(gè)庫(kù)項(xiàng)目题翻,名叫MyLibProjs,選擇"Add no Activity"
- 將MyLibProjs中的app module重命名,比如:liba嵌赠。
- 打開(kāi)MyLibProjs項(xiàng)目中的liba module下的build.gradle文件
- 修改
apply plugin: 'com.android.application'
為
apply plugin: 'com.android.library'
- 刪除
android {
defaultConfig {
}
里的 applicationId
再給它隨便多添加幾個(gè)module塑荒,比如,lib2姜挺,libt
然后新建一個(gè)實(shí)際項(xiàng)目齿税,名叫MyMainProj
修改MyMainProj項(xiàng)目根目錄下的settings.gradle為:
include ':app', ':MyLibProjs'
project(':MyLibProjs').projectDir = new File('../MyLibProjs/')
include ':MyLibProjs:liba'
include ':MyLibProjs:lib2'
其中
'../MyLibProjs/'
表示跟MyMainProj目錄同級(jí)下的MyLibProjs
我MyLibProjs中有3個(gè)庫(kù),但我這個(gè)實(shí)際項(xiàng)目中只需要引用liba和lib2炊豪,因此include這兩個(gè)就好了凌箕,這中方式比eclipse下更加靈活
- 此時(shí)Sync一下工程
- 這時(shí)Android Sdutio中MyMainProj項(xiàng)目目錄結(jié)構(gòu)由原來(lái)的
/MyMainProj
+ app/
...
變成了這樣:
/MyLibProjs
+ liba/
+ lib2/
+ libt/
...
/MyMainProj
+ app/
...
這時(shí)可以看到MyLibProjs中l(wèi)iba和lib2的文字顏色是深黑色,而libt是淺色
這樣就成功地引入了庫(kù)項(xiàng)目词渤。
但是這時(shí)候還不能在代碼里調(diào)用這個(gè)庫(kù)工程的module中的方法牵舱。
下一步:
- 在MyMainProj項(xiàng)目下的app module的build.gradle中,添加
compile project (':MyLibProjs:liba')
compile project (':MyLibProjs:lib2')
大功告成缺虐!這時(shí)已經(jīng)成功地引入了庫(kù)項(xiàng)目中的兩個(gè)module芜壁,這時(shí)可以調(diào)用liba中的代碼了。
不過(guò)如果要在MyLibProjs中再添加module的話高氮,最好還是在as中打開(kāi)MyLibProjs這個(gè)項(xiàng)目添加慧妄。
代碼混淆注意
這時(shí)候就不能照原來(lái)的方式在庫(kù)項(xiàng)目里對(duì)代碼使用proguard了,修改方式如下:
修改庫(kù)項(xiàng)目的module中的build.gradle文件
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled false
}
}
為:
buildTypes {
release {
consumerProguardFiles 'proguard-project.txt'
}
}
現(xiàn)在纫溃,工作量要節(jié)省很多了腰涧!
參考:
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