本帖最后由 有梦想的小草 于 2019-1-9 00:25 编辑
经过今天一天的学习,结合网络上许多牛人的分享,初次了解到Xposed的构建方法,特此记录与分享。
进行一个Xposed模块编写,必须的,也是首要的是要搭建一个Xposed开发环境(我们暂且称之为开发环境吧),简单来说就是迁移Xposed框架API到我们的项目并把我们的入口暴露给Xposed框架。
目录视图:
环境搭建分为以下几步:
1.下载 api-82-sources.jar api-82.jar 两个XposedAPI jar包
地址:https://dl.bintray.com/rovo89/de.robv.android.xposed/de/robv/android/xposed/api/82/api-82-sources.jar
https://dl.bintray.com/rovo89/de.robv.android.xposed/de/robv/android/xposed/api/82/api-82.jar
将这两个文件放入 ./app/libs 目录下,以后调用API需要从这两个文件中调用,如上图目录所示。
2.在 ./app 文件上右键新建 assets类型文件夹 并在其中添加xposed_init 文件 , 这个文件里的内容是指向我们hook类 的位置,xposed框架从这个文件读取入口地址,如下。
[Java] 纯文本查看 复制代码 com.example.administrator.myxposed.XModule
3.新建 类 XModule 为我们的hook类,并在这个类里重写和实现我们的hook函数代码,如下。
[Java] 纯文本查看 复制代码 public class XModule implements IXposedHookLoadPackage {
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (loadPackageParam.packageName.equals("com.example.administrator.myapplication")) {
Class clazz = loadPackageParam.classLoader.loadClass("com.example.administrator.myapplication.MainActivity");
XposedHelpers.findAndHookMethod(clazz, "toastMessage", new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult("你已被劫持");
}
});
}
}
}
4.在Manifest.xml 的application标签中添加标识,让Xposed识别和在列表中显示,如下代码可供参考。
[Java] 纯文本查看 复制代码 <meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="模块描述" />
<meta-data
android:name="xposedminversion"
android:value="54" />
5.修改build.gradle文件,dependencies中做如下修改:
[Java] 纯文本查看 复制代码 dependencies {
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
provided fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.+'
testCompile 'junit:junit:4.12'
}
至此,Xposed代码就已书写完毕。
以下贴出 hook demo的 MainActivity 代码以供参考:
[Java] 纯文本查看 复制代码 public class MainActivity extends AppCompatActivity {
private Button button;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, toastMessage(), Toast.LENGTH_SHORT).show();
}
});
}
public String toastMessage() {
return "我未被劫持";
}
}
效果截图:
1.未劫持app运行:
2.Xposed hook后运行:
3.Xposed模块列表
【注意】按照图示设置 file->settings,否则hook不成功:
|