1. 程式人生 > >xposed模組開發步驟總結

xposed模組開發步驟總結

一、成為xposed模組

要成功xposed模組,被xposed識別,一般需要在清單檔案中標識該三個元資料(meta-data)

<application
        android:name=".base.BaseApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name">
        <meta-data
            android:name="xposedmodule"
            android:value="true"
/> <meta-data android:name="xposeddescription" android:value="模組描述文字"/> <meta-data android:name="xposedminversion" android:value="30"/> </application>

二、引用xposed框架的jar包(XposedBridgeApi.jar)

把下載下來的XposedBridgeApi.jar放到libs目錄下,eclipse的話需要單擊右鍵,選擇Build Path => Add to Build Path ;android studio的話需要單擊右鍵,選擇Add As Library…。

①國外下載地址:http://forum.xda-developers.com/xposed/xposed-api-changelog-developer-news-t2714067

②國內下載地址:http://download.csdn.net/detail/csdn_lqr/9607044

三、進入其他應用的程序

建立一個類,繼承IXposedHookLoadPackage類,覆寫handleLoadPackage方法,xposed的該方法在任何應用啟動時都會被呼叫,故可以進入任何應用程式的程序,但是一般只針對某個特定的應用,例如,只要進入qq的程序:

import de.robv.android.xposed.IXposedHookLoadPackage;
import
de.robv.android.xposed.XposedBridge; public class XposedInit implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { if (!loadPackageParam.packageName.contains("com.tencent.mobileqq")) return; XposedBridge.log("Loaded app: " + loadPackageParam.packageName); } }

XposedBridge.log根Log差不多,Log列印的語句會出現在控制檯,而XposedBridge.log的列印會輸出到xposed框架的啟動程式的日誌功能中,要除錯的話就要到xposed的日誌下檢視log輸出。

四、攔截某個方法

1、攔截com.tencent.mobileqq.app.message.QQMessageFacade類中的a方法,該方法有2個引數,型別分別是ArrayList、boolean。一般攔截用到的回撥物件是XC_MethodHook。

findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodHook() {
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        try {
            // 在原先方法執行之後要執行的邏輯程式碼
        } catch (Throwable t) {
            XposedBridge.log(t);
        }
    }
});
方法的攔截分執行前攔截(beforeHookedMethod)和執行後攔截(afterHookedMethod),顧名思義,一個是在方法執行前先執行我們自己的程式碼,一個是在方法執行後再執行我們自己的程式碼。

2、如果你根本不行讓原來的方法執行,那可以直接對方法的執行邏輯進行替換,回撥時使用XC_MethodReplacement物件進行處理即可。

findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodReplacement() {
    @Override
    protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
        try {
            // 直接替換原來要執行的邏輯程式碼
        } catch (Throwable t) {
            XposedBridge.log(t);
        }
    }
});
對於回撥過來的引數MethodHookParam param一般有以下2種用處:
param.args[0]:得到被攔截方法的第一個引數,返回值是Object
param.getResult():得到被攔截方法的執行結果,返回值是Object

五、指定模組的入口

一個模組可以有多個繼承IXposedHookLoadPackage的子類,所以要指定一個入口讓xposed去執行(指定兩個似乎也是可行的,未測試)。指定一個入口的步驟:
1、在assets目錄下新建一個名為xposed_init的檔案。
2、在xposed_init中寫入某個IXposedHookLoadPackage子類的完整類名,如:com.lqr.test.XposedInit。

六、執行

寫完程式碼之後,就要把模組執行看看效果了,把應用部署到手機後,必須要在xposed框架的“模組”功能中勾選該應用,之後需要重啟手機才可生效。

如果使用AndroidStudio的,要注意一下,如果遇到一些不可解釋的情況,可以先build出app後(Build-->Build APK),發給手機安裝,重灌勾選和重啟後再試試看。

相關推薦

xposed模組開發步驟總結

一、成為xposed模組 要成功xposed模組,被xposed識別,一般需要在清單檔案中標識該三個元資料(meta-data) <application android:name=".base.BaseApplication"

Xposed模組開發教程整理

Xposed模組開發教程 Xposed官網 Xposed官方文件 Xposed框架介紹 瞭解和使用Android神器Xposed框架 Xposed模組開發 Xposed模組開發入門 在手機狀態列增加顯示cpu溫度 Xposed模組編寫

Xposed模組開發學習記錄

Xposed模組相關API可以參考線上文件: https://api.xposed.info/reference/packages.html     入門教程可以參考: https://github.com/rovo89/XposedBridge/wiki/Using-the-Xpo

Xposed模組開發】用Android Studio開發第一個Xposed模組

最近打算學習Xposed模組的開發。Xposed框架是一款可以在不修改APK的情況下影響程式執行(修改系統)的框架服務,通過替換/system/bin/app_process程式控制zygote程序,使得app_process在啟動過程中會載入XposedBridge.jar

反編譯與xposed模組開發

需求描述:008神器生成的資料中,手機型號資料老舊並且android版本低於4.4無法滿足現有需求,需要更新手機型號資料並且擴充套件到更高的android版本。思路一:反編譯008神器並重新打包使用androidKiller反編譯008.apk,點選開啟連結思路二.實現一個修

Xposed模組開發入門教程

           前言:在高手如雲的XDA論壇上Xposed框架都被許多開發者譽為“安卓第一神器”。究竟是什麼神奇的能力讓它在眾多APP中脫引而出呢?本文將指引大家完成一個Xposed上最簡單的Demo,讓大家感受一下Xposed的能力。 一、手機環境 1.ROOT過的

Xposed模組開發教程(一) 瞭解並使用Xposed

1.前言: 前幾年 由XDA大神們開發的Xposed模組誕生,並開始逐漸佔據整個玩機市場,出現大量基於Xposed開發的模組 這個玩意可以堪稱 目前Android歷史上最強大的神級軟體, 我

Xposed模組開發

剛安卓逆向入門,認識到java hook的實用性後決定動手開發xp模組,不詳細介紹原理,大概百度一下會更有收穫,雖然關於模組開發的文章也不少,但是在自己動手開發時仍遇到一些問題,事無鉅細,決定寫一篇部落格記錄下來。 今天Xposed安卓7版本正式釋出,機友們有福了。 開發

23、【支付模組開發】——Java對接支付寶步驟(沙箱環境)

####1、下載匯入專案 https://docs.open.alipay.com/54/104506 開啟支付寶介面官網: 我們下載Java版Demo 下載之後解壓,然後我們用IDEA匯入這個Demo專案~ 然後,我們下載一個我們後面需要生成生成RSA金鑰的工具:https://d

嵌入式核心及驅動開發之學習筆記(五) 編寫字元驅動步驟總結

1,實現模組載入和解除安裝入口函式         module_init(chr_dev_init);         module_exit(chr_dev_exit);

Struts2學習總結(1)--基本原理,開發步驟,配置詳解

本文包括以下三個部分: 模擬Struts2框架,瞭解基本原理。Struts2的開發步驟。Struts2的配置詳解一、模擬Struts2框架,瞭解基本原理         在學習Struts2框架以前,我們一直採用servlet進行網站的開發。最開始是一個功能使用一個serv

Nginx 模組自主開發八: 總結 Nginx框架的流程

Nginx主框架的流程 當啟動Nginx程式時候,Nginx從入口函式Main()開始執行,檢查命令列引數和環境變數,初始化ngx_modules陣列,然後進入初始化函式ngx_init_cy

Xposed筆記(二)模組開發初試

【1】 目標程式:獨立的實時語音小程式 目標工程及目標類: AndroidManifest.xml檔案資訊: lpparam.packageName輸出: 問題:找不到目標類所在包 【2】 目標方法: android.media.AudioRecord類的re

Drupal 8 模組開發 及頁面無法顯示原因總結

自己建一個開發模組,Drupal試手 建立 具體教程網上都有,比較官方的是這兩個。 下面那個英文的,是官方的開發文件,中文的是對它的翻譯。 開發模組的時候,應該使用三個檔案,如下表藍色檔名。hello_world是建立的模組名,也是模組

Python flask模組介面開發學習總結

引言 Flask 是一個簡單且十分強大的Python web 框架。它被稱為微框架,“微”並不是意味著把整個Web應用放入到一個Python檔案,微框架中的“微”是指Flask旨在保持程式碼簡潔且易於擴充套件,Flask框架的主要特徵是核心構成比較簡單,但具有很強的擴充套件性和相容性,程式設計師可以使用Pyt

java_web項目開發經驗總結(一)

從數據 簡單 處理 開發 事務 傳輸 記錄 承載 基礎上   web項目就像一個動態的記事本,功能很強大,你最初的項目功能調研越給力,項目所能發揮的作用也就越給力。這是因為web網絡的強聯系性,大家都可以通過訪問到自己想要訪問的頁面,頁面裏既可以承載信息,也可以承載做事情的

最詳細的 Android Toolbar 開發實踐總結(轉)

activity resource listener nba flat xmlns mat https ons 轉自:http://www.codeceo.com/article/android-toolbar-develop.html 過年前發了一篇介紹 Transluc

多年iOS開發經驗總結

pla tostring 技術 draw zed 權限 provide cst gre 1、禁止手機睡眠 [UIApplication sharedApplication].idleTimerDisabled = YES; 2、隱藏某行cell - (CG

創建一個簡單項目的開發步驟

ges 技術 nbsp .cn 簡單 一個 技術分享 mage logs 創建一個簡單項目的開發步驟

iOS開發經驗總結

圓形 service selector prot 區域 location dsi layout tty 1、設置UILabel行間距 NSMutableAttributedString* attrString = [[NSMutableAttributedString