Android筆記之:App模塊化及工程擴(kuò)展的應(yīng)用
1.需求
無(wú)論是在.net還是java平臺(tái),合理的分層架構(gòu)是最普遍的模塊化思路之一。
dll,jar文件無(wú)不風(fēng)靡盛行,無(wú)處不在。
一天,tx團(tuán)隊(duì)和我說(shuō),我們現(xiàn)在要做android上做三個(gè)論壇的客戶(hù)端,一個(gè)是新聞?wù)搲?,一個(gè)是文學(xué)論壇,一個(gè)是音樂(lè)論壇。除了數(shù)據(jù),界面和很少的模塊不一樣,其他的都一摸一樣。
jar是我第一刻就想到的東西,但是共用的jar文件無(wú)法方便的共享資源或者覆蓋資源。
而我們也不會(huì)傻傻的單獨(dú)做三個(gè)客戶(hù)端的吧,也不會(huì)傻傻的做3個(gè)客戶(hù)端再傻傻的copy3份,依次修改吧。
2.問(wèn)題
在Android工程中如何開(kāi)發(fā)一個(gè)共用Framework,能共用資源,代碼,但是也能擴(kuò)展?
3.使用硬編碼判斷
有人提出了一種方案, 在代碼里面判斷:
if(新聞?wù)搲? {
//加載新聞?wù)搲馁Y源
//執(zhí)行新聞?wù)搲拇a
//顯示新聞?wù)搲男Ч?
}else if(文學(xué)論壇) {
//加載文學(xué)論壇的資源
//執(zhí)行文學(xué)論壇的代碼
//顯示文學(xué)論壇的效果
}else if(音樂(lè)論壇) {
//加載音樂(lè)論壇的資源
//執(zhí)行音樂(lè)論壇的代碼
//顯示音樂(lè)論壇的效果
}
PS:這是一種很無(wú)奈的辦法,代碼丑陋,擴(kuò)展性差,有沒(méi)有更好的辦法呢?
4.使用Android Library分離工程
Android Library提供了一個(gè)類(lèi)似于其他平臺(tái)的庫(kù)的概念,這個(gè)庫(kù)不僅能公用代碼,還能共用資源,還能覆寫(xiě)資源。
Android Library是以工程的顆粒來(lái)復(fù)用,引用它的工程,其實(shí)就是引用它的代碼,然后生成R.java和主工程需要的資源,而剔除Library中被覆蓋的資源。其中Library中的AndroidManifest.xml不能復(fù)用,也就是說(shuō)主工程必須重新定義AndroidManifest.xml,這個(gè)也很容易理解,AndroidManifest.xml本來(lái)就是工程的一個(gè)配置文件,一般來(lái)說(shuō)不具備共用的庫(kù)的通用性。
步驟如下:
第一步:新建Android工程common。
第二步:右鍵common,選擇Properties,在Android標(biāo)簽頁(yè),選中"Is Library" ,如下圖。
第三步: 新建主工程新聞?wù)搲痶ianxianews。
第四步: 右鍵tianxianews,選擇Properties,在Android標(biāo)簽頁(yè),點(diǎn)擊Add,選中common。如下圖。
查看最后的工程結(jié)構(gòu):
此時(shí)此刻,common工程天衣無(wú)縫成了tianxianews工程的一部分。我們展開(kāi)tianxianews工程的gen目錄:

eclipse為了生成了兩個(gè)R.java,一個(gè)是common工程的,一個(gè)tianxianews工程的,但是內(nèi)容是一摸一樣的,這樣做的好處是:R.java里面的內(nèi)容包括兩個(gè)工程資源,第一,tianxianews工程通過(guò)R.java能調(diào)用到common工程的資源;第二,如果有覆寫(xiě)的資源,生成apk的時(shí)候,tianxianews工程覆蓋common工程的資源,因?yàn)閮蓚€(gè)R.java內(nèi)容一樣,common代碼調(diào)用的R.java中的資源,實(shí)際上調(diào)用的是tianxianews資源,這個(gè)特性類(lèi)似如面向?qū)ο蟮睦^承的概念。
我們還可以另外新建tianxiamusic,tianxialiterature工程,都引用common,這樣我們?nèi)齻€(gè)工程就能共用common,這樣我們就可以只在common一個(gè)工程中開(kāi)發(fā)了。
在這里,具體的使用步驟我沒(méi)有截圖出來(lái),主要是沒(méi)什么技術(shù),也沒(méi)什么好說(shuō)的,就是兩個(gè)字:覆蓋。
5.小結(jié)
Android Library為Android模塊化和工程擴(kuò)展提供了一個(gè)很好的工具或者方式。隨著項(xiàng)目的增大,資源的共享,模塊化和擴(kuò)展的這種需求更是日益凸顯,它不僅去掉了代碼的丑陋,而且減少了開(kāi)發(fā)量,帶來(lái)的益處不少。同時(shí)由此我們也可以看出來(lái)Android的不成熟,他們?yōu)槲覀兇笮凸こ烫峁┑姆桨高€是太少,這可能也有源自手機(jī)平臺(tái)本身的局限性吧,我們期待Android市場(chǎng)走向更強(qiáng)大,技術(shù)走向更強(qiáng)悍。
相關(guān)文章
Kotlin類(lèi)的繼承實(shí)現(xiàn)詳細(xì)介紹
這篇文章主要介紹了Kotlin類(lèi)的繼承,在Java中類(lèi)的繼承默認(rèn)是繼承父類(lèi)的方法和參數(shù)的,但是在kotlin中默認(rèn)是不繼承的,那么我們接下來(lái)來(lái)驗(yàn)證2022-09-09
Android定時(shí)器實(shí)現(xiàn)的幾種方式整理及removeCallbacks失效問(wèn)題解決
本文為大家詳細(xì)介紹下Android 定時(shí)器實(shí)現(xiàn)的幾種方式:Handler + Runnable、Timer的方式、Handle與線程的sleep(long )方法和removeCallbacks失效問(wèn)題如何解決2013-06-06
Android媒體開(kāi)發(fā)之音樂(lè)播放器
這篇文章主要為大家詳細(xì)介紹了Android媒體開(kāi)發(fā)之音樂(lè)播放器,播放SD卡中的音樂(lè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android開(kāi)發(fā)中的單例模式應(yīng)用詳解
這篇文章主要介紹了Android開(kāi)發(fā)中的單例模式應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了Android開(kāi)發(fā)中常用單例模式的實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2018-01-01
android?viewflipper實(shí)現(xiàn)左右滑動(dòng)切換顯示圖片
這篇文章主要為大家詳細(xì)介紹了android?viewflipper實(shí)現(xiàn)左右滑動(dòng)切換顯示圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android開(kāi)發(fā)實(shí)現(xiàn)自定義新聞加載頁(yè)面功能實(shí)例
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)自定義新聞加載頁(yè)面功能,結(jié)合具體實(shí)例形式分析了Android界面加載及頁(yè)面布局相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Android基于OpenCV實(shí)現(xiàn)非真實(shí)渲染
非真實(shí)感渲染(Non Photorealistic Rendering,簡(jiǎn)稱(chēng)NPR),是指利用計(jì)算機(jī)模擬各種視覺(jué)藝術(shù)的繪制風(fēng)格,也用于發(fā)展新的繪制風(fēng)格。比如模擬中國(guó)畫(huà)、水彩、素描、油畫(huà)、版畫(huà)等藝術(shù)風(fēng)格。本文將講解Android基于OpenCV實(shí)現(xiàn)非真實(shí)渲染的方法2021-06-06
Android Camera是否支持變焦的判斷方法總結(jié)
這篇文章主要介紹了Android Camera是否支持變焦的判斷方法總結(jié),本文總結(jié)了調(diào)節(jié)攝像頭焦距編程中遇到的一些問(wèn)題和解決方法,需要的朋友可以參考下2015-04-04

