1. 程式人生 > >Android動態載入及hook資料彙總

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 15ActivityManagerService通過Binder程序間通訊機制通知MainActivity進入Paused狀態;

       . Step 16 - Step 22MainActivity通過Binder程序間通訊機制通知ActivityManagerService,它已經準備就緒進入

Paused狀態,於是ActivityManagerService就準備要在MainActivity所在的程序和任務中啟動新的Activity了;

       . Step 23 - Step 29ActivityManagerService通過Binder程序間通訊機制通知MainActivity所在的ActivityThread,現在一切準備就緒,它可以真正執行Activity的啟動操作了。

對比


  • 遷移成本很重:需要使用『that』而不是『this』,所有activity都需要繼承自proxy avtivityproxy avtivity負責管理所有activity的生命週期)。
    無法啟動
    apk內部的activity
    不支援ServiceBroadcastReceiver。文章開頭提到,要想成為一個外掛apk,是要滿足一定條件的,如下是採用本文機制開發外掛apk所需要遵循的規範:
  1. 慎用this(介面除外):因為this指向的是當前物件,即apk中的activity,但是由於activity已經不是常規意義上的activity,所以this是沒有意義的,但是如果this表示的是一個介面而不是context,比如activity實現了而一個介面,那麼this繼續有效。
  2. 使用that:既然this不能用,那就用thatthatapkactivity的基類BaseActivity中的一個成員,它在apk安裝執行的時候指向this,而在未安裝的時候指向宿主程式中的代理activityanywaythat is better than this
  3. activity的成員方法呼叫問題:原則來說,需要通過that來呼叫成員方法,但是由於大部分常用的api已經被重寫,所以僅僅是針對部分api才需要通過that去呼叫用。同時,apk安裝以後仍然可以正常執行。
  4. 啟動新activity的約束:啟動外部activity不受限制,啟動apk內部的activity有限制,首先由於apk中的activity沒註冊,所以不支援隱式呼叫,其次必須通過BaseActivity中定義的新方法startActivityByProxystartActivityForResultByProxy,還有就是不支援LaunchMode
  5. 目前暫不支援ServiceBroadcastReceiver等需要註冊才能使用的元件,但廣播可以採用程式碼動態註冊。
  • AndroidDynamicLoader
    遷移成本很重:
    使用資源時要用MyResources.getResource(Me.class)而不是context.getResources()
    使用Fragment作為UI容器,所有每個頁面都是使用Fragment而不是Activity,需要使用URL mapping才能實現頁面跳轉。
  • android-pluginmgr
    未經過生產環境App測試。
    不支援ServiceBroadcastReceiver
  • 奇虎360
    非常有趣的框架!DroidPlugin能夠在一個App內啟動一個沒有安裝的App。這個特性可能更適合360的安全產品,因為被啟動的App和宿主App完全沒有任何關聯,相互間不能支援資源和程式碼呼叫。不支援自定義推送欄。