编写第一个Xposed模块

1.创建项目

在创建项目时,选择一个有MainActivity的项目,要是注册空项目还要自己去注册入口activity

2.添加Xposed提供的jar到lib目录

3.修改build.gradle

只编译这两个

compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'

不能参与打包APK,否则安到手机上XP框架会报错
(Gradle的语法要学习一下)

而且,//implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
最好注释掉,详见https://blog.csdn.net/OneT1me/article/details/93968206
编译打包成APK在测试机上运行成功!

4.定义MainActivity

代码:

MainActivity.java
package com.javahk.hookdemo;import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;import android.os.Bundle;public class MainActivity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv=findViewById(R.id.tv);tv.setText("hello!");}
}

5.定义XposedInit(钩子方法)

XposedInit.java
这里有一个小问题,在setText()这里写入英文字符会报出个警告,还没有解决。

package com.javahk.hookdemo;import android.os.Bundle;
import android.widget.TextView;import java.lang.reflect.Field;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;public class XposedInit implements IXposedHookLoadPackage{@Overridepublic void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable{if(lpparam.packageName.equals("com.javahk.hookdemo")){XposedHelpers.findAndHookMethod("com.javahk.hookdemo.MainActivity",lpparam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {Class c=lpparam.classLoader.loadClass("com.javahk.hookdemo.MainActivity");Field field=c.getDeclaredField("tv");field.setAccessible(true);XposedBridge.log("Test");TextView tv=(TextView)field.get(param.thisObject);tv.setText("!!!!!");}});}}
}

6.AndroidManifest.xml

这个文件主要要配置几个<meta>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.javahk.hookdemo"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><meta-dataandroid:name="xposedmodule"android:value="true" /><meta-dataandroid:name="xposeddescription"android:value="Hook log test" /><meta-dataandroid:name="xposedminversion"android:value="82" /><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

activity_main.xml
布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="TextView"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

(Xposed)编写第一个Xposed模块相关推荐

  1. android+xposed+实例,Android Studio 上第一个 Xposed 模块(示例代码)

    环境: 已root手机一枚 Android Studio一枚 官方文档参考 这里 . 准备工作 我们需要事先下载一个 Xposed installer 安装在手机上,用来管理所有的模块. 安装完成后打 ...

  2. xposed 配置如何传入指定模块(ContentProvider)

    当我们编写有界面的xposed模块时,我们所给用户提供了可以配置的数据,但是配置的界面是在当前进程,而执行的hook代码在另外一个进程,那么怎么传递这些数据呢? 根据研究有如下三个方法 1.XShar ...

  3. [1035]xposed框架未安装xposed模块未激活怎么办(Could not load available ZIP files.Pull down to try again)

    文章目录 xposed框架未安装xposed模块未激活 Could not load available ZIP files.Pull down to try again 前言 步骤说明 注意点 雷电 ...

  4. 安卓逆向_22( 一 ) --- Xposed【 Android Studio + Xposed 实现简单的 hook 】

    From:使用渗透测试框架 Xposed 框架 hook 调试 Android APP:https://www.freebuf.com/articles/terminal/56453.html Xpo ...

  5. android8 检测xposed,Xposed检测与自定义Xposed

    Xposed检测与自定义Xposed 前言: Xposed检测 1.遍历App安装列表检测 2.自造异常检测堆栈信息. 3.检查关键Java方法是否变为native方法 4.反射XposedHelpe ...

  6. 如何在React Native中写一个自定义模块

    前言 在 React Native 项目中可以看到 node_modules 文件夹,这是存放 node 模块的地方,Node.js 的包管理器 npm 是全球最大的开源库生态系统.提到npm,一般指 ...

  7. Xposed源码剖析——Xposed初始化

    承接上文 http://blog.csdn.net/yzzst/article/details/47829657 之前我们看过了app_main.cpp源码,知道了在其中,启动了XposedBridg ...

  8. 编写Play 2的模块,第1部分:使工作正常

    几周前,我迁移了Play! 框架 1.x版本的Deadbolt应用于Play 2平台,并且对缺少有关创建模块的信息感到惊讶. Play 1.x文档中详细介绍了该主题,这使得创建模块非常简单. 显然,需 ...

  9. 如何在 React Native 中写一个自定义模块

    前言 在 React Native 项目中可以看到 node_modules 文件夹,这是存放 node 模块的地方,Node.js 的包管理器 npm 是全球最大的开源库生态系统.提到npm,一般指 ...

最新文章

  1. 算法笔记-链相关、链的基础、单链双链环链、链的各种功能实现、链的算法题、面试题以及算法优化方法(多)、C#
  2. Apache Shiro教程
  3. JAVA多线程机制之死锁
  4. MvvmLight:Command
  5. android服务器 性能,Android性能优化(中)
  6. java api csdn_java api函数读出当前机器名以及版本号 csdn
  7. 2019量子计算机上市公司,2019年第一炮:量子计算机终于来了!
  8. bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压)
  9. ugp和千幻魔镜买哪个好_美的空调和格力空调哪个好?这两个牌子您会买哪个?...
  10. Oracle管理存储架构(二)--Oracle管理数据块空间
  11. [专题练习] Part1 搜索
  12. 转臂式多芯自清洗过滤器
  13. 计算机二级刷题库刷的到原题吗,刷题能过计算机二级吗?
  14. 液晶屏控制器方案LT7680A
  15. Clouda聊天室实践
  16. iOS — 百度地图 使用
  17. 计算机组成原理画出CPU与主存及3-8译码器之间信号线的连接问题
  18. 在Kubernetes上安装Netdata的方法
  19. google的fav icon变了
  20. js 判断一个数是正数、负数、零或其他 正数转变成负数 负数转变成正数

热门文章

  1. linux界面安装weblogic12c,Linux安装WebLogic12c
  2. 微信公众号开发实战 | 01:环境配置
  3. 网络表示学习简单总结(一)
  4. 2019一键清空朋友圈_新整理再见2019你好2020朋友圈励志说说
  5. 【java】java intellij idea 破解
  6. 获取星期--蔡勒公式
  7. 移动终端软件高级开发技术------- 记账本
  8. java飞机大战--点到点分解
  9. 深大uooc学术道德与学术规范教育第六章
  10. 联想拯救者突然连不上网怎么办