Xposed插件開發(fā)入門詳解
前言
Xposed的用處不必言說,能hook任意java寫的代碼,修改替換apk內部的資源文件。
至于如何開發(fā)一個XPosed的插件,官方給出的答案如下:
https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
看完這篇文章,基本能寫出一個最簡單的demo。
現在先講講這個最簡單的demo怎么寫
1.先新建一個android project(推薦用android studio)
這個project不需要任何activity,相關的組件引用也可以刪光,這樣編譯后的apk就很小了。
2.修改項目的build.gradle
追加2個配置
repositories { jcenter(); }
dependencies { provided ‘de.robv.android.xposed:api:82' }
3.修改AndroidManifest.xml 讓xposed能識別這個插件
正常情況下,xposed是無法識別我們的應用是不是xposed插件的,我們必須在manifest上打上一個標簽來聲明自己。
官方給的例子如下
<?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配置段內添加如下3個屬性就好了
<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.實現xposed的接口
空白的class如下
package cn.coderstory.xposeddemo; public class Demo { }
如果我們想要這個類有hook各種代碼的能力,我們需要讓這個類實現一些xposed框架提供的接口。
具體實現什么接口,需要看我們具體的需求。
常見的額接口如下
IXposedHookZygoteInit, IXposedHookLoadPackage, IXposedHookInitPackageResources
等
IXposedHookZygoteInit接口實現了ZygoteInit階段的hook能力,用于在Zygote進程啟動之前執(zhí)行相關代碼,framework里的東西一般再這里改。
IXposedHookLoadPackage接口實現了加載app階段的hook能力,用于hook app的代碼
IXposedHookInitPackageResources接口實現了加載app資源時的hook能力,用于修改app的一些資源,比如布局文件什么的。
5.寫具體的代碼邏輯
現在我們寫一個功能,比如隱藏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接口實現修改資源app的資源文件 public class Demo implements IXposedHookInitPackageResources{ @Override public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) { //如果當前處理的是systemui if (resparam.packageName.equals("com.android.systemui")) { //調用setReplacement方法替換名為config_show_statusbar_search的變量值為false resparam.res.setReplacement(resparam.packageName, "bool", "config_show_statusbar_search", false); } } }
這樣,功能就寫好了。
6.創(chuàng)建和編輯xposed_init配置文件
接下來我們需要再項目里新建一個名為assets的目錄,然后在目錄里新建一個名為xposed_init的文件,文本類型的。
這個文件主要記錄了app里所有實現xposed功能的類,在開機的時候,xposed會依次加載這些類。
新建assets目錄
新建xposed_init文件,類型選擇Text
xposed_init里寫當前類的路徑 如果存在多個類,那么每行寫一個,多個寫多行
7.編譯安裝
編譯的時候需要關閉android studio的instant run 功能。
手機上安裝后 需要在xposed install上勾選啟用模塊并重啟。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android 實現不依賴焦點和選中的TextView跑馬燈
本文主要介紹Android 跑馬燈的實現,這里提供實現詳細實現代碼供大家參考,有需要的小伙伴可以看下2016-07-07android系統(tǒng)按鍵音framework流程源碼詳細解析
這篇文章主要為大家詳細介紹了android系統(tǒng)按鍵音framework流程源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08Android編程使用WebView實現文件下載功能的兩種方法
這篇文章主要介紹了Android編程使用WebView實現文件下載功能的兩種方法,涉及Android基于WebView的相關文件傳輸與線程操作技巧,需要的朋友可以參考下2018-02-02