前言:寫此文章的目的是為了梳理并加強自己對于導(dǎo)入第三方lib包細節(jié)知識的記憶。
我們平時在開發(fā)的過程中蝗碎,都會遇到要實現(xiàn)某一個特效或者具體的功能,如android仿iOS滾輪效果旗扑,如實現(xiàn)分享等第三方平臺功能蹦骑,而這些我們?nèi)绻慷甲约簛鞢oding的話,估計費老鼻子勁了臀防,所以都會從網(wǎng)上找一些開源的眠菇、好用的、成熟的主要是省事的第三方lib包導(dǎo)入系統(tǒng)袱衷,再次就梳理一下在導(dǎo)包的過程中可能遇到的問題捎废。
項目引入第三方代碼有幾種方式,分別是開源的致燥、直接集成好的jar包登疗,原則上如果有源代碼,就導(dǎo)入源代碼嫌蚤,這樣也方便個性化定制以及去除無用的代碼辐益。導(dǎo)入的形式又份本地的和網(wǎng)絡(luò)的。下面就分別來說說各自的方式脱吱。
1荷腊、集成好的jar包
1.1 本地的jar包
一般情況我們都放到主工程下面的libs文件夾下,然后通過gradle編譯
上圖中急凰,libs中除了文件夾類型后面再議外女仰,看到很多*.jar文件猜年,其中前面帶箭頭的代表已經(jīng)通過編譯了,不帶箭頭的疾忍,代表還沒有編譯過(沒有編譯過是不能引用其中的類)乔外。下面我們來對其進行編譯。
找到對應(yīng)的build.gradle文件一罩,看到其中有這么一段話
dependencies {
compile fileTree(include: ['*.jar'],dir:'libs')
compile project(':library')
compile files('libs/open_sdk_r5509_lite.jar')
compile files('libs/jcc-bate-0.7.3.jar')
}
這里重點說一下杨幼,其實有最上面的
compile fileTree(include: ['*.jar'],dir:'libs')
已經(jīng)代表每一次gradle都會對libs文件夾下的jar文件進行編譯,通俗點就是聂渊,導(dǎo)入一個jar包后差购,再點擊一下
就妥妥的了。
就是說汉嗽,上面的gradle文件可以改成
dependencies {
compile fileTree(include: ['*.jar'],dir:'libs')
compile project(':library')(這個是這個項目要導(dǎo)入的其他lib)
}
ps:在導(dǎo)入第三方j(luò)ar包的時候欲逃,一定要注意其對應(yīng)的是否有對應(yīng)的so庫,以及so庫支持的CPU類型饼暑。有的時候第三方提供的so庫對應(yīng)的cpu類型不全稳析,其中的坑誰用誰知道,放一個鏈接弓叛,不懂的童鞋可以看看:
http://blog.csdn.net/u013278099/article/details/50414438
http://blog.csdn.net/ouyang_peng/article/details/51168072
ps:上面鏈接我隨手搜到的彰居,如果有更好的到時候再更新。(估計也就是說說撰筷,別當真)
1.2 網(wǎng)絡(luò)lib包
原諒我這無知的人對于網(wǎng)絡(luò)上的倉庫什么Maven Central什么JCenter之類的一知半解陈惰,為了不出洋相就不多闡述,但是還是很厚道的放一個鏈接:
http://blog.csdn.net/lu_xin_/article/details/51134849
我們通常使用的都是JCenter(如果遇到需要通過meven的人家的網(wǎng)站上都會詳細說明一步一步怎么做毕籽,照做就好)抬闯,貼出項目的build.gradle中的配置,就妥妥的使用了jcenter了:
allprojects{
repositories {
jcenter()
}
}
然后在application中的build.gradle中加上如下內(nèi)容
然后再次gradle一下影钉,就又不出意外的妥妥導(dǎo)入進去了
2画髓、導(dǎo)入源代碼
2.1 直接將源文件添加進項目代碼中
這種方式很粗暴的說,比如直接把人家的類作為自己的寫的類來使用平委,適用于特殊場景的奈虾,比如自定義圖片、自定義簡單的view廉赔,這種一般就是一個文件搞定肉微,不是一個項目的方式導(dǎo)入進去。
2.2 將源代碼整個項目作為lib庫導(dǎo)入
這個就是項目源代碼作為lib導(dǎo)入蜡塌,首先需要聲明其是一個lib而不是一個application碉纳,在其對應(yīng)的build.gradle文件中最開頭加上一句:
apply plugin:'com.android.library'
然后在整個項目的setting.gradle中include進去
include':wheel'
再次要注意的是,上面的寫法代表這個項目是和我們的application是在同一個文件夾下的馏艾,如果這個項目(指的是wheel)作為一個公共的(多個項目都使用到的)lib被用到劳曹,每一個項目中都添加一遍也不利于變動修改奴愉,所以可以在項目的setting.gradle指定具體路徑的項目作為lib:
include':wheel'
project(':wheel').projectDir = file("../android-tools/trunk/wheel")
上面..代表上級路徑哈!
這也聲明了是lib也include了進去铁孵,下一步就該使用了锭硼,在application中(或者在使用的項目lib中)的build.gradle文件下
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':wheel')
}
這樣就成了。
最后說一句大家都知道的東西蜕劝,就是lib可以相互繼承檀头,把A、B項目作為lib后岖沛,如果B中的build.gradle添加了compile A項目暑始,再在C項目中compile B,C項目也可以使用A項目的代碼婴削。