Android動態載入及hook資料彙總
apk加固
Android自動打包程式
http://www.jizhuomi.com/android/environment/281.html
360 Android外掛(DroidPlugin)無需安裝執行APK的原理是什麼,用途都有哪些?
遠端服務
Android Activity學習筆記——Activity的啟動和建立
Android-精通Activity
Android系統Activity視窗啟動過程
Android的應用(APP)啟動詳細流程
Android 外掛化動態升級
https://github.com/cayden/Android-Plugin-Framework
Android外掛化開發,初入殿堂
老羅帖子的裡面最後的總結:
在應用程式內部啟動新的Activity的過程要執行很多步驟,但是整體來看,主要分為以下四個階段:
一. Step 1 - Step 10:應用程式的MainActivity通過Binder程序間通訊機制通知ActivityManagerService,它要啟動一個新的Activity;
二. Step 11 - Step 15:ActivityManagerService通過Binder程序間通訊機制通知MainActivity進入Paused狀態;
三. Step 16 - Step 22:MainActivity通過Binder程序間通訊機制通知ActivityManagerService,它已經準備就緒進入
四. Step 23 - Step 29:ActivityManagerService通過Binder程序間通訊機制通知MainActivity所在的ActivityThread,現在一切準備就緒,它可以真正執行Activity的啟動操作了。
對比
遷移成本很重:需要使用『that』而不是『this』,所有activity都需要繼承自proxy avtivity(proxy avtivity負責管理所有activity的生命週期)。
無法啟動
不支援Service和BroadcastReceiver。文章開頭提到,要想成為一個外掛apk,是要滿足一定條件的,如下是採用本文機制開發外掛apk所需要遵循的規範:
- 慎用this(介面除外):因為this指向的是當前物件,即apk中的activity,但是由於activity已經不是常規意義上的activity,所以this是沒有意義的,但是如果this表示的是一個介面而不是context,比如activity實現了而一個介面,那麼this繼續有效。
- 使用that:既然this不能用,那就用that,that是apk中activity的基類BaseActivity中的一個成員,它在apk安裝執行的時候指向this,而在未安裝的時候指向宿主程式中的代理activity,anyway,that is better than this。
- activity的成員方法呼叫問題:原則來說,需要通過that來呼叫成員方法,但是由於大部分常用的api已經被重寫,所以僅僅是針對部分api才需要通過that去呼叫用。同時,apk安裝以後仍然可以正常執行。
- 啟動新activity的約束:啟動外部activity不受限制,啟動apk內部的activity有限制,首先由於apk中的activity沒註冊,所以不支援隱式呼叫,其次必須通過BaseActivity中定義的新方法startActivityByProxy和startActivityForResultByProxy,還有就是不支援LaunchMode。
- 目前暫不支援Service、BroadcastReceiver等需要註冊才能使用的元件,但廣播可以採用程式碼動態註冊。
- AndroidDynamicLoader
遷移成本很重:
使用資源時要用MyResources.getResource(Me.class)而不是context.getResources()
使用Fragment作為UI容器,所有每個頁面都是使用Fragment而不是Activity,需要使用URL mapping才能實現頁面跳轉。 - android-pluginmgr
未經過生產環境App測試。
不支援Service和BroadcastReceiver。 - 奇虎360
非常有趣的框架!DroidPlugin能夠在一個App內啟動一個沒有安裝的App。這個特性可能更適合360的安全產品,因為被啟動的App和宿主App完全沒有任何關聯,相互間不能支援資源和程式碼呼叫。不支援自定義推送欄。