xposed出來已經很久了,一直也沒去了解,今天抽時間學了一下,寫了一個demo,分享出來給自己以後看
現在基本都是用的as開發了,直接在app的gradle下面加這行代碼:
provided 'de.robv.android.xposed:api:82'
很多部落格裡說要把
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXzkEVPNTW65ENJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jMwkzN0IzM2EjMxkDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
改成 provided,其實不用,另外現在的xposed已經不用root和機器重新開機了,軟體内部啟動就好
manifest裡的application标簽下加上:
<meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposeddescription" android:value="我是一個Xposed例程" /> <meta-data android:name="xposedminversion" android:value="53" />
先建立一個項目,裡面有一個TextView和Button:
package com.example.administrator.xposeddemo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = findViewById(R.id.btn); final TextView tv = findViewById(R.id.tv); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tv.setText(getString()); } }); } private String getString() { return "原本的點選事件"; } }
再建一個ClickEvent的類
package com.example.administrator.xposeddemo; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; public class ClickEvent implements IXposedHookLoadPackage{ @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { if (loadPackageParam.packageName.equals("com.example.administrator.xposeddemo")) { Class clazz = loadPackageParam.classLoader.loadClass("com.example.administrator.xposeddemo.MainActivity"); XposedHelpers.findAndHookMethod(clazz, "getString", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { param.setResult("由xposed傳來的點選事件"); } }); } } }
裡面的方法懂jni的朋友應該是看的很清楚的,希望達到的目的就是把點選事件顯示的文字由"原本的點選事件"變為"由xposed傳來的點選事件"
然後在assets檔案夾裡建立一個file,在這裡我取名為xposed_init
裡面的東西隻需要一行代碼,那就是ClickEvent的包名和類名,如下:
現在我們就能直接把程式跑到機器上了,記得把instant Run關掉,雖然不知道有沒有必要,但是這個和retrofit會有沖突,是以開發中我一直是關的
現在開始測試我們的項目,點選出現“原本的點選事件” ,ok
然後打開xposed子產品,發現XposedDemo已經在裡面了,後面的複選框選中
然後把xposed架構重新開機看看
看起來是成功了