Xposed插件開發(fā)入門詳解
前言
Xposed的用處不必言說,能hook任意java寫的代碼,修改替換apk內(nèi)部的資源文件。
至于如何開發(fā)一個(gè)XPosed的插件,官方給出的答案如下:
https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
看完這篇文章,基本能寫出一個(gè)最簡單的demo。
現(xiàn)在先講講這個(gè)最簡單的demo怎么寫
1.先新建一個(gè)android project(推薦用android studio)
這個(gè)project不需要任何activity,相關(guān)的組件引用也可以刪光,這樣編譯后的apk就很小了。
2.修改項(xiàng)目的build.gradle
追加2個(gè)配置
repositories {
jcenter();
}
dependencies {
provided ‘de.robv.android.xposed:api:82'
}

3.修改AndroidManifest.xml 讓xposed能識別這個(gè)插件
正常情況下,xposed是無法識別我們的應(yīng)用是不是xposed插件的,我們必須在manifest上打上一個(gè)標(biāo)簽來聲明自己。
官方給的例子如下
<?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>
簡單的講,就是application配置段內(nèi)添加如下3個(gè)屬性就好了
<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" />
4.實(shí)現(xiàn)xposed的接口
空白的class如下
package cn.coderstory.xposeddemo;
public class Demo {
}
如果我們想要這個(gè)類有hook各種代碼的能力,我們需要讓這個(gè)類實(shí)現(xiàn)一些xposed框架提供的接口。
具體實(shí)現(xiàn)什么接口,需要看我們具體的需求。
常見的額接口如下
IXposedHookZygoteInit, IXposedHookLoadPackage, IXposedHookInitPackageResources 等
IXposedHookZygoteInit接口實(shí)現(xiàn)了ZygoteInit階段的hook能力,用于在Zygote進(jìn)程啟動之前執(zhí)行相關(guān)代碼,framework里的東西一般再這里改。
IXposedHookLoadPackage接口實(shí)現(xiàn)了加載app階段的hook能力,用于hook app的代碼
IXposedHookInitPackageResources接口實(shí)現(xiàn)了加載app資源時(shí)的hook能力,用于修改app的一些資源,比如布局文件什么的。

5.寫具體的代碼邏輯
現(xiàn)在我們寫一個(gè)功能,比如隱藏MIUI下拉菜單里面的搜索框
package cn.coderstory.xposeddemo;
import de.robv.android.xposed.IXposedHookInitPackageResources;
import de.robv.android.xposed.callbacks.XC_InitPackageResources;
/**
* Created by cc on 2017/1/3.
* 隱藏MIUI下拉菜單搜索框
*/
//IXposedHookInitPackageResources接口實(shí)現(xiàn)修改資源app的資源文件
public class Demo implements IXposedHookInitPackageResources{
@Override
public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) {
//如果當(dāng)前處理的是systemui
if (resparam.packageName.equals("com.android.systemui")) {
//調(diào)用setReplacement方法替換名為config_show_statusbar_search的變量值為false
resparam.res.setReplacement(resparam.packageName, "bool", "config_show_statusbar_search", false);
}
}
}
這樣,功能就寫好了。
6.創(chuàng)建和編輯xposed_init配置文件
接下來我們需要再項(xiàng)目里新建一個(gè)名為assets的目錄,然后在目錄里新建一個(gè)名為xposed_init的文件,文本類型的。
這個(gè)文件主要記錄了app里所有實(shí)現(xiàn)xposed功能的類,在開機(jī)的時(shí)候,xposed會依次加載這些類。
新建assets目錄

新建xposed_init文件,類型選擇Text

xposed_init里寫當(dāng)前類的路徑 如果存在多個(gè)類,那么每行寫一個(gè),多個(gè)寫多行

7.編譯安裝
編譯的時(shí)候需要關(guān)閉android studio的instant run 功能。
手機(jī)上安裝后 需要在xposed install上勾選啟用模塊并重啟。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android N 7.0中報(bào)錯(cuò):android.os.FileUriExposedException的解決方法
- Android webview 遇到android.os.FileUriExposedException錯(cuò)誤解決辦法
- Android基于Xposed修改微信運(yùn)動步數(shù)實(shí)例
- Android 7.0行為變更 FileUriExposedException解決方法
- Android中利用Xposed框架實(shí)現(xiàn)攔截系統(tǒng)方法
- Android中Xposed框架篇---修改系統(tǒng)位置信息實(shí)現(xiàn)自身隱藏功能實(shí)例
相關(guān)文章
談?wù)剬ndroid View事件分發(fā)機(jī)制的理解
本篇文章主要介紹了談?wù)剬ndroid View事件分發(fā)機(jī)制的理解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
Ubuntu Android源碼以及內(nèi)核下載與編譯
本文主要介紹Android源碼的下載和編譯,這里整理了相關(guān)資料及如何下載和編譯的詳細(xì)步驟,有需要的小伙伴可以參考下2016-09-09
Android ListView中headerview的動態(tài)顯示和隱藏的實(shí)現(xiàn)方法
這篇文章主要介紹了Android ListView中headerview的動態(tài)顯示和隱藏的實(shí)現(xiàn)方法的相關(guān)資料,這里提供兩種方法幫助實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08
Android進(jìn)階之從IO到NIO的模型機(jī)制演進(jìn)
這篇文章主要為大家介紹了Android進(jìn)階之從IO到NIO的模型機(jī)制演進(jìn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android編程實(shí)現(xiàn)3D滑動旋轉(zhuǎn)效果的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)3D滑動旋轉(zhuǎn)效果的方法,主要通過繼承Animation自定義Rotate3D來實(shí)現(xiàn)3D翻頁效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

