[转载] Android Studio 上第一个 Xposed 模块

本文转载自: http://www.open-open.com/lib/view/open1451364108964.html

环境:

已root手机一枚

Android Studio一枚

官方文档参考 这里 .

准备工作

我们需要事先下载一个 Xposed installer 安装在手机上,用来管理所有的模块.

安装完成后打开:

点击 框架 ,

点击 安装/更新 安装框架,

点击确定重启,框架界面是这样的:

编写新模块

打开android studio,新建工程,选择 Add no activity

新建完成后,找到 app 目录下的 build.gradle 文件,将 dependencies 中的

compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])

改为:

provided fileTree(dir: ‘libs‘, include: [‘*.jar‘])

下载 XposedBridgeApi-54.jar 并放入app目录下的libs文件夹.

在 AndroidManifest.xml 文件的 application 中添加如下代码,其中的54是前面下载的文件中的号码.

<meta-data
    android:name="xposedmodule"
    android:value="true" />
<meta-data
    android:name="xposeddescription"
    android:value="kiya‘s test module" />
<meta-data
    android:name="xposedminversion"
    android:value="54" />

新建一个 Test 类,写入:

package space.kiya.xposedtest;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class Test implements IXposedHookLoadPackage{
    @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        XposedBridge.log("loaded: " + loadPackageParam.packageName);
    }
}

新建 assets 文件夹,在里面新建文件名为 xposed_init ,写入刚刚的类名,此处应为 space.kiya.xposedtest.Test .

这时就可以编译安装了.

测试

因为工程没有activity,所以在桌面上看不到该应用。

来到 xposed installer 的 模块 中,可以看到我们的模块出现在这里,现在勾选它:

在重启使之生效之前,我们在logcat新建一个tag为 Xposed 的过滤器,这样就可以过滤出模块输出的log.

大概是这样的:

Loading Xposed v54(for Zygote)...
Loading modules from /data/app/space.kiya.xposedtest-1.apk
  Loading class space.kiya.xposedtest.Test
Loaded: android
...

这样的日志在 xposed installer 的 日志 中也是可以看到的.

如果log中出现了错误:

java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

说明是前面步骤中没有修改 build.gradle 导致的.

xposed怎样工作?

开机时, ./init.rc 脚本文件会启动 Zygote 进程,Zygote对应的具体程序是 /system/bin/app_process ,然后加载需要的类,调用初始化的方法,之后启动的每个应用都是Zygote的拷贝,所以Zygote进程是十分重要的.

通过在类路径中添加一个jar包,在 app_process 的特定位置调用jar包中的方法,Xposed框架实现了带扩展功能的 app_process ,然后将原有的 app_process 替换掉.

在 /data/data/de.robv.android.xposed.installer/bin/ 目录下有一个 XposedBridge.jar 文件,它就是被引用的jar包,源码在 github ,main函数在 /src/de/robv/android/xposed/XposedBridge.java 中,每个进程每次启动时都会被调用.加载模块的功能也是在这里实现.

Xposed真正强大的是它可以hook调用的方法.当你反编译修改apk时,你可以在里面插入xposed的命令,于是你就可以在方法调用前后注入自己的代码.

XposedBridge有一个私有的本地方法 hookMethodNative ,代码实现放在 app_process 中.在调用被hook的方法前会先调用此方法, hookMethodNative 有一个 handleHookedMethod 方法,可以修改传递给被hook函数的参数,变量甚至是调用其他方法.

时间: 2024-08-09 14:48:32

[转载] Android Studio 上第一个 Xposed 模块的相关文章

Android Studio上Session &#39;app&#39;: Error Installing APK错误解决方案

我在使用Android Studio的时候,使用自己的魅族(M5 Note)真机调试,运行不成功,提示下面图片中的错误(Session 'app':Error Installing APK). 再经过测试过好几种网上的方法之后,特记录如下,望以后大家少走弯路,希望可以帮助到大家. 可能不同的人使用到的方法都会是下面的不同的方法: 1)连接手机之后,会有显示手机的SDK型号以及API的版本,显示我自己的是魅族M5 Note(Android 6,API23),在我的手机上安装不上,刚开始有人说魅族手

如何在Android Studio上使用Github

首先,登陆到Github上并创建一个新repository.在屏幕右上角,点击"+"标记,并且选择"New repository". 现在完成这个表格以新建一个叫做testproject的新repository,让这个repository自动初始化并带上REDEME文件. 接下来,打开Android Studio并且创建一个名为TestProject的新项目,点击"Next"进行下一步. 下一页直接设为默认,并且继续点击"Next&qu

Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny

首先提下ButterKnifey已经更新到版本7.0.0了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this); 变成了 ButterKnife.bind(this); 关于7.0.0的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页: http://jakewharton.github.io/butterknife/ 言归正传开始说说Android Butte

Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Z

首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this); 变成了 ButterKnife.bind(this); 关于7.0.1的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页: http://jakewharton.github.io/butterknife/ 言归正传开始说说Android Butte

Android studio中为项目添加模块依赖的过程

https://blog.csdn.net/cheng__lu/article/details/74574582 Android studio中为项目添加模块依赖的过程 1.点击菜单file>project structure或者点击工具栏中倒数第三个图标project structure. 2.打开project structure后,在modules中选中一个项目,点击“Dependencies”窗口后,进行点击添加按钮“+”,再点击Module dependency 3.选择”mylibr

Android Studio上git的使用

1. 要想在Android Studio上使用git , 首先需要配置好git ,请看上一篇http://www.cnblogs.com/BoBoMEe/p/4296385.html 2. 需要在android Studio上设置git.EXE的路径,File ->Settings –>Version Control –>git –>选择git.EXE的路径.apply 3. 在Android Studio的主界面上菜单栏 ,选择VCS –> Enable Version C

超快模拟器genymotion在android studio上的安装

Android studio 自带的模拟器太慢了,下面介绍genymotion安装,电脑是win7 (1)进入https://www.genymotion.com (2)注册,必须注册才能下载,后期也用到账号,所以拷贝别人的安装包没用 (3)点击,getgenymotion,进入选择free下面的download,免费版本少了些功能,但凑活用. (4)选择pc系统,默认进入win界面,注意:win挺简单,只要点击Get Genymotion,下载包中包含VirtualBox,而mac版本就不包含

打造你的开发神器——介绍Android Studio上的几个插件

这个月因为各种事情在忙,包括赶项目,回老家,还有准备旅游的事,所以应该写不了四篇博客了.今天介绍一下关于Android Studio 的几个好用的插件,都是我在用的,它们或能帮你节省时间,或者让你心情愉悦. 还是老话,本文原创,转载请注明在CSDN博客上的出处: http://blog.csdn.net/maosidiaoxian/article/details/44992655 以下所有插件都可以在Idea的插件库中找到,如果你与我一样在Android Studio中无法搜索到任何插件的话,可

转载-android studio 各种问题

android studio 各种问题 1.dexDebug ExecException finished with non-zero exit value 2 全bug日志如下: (Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'comman