Android應用插件式開發解決方法
一、現實需求描述
一般的,一個Android應用在開發到了一定階段以後,功能模塊將會越來越多,APK安裝包也越來越大,用戶在使用過程中也沒有辦法選擇性的加載自己需要的功能模塊。此時可能就需要考慮如何分拆整個應用了。
二、解決方案提出
一般有兩種方式,一種是將應用按照功能分拆成多個應用,用戶需要哪個就下載哪個,都需要就都下載。應用之間,可以在代碼層面做一定的關聯,以共享部分信息。另一種方式,類似於其他平台插件的方式,用戶可以在主應用中可以選擇性的下載需要的插件,不需要該功能,則不需要下載。
第一種方式,只需要開發多個應用就夠了。第二種方式稍微復雜,需要做很多額外的工作。這裡我們簡單討論第二種方式的大致實現方法。
三、實現方法概述
有人可能會想到,是否可以像其他平台那樣,下載一個類似於dll文件,或者jar包,就能自動識別並且加載該功能?可惜的是,在Android平台上是不允許直接動態加載jar包的,作者也沒有想到類似辦法。所以,想實現這種功能,還是要以獨立APK的方式來加載。和第一種方式不同的是,從設計的角度,具體的插件是沒有獨立運行的入口的,也不允許有桌面圖標存在,必須從主應用中打開,關閉後回到主應用。從用戶的角度看,可以在應用中加載需要的功能並且使用,也就類似於其他平台插件的方式了。
為了實現這種方式,從設計的角度,就需要考慮清楚哪些功能作為獨立的插件提供給用戶,這裡不再詳述。下面從開發的角度說明大致需要做的工作。
Ø 主應用中需要開發的框架功能:
識別具體的插件是否已經安裝(根據插件的package名)
如果已經安裝要判斷是否需要升級(服務器端獲取最新的版本和本地的比較)
下載並且安裝(或者升級)插件
卸載該插件
Ø 插件APK開發中需要注意的事項:
Manifest文件中不要提供啟動的入口
Ø 主應用和插件之間交互的提示:
最好是使用相同的android:sharedUserId,插件可以方便的獲取主應用的資源、數據庫等等。
主應用可以以Intent方式啟動具體的插件,同時帶入Map類型參數或者json串參數,在插件APK中解析具體參數,實現業務邏輯。
三、其他說明
本博客內容並沒有具體說明如何去實現,沒有代碼級別的說明。但是通過上面介紹的方式,開發者基本已經可以理解如何實現插件式的Android應用了。具體的,在開發過程中可能還會遇到很多問題,需要開發者自己摸索和完善。