溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么開(kāi)發(fā)入門(mén)Xposed插件

發(fā)布時(shí)間:2021-10-13 11:32:50 來(lái)源:億速云 閱讀:145 作者:柒染 欄目:編程語(yǔ)言

本篇文章為大家展示了怎么開(kāi)發(fā)入門(mén)Xposed插件,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

前言

Xposed的用處不必言說(shuō),能hook任意java寫(xiě)的代碼,修改替換apk內(nèi)部的資源文件。

至于如何開(kāi)發(fā)一個(gè)XPosed的插件,官方給出的答案如下:

https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

看完這篇文章,基本能寫(xiě)出一個(gè)最簡(jiǎn)單的demo。

現(xiàn)在先講講這個(gè)最簡(jiǎn)單的demo怎么寫(xiě)

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能識(shí)別這個(gè)插件

正常情況下,xposed是無(wú)法識(shí)別我們的應(yīng)用是不是xposed插件的,我們必須在manifest上打上一個(gè)標(biāo)簽來(lái)聲明自己。官方給的例子如下

<?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>

簡(jiǎn)單的講,就是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)什么接口,需要看我們具體的需求。

常見(jiàn)的額接口如下

IXposedHookZygoteInit, IXposedHookLoadPackage, IXposedHookInitPackageResources

IXposedHookZygoteInit接口實(shí)現(xiàn)了ZygoteInit階段的hook能力,用于在Zygote進(jìn)程啟動(dòng)之前執(zhí)行相關(guān)代碼,framework里的東西一般再這里改。

IXposedHookLoadPackage接口實(shí)現(xiàn)了加載app階段的hook能力,用于hook app的代碼

IXposedHookInitPackageResources接口實(shí)現(xiàn)了加載app資源時(shí)的hook能力,用于修改app的一些資源,比如布局文件什么的。

5.寫(xiě)具體的代碼邏輯

現(xiàn)在我們寫(xiě)一個(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); } }}

這樣,功能就寫(xiě)好了。

6.創(chuàng)建和編輯xposed_init配置文件

接下來(lái)我們需要再項(xiàng)目里新建一個(gè)名為assets的目錄,然后在目錄里新建一個(gè)名為xposed_init的文件,文本類型的。這個(gè)文件主要記錄了app里所有實(shí)現(xiàn)xposed功能的類,在開(kāi)機(jī)的時(shí)候,xposed會(huì)依次加載這些類。

新建assets目錄

新建xposed_init文件,類型選擇Text

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

7.編譯安裝

編譯的時(shí)候需要關(guān)閉android studio的instant run 功能。

手機(jī)上安裝后 需要在xposed install上勾選啟用模塊并重啟。

上述內(nèi)容就是怎么開(kāi)發(fā)入門(mén)Xposed插件,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI