通常的,一個Android應用在開發到了必定階段之後,功能模塊將會愈來愈多,APK安裝包也愈來愈大,用戶在使用過程當中也沒有辦法選擇性的加載本身須要的功能模塊。此時可能就須要考慮如何分拆整個應用了。 android
通常有兩種方式,一種是將應用按照功能分拆成多個應用,用戶須要哪一個就下載哪一個,都須要就都下載。應用之間,能夠在代碼層面作必定的關聯,以共享部分信息。另外一種方式,相似於其餘平臺插件的方式,用戶能夠在主應用中能夠選擇性的下載須要的插件,不須要該功能,則不須要下載。 數據庫
第一種方式,只須要開發多個應用就夠了。第二種方式稍微複雜,須要作不少額外的工做。這裏咱們簡單討論第二種方式的大體實現方法。 json
有人可能會想到,是否能夠像其餘平臺那樣,下載一個相似於dll文件,或者jar包,就能自動識別而且加載該功能?惋惜的是,在Android平臺上是不容許直接動態加載jar包的,做者也沒有想到相似辦法。因此,想實現這種功能,仍是要以獨立APK的方式來加載。和第一種方式不一樣的是,從設計的角度,具體的插件是沒有獨立運行的入口的,也不容許有桌面圖標存在,必須從主應用中打開,關閉後回到主應用(插件既然是APK,它安裝完怎麼會沒有入口?怎麼會沒有桌面圖標?QQ的跑酷等遊戲不就是插件?不是就有圖標入口?)。從用戶的角度看,能夠在應用中加載須要的功能而且使用,也就相似於其餘平臺插件的方式了。 服務器
爲了實現這種方式,從設計的角度,就須要考慮清楚哪些功能做爲獨立的插件提供給用戶,這裏再也不詳述。下面從開發的角度說明大體須要作的工做。 框架
Ø 主應用中須要開發的框架功能: spa
識別具體的插件是否已經安裝(根據插件的package名) 插件
若是已經安裝要判斷是否須要升級(服務器端獲取最新的版本和本地的比較) 設計
下載而且安裝(或者升級)插件 遊戲
卸載該插件 資源
Ø 插件APK開發中須要注意的事項:
Manifest文件中不要提供啓動的入口
Ø 主應用和插件之間交互的提示:
最好是使用相同的android:sharedUserId,插件能夠方便的獲取主應用的資源、數據庫等等。
主應用能夠以Intent方式啓動具體的插件,同時帶入Map類型參數或者json串參數,在插件APK中解析具體參數,實現業務邏輯。