最新的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。安装到真机/虚拟机

 

posted @ 2019-07-26 16:06  曲完丶人终散  阅读(3541)  评论(0编辑  收藏  举报