最新的Xposed模块编写教程
前言:最近看了很多的Xposed的入门教程,根据的我的实践,写此教程,希望对新手有所帮助。
1.编写一个被Hook的App.代码
1 package com.example.hookdemo; 2 3 import android.os.Bundle; 4 import android.support.design.widget.FloatingActionButton; 5 import android.support.design.widget.Snackbar; 6 import android.support.v7.app.AppCompatActivity; 7 import android.support.v7.widget.Toolbar; 8 import android.view.View; 9 import android.view.Menu; 10 import android.view.MenuItem; 11 import android.widget.TextView; 12 13 public class MainActivity extends AppCompatActivity { 14 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 Toolbar toolbar = findViewById(R.id.toolbar); 20 setSupportActionBar(toolbar); 21 22 final TextView tv = findViewById(R.id.tv_hook); 23 24 FloatingActionButton fab = findViewById(R.id.fab); 25 fab.setOnClickListener(new View.OnClickListener() { 26 @Override 27 public void onClick(View view) { 28 tv.setText(sRes()); 29 } 30 }); 31 } 32 33 String sRes() { 34 return "你未被劫持"; 35 } 36 }
运行效果如下。
2.配置 xposed 文件
此处我们用的到是Xposed Android 4.0.3 to Android 4.4 的版本。
1) 安装Xposed 到真机/虚拟机里
adb install E:\APK\xposed4.0-4.4.apk
2)新建一个Android 安卓工程,写Xposed插件。
在AndroidMainfest.xml 文件中增加如下代码
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="这是一个Xposed模块" />
<meta-data
android:name="xposedminversion"
android:value="54" />
在app/src/build.gradle 文件下添加以下代码, compileOnly 'de.robv.android.xposed:api:82:sources' 可添可不添,其作用是查看文档。
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
添加完之后点击一下 sync project with Gradle file(按照Gradle文件同步引用库),作用是把Xposed "de.robv.android.xposed:api:82","de.robv.android.xposed:api:82:sources"用到的jar包同步project中
编写Xposed插件代码,新建一个java类
java类代码:
1 package com.example.myapplication; 2 3 4 import de.robv.android.xposed.IXposedHookLoadPackage; 5 import de.robv.android.xposed.XC_MethodHook; 6 import de.robv.android.xposed.XposedBridge; 7 import de.robv.android.xposed.XposedHelpers; 8 import de.robv.android.xposed.callbacks.XC_LoadPackage; 9 10 public class HookDemo implements IXposedHookLoadPackage { 11 12 13 @Override 14 public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { 15 16 17 if (lpparam.packageName.equals("com.example.hookdemo")) 18 { 19 XposedBridge.log(" HOOK Test"); 20 21 Class clazz=lpparam.classLoader.loadClass("com.example.hookdemo.MainActivity"); 22 23 XposedHelpers.findAndHookMethod(clazz, "sRes", new XC_MethodHook() { 24 @Override 25 protected void afterHookedMethod(MethodHookParam param) throws Throwable { 26 super.afterHookedMethod(param); 27 28 param.setResult("你已被劫持"); 29 30 } 31 }); 32 33 34 } 35 36 } 37 }
在app/src/main 新建Assets Folder
创建xposed_init 文件
xposed_init内容如下:
com.example.myapplication.HookDemo
填写Xposed的入口类的完整类名。
配置到此结束 。
3。安装到真机/虚拟机