Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android Xposed框架中如何創建模塊

Android Xposed框架中如何創建模塊

編輯:Android開發教程

當然,你可以去學習如何創建一個Xposed模塊。所以你可以閱讀這篇教程(官方教程)去學習怎樣解決這個問題。這不僅僅講解如何新建模塊、如何編寫模塊,我們要往更深處思考,為什麼按照這些步驟,為什麼要新建這個類。如果你是“TL博士”那樣的人,那麼可以直接閱讀"Making the project an Xposed module" 這一章節。如果你想看完整個教程那麼你需要很好的理解能力。你將會花費時間去閱讀這篇文章,因為你不能但靠自己解決任何的問題。

here)。綜觀類XposedBridge,你可以看到的main 方法。這就是我上面寫的,這個類會在進程啟動之前被調用。在那時候執行一些初始化和模塊的加載(我會在後面講解模塊的加載)。

這裡下載XposedBridgeApi-.jar 。把它復制到子文件夾名為lib目錄下。然後在其上單擊右鍵,選擇Build Path => Add to Build Path 。你需要將版本名插入到xposedminversion的聲明清單中。轉自

可以選擇庫引用的方式。但是確保你的API類被正確地編譯到APK文件中 ,否則你會得到一個IllegalAccessError 。通過引用libs 文件(有“s”),通過Eclipse的簡單設置可以不用把XposedBridgeApi-.jar 包含進去。

here )並且浏覽他。但這官方ROM可能與你的不一樣,但在這種情況下,它是一個類似甚至相同的實現。第一,我想看看AOSP,看看是否是一樣的。如果我需要更多的細節,看看實際的反編譯代碼。

你可以尋找與“時鐘”類名稱或包含該字符串的類。下一步就是,尋找他所使用的資源和布局。如果您下載了官方AOSP的代碼,就可以開始在這裡開始尋找:frameworks/base/packages/SystemUI 。你會發現不少地方出現“時鐘”。這是正常的,的確會有不同的方式來實現修改。請記住,你僅僅可以hook方法 。所以,你必須要找到一個可以在他之前、之後、或全部替換可以插入一些代碼的地方。你應該hook 住盡可能具體的方法,而不是那些會被調用上千次的方法,去避免性能問題和意想不到的副作用。

在這種情況下,您可能會發現這個layout布局res/layout/status_bar.xml 包含了一個自定義視圖類:com.android.systemui.statusbar.policy.Clock。多個想法可能會現在你的頭腦中。文字顏色的定義是通過textAppearance屬性,所以最簡單的方法就是改變它,將會改變外觀的定義 。然而,這可能有效也可能無效(因為它可能存在於更深的native 代碼中)。更換布局狀態欄將是可能的,但是你們只可以做最小的變化去更改他,相反,看看這個類。有一個叫updateClock方法,它看上去會被每分鐘調用去更新時間

查看本欄目更多精彩內容:http://www.bianceng.cn/OS/extra/

看起來完美的修改,因為它是這似乎是唯一設置文本時鐘的非常具體的方法。假如我們改變了這個clock的顏色或者字體,那麼任何調用這個方法的都會受此影響。就達成我們的需求了,我們立刻行動.

(單獨的文本顏色,這裡有一種更好的方式.看到“修改布局”的例子在 "Replacing resources".)

helper 類的一個方法。請注意,它是靜態導入的,如果你配置了它描述的鏈接頁面就會自動添加 。此方法通過ClassLoader 在ClassLoader 包中查找Clock類 。然後,它會在裡面尋找updateClock方法。如果這種方法有任何參數,那你就必須列出這些參數的類型。不同的情況不一樣的處理,但我們的方法沒有任何參數,可以跳過這個假設。作為最後一個參數,你需要提供XC_MethodHook類的實現。對於較小的改動,就可以使用一個匿名類。如果你有太多的代碼,最好創建一個普通的類,只在這裡創建實例。隨後,helper 將盡一切方法hook住以上的函數。

你可以重寫XC_MethodHook的兩個方法。您可以同時覆蓋,甚至不做操作,但後者是完全沒有意義的。這兩個方法是beforeHookedMethod和afterHookedMethod。這不是太難猜測,這兩個方法會在原始的方法的之前和之後執行。您可以使用beforeHookedMethod 方法來評價/篡改方法調用的參數(通過param.args) ,甚至阻止調用原來的方法(發送自己的結果)。afterHookedMethod 方法可以用來做基於原始方法的結果的事情。您還可以用它來操縱結果 。當然,你可以添加自己的代碼,它將會准確地在原始方法的前或後執行。

(如果你想完全取代方法,看看子類XC_MethodReplacement相反,你只需要覆蓋replaceHookedMethod )

XposedBridge保留著一個記錄了每個已經hook了的函數的注冊回調函數 的列表。那些具有最高優先級(如hookMethod定義)會首先調用。原始方法始終是優先級最低的。所以,假如你hook了一個函數並注冊了回調A(PRIO高點)和B(PRIO默認值),那麼每當hook的方法被調用,控制流將是這樣的:A.before - > B.before - >原始的方法 - > B.after - > A.after。因此,A修改了的參數,B是可以看到的,這樣可以在傳遞給原始方法之前多步地改變它。原方法的結果首先會被B處理,但是這個原始方法最終返回的結果是由A來決定的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved