想深入了解android動態載入技術,需要掌握什麼基本技能?

想深入了解android動態載入技術,需要掌握什麼基本技能?


最近一直在做插件化相關的工作。現在最常見的方案就是來自阿里的 Atlas 和 360 的 DroidPlugin 了。按照我的理解,對於當前的大多數應用來講,可能 Atlas 會更適合一些,因為它允許插件與宿主之間,甚至是插件之間可以有互動;而 DroidPlugin 的思想會更先進,可想像空間更大一些,理論上它可以啟動任何一個第三方應用,比如虛擬化,可參照物就是 LBE 的平行空間。Atlas 並沒有開源,DroidPlugin 已開源,我們現在採用的方案是基於 Atlas 的,有興趣的可以看看 ACDD ,核心思想都是一樣。

不管是插件化,還是熱補丁,現在的方案都比較多,相應方案在 GitHub 上也都能找得到 demo ,Google 一下,也有不少文章,然而停留在 demo 和文章介紹階段,始終與實際的生產開發有較大的距離,尤其是大部分文章還只是紙上談兵,寫文章的十之七八恐怕都沒有真正的在自己的應用里實踐過,而插件化最困難的部分就是實踐過程中遇到各種細節和適配問題,還有對當前開發模式的影響也是怎麼都繞不過去的問題。下面我大致列一下我們在實踐過程中遇到的一些問題。

  1. 插件怎麼去引用宿主里的類?
  2. 插件怎麼去引用宿主的資源?
  3. 插件化要給每個插件進行資源分段,該如何進行資源分段?
  4. 為了讓業務的同學更容易接受,怎麼處理宿主的類和資源?
  5. 在引用宿主的資源的時候,默認可用的 context 在插件化里是否依然可用?
  6. 不同的資源類型,引用和處理方式是否相同?
  7. 插件之間共用的一些類,是放在宿主里,還是在插件里開放出介面,該怎麼樣去考量?
  8. 插件如何去開放介面,讓其他插件引用?
  9. 插件開放出了介面,其他插件又該怎樣去引用?
  10. 不同的插件都要引用同一個類和同一個資源,類和資源重複了該怎麼辦?
  11. 載入各個插件時,怎麼樣知道各個插件的信息?
  12. 插件版本該如何去管理?
  13. 怎樣實現 debug 和 release 開發的宿主和插件打包?
  14. 應用啟動時要載入那麼多插件,怎麼加速第一次啟動?
  15. 插件引用的宿主的類和資源發生改變,難道每次都要去每個插件裏手動修改嗎?
  16. 四大組件的免註冊是怎麼回事?
  17. 四大組件免註冊了,是否還需要合併每個插件的 AndroidManifest ?
  18. 在不允許手動拷貝的情況下,如何合併各個插件的 AndroidManifest ?
  19. 宿主的方法數超過 65535 了,該怎麼辦?
  20. 混淆問題怎麼去處理?
  21. 適配,還是適配。

實際操作中,因為對開發的影響是不可避免的,多虧了有 gradle ,通過定製 gradle 腳本,插件,甚至是 SDK 組件,很多事情我們可以做到自動化,當然,凡事有利就有弊,在這個過程中,會發現相當多的正常開發遇不到的 gradle 的『bug』,因此,假如 gradle 玩不轉,會有很多麻煩。目前大致能想到的就這麼多,以後有想到了再補充吧。


沒人邀也自己來了.

樓上答的很棒呀...我就說點最基礎的東西好了...

最近因為一些需求在一個小項目中使用了一點簡單的動態載入技術.就是在 APP 中動態載入一些jar 包中的方法.

然後在我的開發過程中應該主要是用到了:

java 的反射機制.

module打包為 jar.

通過 dx 工具將 jar 加密為 dex.

然後...剛學 Android兩年不到.技術還比較菜...跪求各位 dalao 們別吐槽.


我用的是一個叫apkplug的框架,這個框架能提供後台託管,這是我覺的比較方便的地方,不用我們自己搭伺服器,而且插件間通信支持的也比較好


推薦閱讀:

程序員上班可以偷懶嗎?
《Android 源碼設計模式解析與實戰》這本書適用於哪些層次的 Android 開發人員?
如何看待中國鐵路12306客戶端提供gcm推送?
當手機廠商說在 Android 底層做優化的時候,它們到底在做什麼?

TAG:Android開發 | Java虛擬機JVM | Android |