基於Eclipse Xposed模塊開發

0x01 xposed hook原理html

0x02 建立Android工程android

0x03 引入Xposed-Framework-APIgit

在Android項目中新建一個lib文件夾,將api-82-sources.jar、api-82.jar放入該文件夾中;右鍵api-xx.jar文件 api-XX.jar 選擇Build Path -> Add to Build Pathgithub

API下載:https://jcenter.bintray.com/de/robv/android/xposed/api/api

參考:https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-APIapp

0x04 修改AndroidManifest.xml框架

在Application標籤中按以下添加3個meta-data標籤,xposedminversion 根據上一步導入api版本號來寫ide

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.robv.android.xposed.mods.tutorial"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <meta-data
            android:name="xposeddescription"
            android:value="Easy example which makes the status bar clock red and adds a smiley" />
        <meta-data
            android:name="xposedminversion"
            android:value="53" />
    </application>
</manifest>

0x05 編寫入口類post

建立一個類,繼承IXposedHookLoadPackage類,覆寫handleLoadPackage方法,xposed的該方法在任何應用啓動時都會被調用,故能夠進入任何應用程序的進程,可是通常只針對某個特定的應用測試

 1 package com.example.hooktest;
 2 
 3 import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
 4 import android.graphics.Color;
 5 import android.widget.TextView;
 6 import de.robv.android.xposed.IXposedHookLoadPackage;
 7 import de.robv.android.xposed.XC_MethodHook;
 8 import de.robv.android.xposed.XposedBridge;
 9 import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
10 
11 public class Hook implements IXposedHookLoadPackage {
12     public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
13         if (!lpparam.packageName.equals("com.android.systemui"))
14             return;
15         XposedBridge.log("Loaded app: " + lpparam.packageName);
16         
17         findAndHookMethod("com.android.systemui.statusbar.policy.Clock", lpparam.classLoader, "updateClock", new XC_MethodHook() {
18             @Override
19             protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
20                 // this will be called before the clock was updated by the original method
21             }
22             @Override
23             protected void afterHookedMethod(MethodHookParam param) throws Throwable {
24                 TextView tv = (TextView) param.thisObject;
25                 String text = tv.getText().toString();
26                 tv.setText(text + " :)");
27                 tv.setTextColor(Color.RED);
28             }
29         });
30     }
31 }
View Code

 XposedBridge.log根Log差很少,Log打印的語句會出如今控制檯,而XposedBridge.log的打印會輸出到xposed框架的啓動程序的日誌功能中,要調試的話就要到xposed的日誌下查看log輸出

也能夠用 android.util.Log輸出到logcat

0x06 指定模塊入口

一個模塊能夠有多個繼承IXposedHookLoadPackage的子類,因此要指定一個入口讓xposed去執行(指定兩個彷佛也是可行的,未測試)。指定一個入口的步驟:
一、在assets目錄下新建一個名爲xposed_init的文件。
二、在xposed_init中寫入某個IXposedHookLoadPackage子類的完整類名

 

參考文章:

xposed官方開發指南  https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

基於xposed框架的demo   https://blog.csdn.net/zhangmiaoping23/article/details/53229565

xposed隨心所欲  https://juejin.im/post/5ad9886df265da0b776f3dcb

xposed模塊開發步驟總結  https://blog.csdn.net/csdn_lqr/article/details/52245132

相關文章
相關標籤/搜索