XPosed项目的接入、模版制作、改名全过程
写在前面
之前写过这篇Xposed Hook 过登录密码验证配置开发Xposed项目的文章,这次的接入使用的是当前最新版Android Studio
,接入稍微有些差别,也记录下。
本篇文章主要是写关于
XP项目接入
、制作XP模版项目
、XP模版项目改名
,制作干净的模版项目,后续再开发项目时可重复利用,省事又省力!
Android Studio版本:Android Studio Jellyfish | 2023.3.1 Patch 1
Build #AI-233.14808.21.2331.11842104, built on May 15, 2024
XP项目接入
创建界面
创建No Activety
Android 项目, Minimum SDK
选择 API 24:Android 7.0
这代表支持最小支持7.0版本,可以根据自己需要调整,并在 AndroidManifest.xml
中添加以下相关配置,如下图所示:
<application
。。。。。。
<!--识别是否是Xposed模块-->
<meta-data
android:name="xposedmodule"
android:value="true" />
<!--xposed 模块描述-->
<meta-data
android:name="xposeddescription"
android:value="这里可以写给用户看的模块描述!" />
<!--xposed 支持最小版本-->
<meta-data
android:name="xposedminversion"
android:value="24" />
</application>
引入配置
在app/build.gradle
中添加xposed包
,若不想让其报黄可按下图所示点击,将其加入到gradle/libs.versions.toml
中即可!
compileOnly ‘de.robv.android.xposed:api:82’ // compileOnly 表示编译时不一起编译进apk
切换为项目
然后在main
下创建assets
目录,并设置为资源文件夹
,再创建xposed_init
文件(文件类型为txt)
流程:main
→ 右键new
→ Folder
→ Assets Folder
→ Finish
→ 在xposed_init
文件中添加入口函数类
// 包名.类名
com.yrj.dy.Hook // 可以有多个,以换行符为分割,这里Hook为入口函数类。
在settings.gradle
中添加 maven { url 'https://api.xposed.info/' }
代码编译
在java
目录的包名下创建Hook
类, 其中定义
package com.yrj.dy;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class Hook implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
String PN = lpparam.packageName;//获取被Hook的软件包名
switch (PN) {
//软件名称
case "软件包名":
XposedBridge.log("软件的包名是: " + PN); //打印软件的包名
findAndHookMethod("要Hook的包名+类名",//
lpparam.classLoader,
"要Hook的方法名",
String.class,//要Hook的方法参数类型
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//Hook函数之前执行的代码
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//Hook函数之后执行的代码
XposedBridge.log(PN + ":已Hook");
}
}
);
break;
//软件名称
case "软件包名1":
XposedBridge.log("软件的包名是: " + PN);
break;
//软件名称
case "软件包名2":
XposedBridge.log("软件的包名是: " + PN);
break;
default:
XposedBridge.log("当不存在时默认: " + "未Hook");
break;
}
}
}
编译但不安装:build
→ Build App Bundle(s) / APK(s)
→ Build APK(s)
,也可运行Dubug模式让其安装到手机上,并激活模块试用即可!
XP模版项目
删除多余内容
在上方
XP项目接入
的基础上,删除一些项目中多余的无用的引入、资源,添加一些资源优化、安全相关配置等等,可在后续打包时减少软件包大小以及提高软件包的安全性等!
删除测试相关引入:
删除图标相关资源:
配置混淆优化
配置签名验证
这里我就不详细写了,直接查下自己软件签名的SHA-1值搞个Hash,在Oncreate下搞几行代码获取软件的签名Hash与其对比,相等的话就正常进入软件,否则就直接杀死软件退出即可!可简单防止别人对其软件进行反编译后再回编译签名的操作。
XP项目改名
经过上方
XP项目接入
和XP模版项目
创建好的模版项目后,这时就需要修改模版项目名称,修改前记得备份一份模版项目文件,后续可再重复利用!
本文方法仅适用于Android Studio 4.0及以上的版本;若Android Studio版本小于4.0,通过以下修改后,需要另外修改项目中的~/.idea/modules.xml文件、AndroidManifest.xml这些文件才行。
Android Studio版本:Android Studio Jellyfish | 2023.3.1 Patch 1
Build #AI-233.14808.21.2331.11842104, built on May 15, 2024
文件夹改名
找到项目存放的位置,我的项目路径是在D:\softProject\AndroidStudioProject\
目录下,将项目名称修改成新的项目名。
例如:将XP模版项目XPModel
改为dy
,然后打开Android Studio
,打开修改名称之后的dy
项目即可!
修改项目名
打开项目根目录下的settings.gradle
文件,修改文件中的rootProject.name="新项目名"
,改为dy
,如下图所示:
修改包名
默认情况下,包名在AndroidStudio
中显示是合在一起的,这时只能修改包名的最后一个部分,不能全部修改,不然可能会出现小问题。
需要去取消Compact Middle Packages(压缩空的中间软件包)
打勾,然后单独选择需要修改的包名,对其重构
→重命名
即可!如下图所示:
点击Refactor(重构)
→重命名
后,填入dy
并勾选两个选项后点击预览,AndroidStudio
会在左下角
显示会改变的所有项,预览后点击Do Refactor(重构)
即可!如下图所示:
修正错误的修改:找到Hook类然后右键
→复制路径/引用
→复制引用
,然后替换xposed_init
文件中的内容即可!如下图所示:
修改文件名
然后检查并修改AndroidManifest.xml
文件中的android:label
标签的应用名
和android:theme
标签中的 主题名
,将其XPModel
全修改为dy
即可!如下图所示:
点击文件
→Syn Project with Gradle Files
,同步完成后点击Close Project(关闭项目)
,然后 再重新打开一次项目即可去写Hook代码!
正常创建的Android项目(非Xposed项目),使用这种方式来对项目改名更加的方便,大家也可以依葫芦画瓢改即可!
写在后面
为何要这样创建一个模版项目再去更改项目的名字?而不是再去新建一个项目?新建一个项目岂不是更加的简单直接吗?
如上所示,Xposed项目开发前需要引用些配置,不熟悉的人每次创建和引用配置都要花费一些时间。新建项目里也有很多无用的测试引用包、资源等,这样的项目,当软件成品打包后也会变得稍大(也可先配置好资源优化、混淆字典、签名验证等),所以可先将一些麻烦的、重复的搞成一个通用模版再改名即可!
参考链接:
Xposed 模块开发 – 基础:https://blog.csdn.net/weixin_44791631/article/details/131586387
Android Studio修改项目名称和包名的步骤:https://blog.csdn.net/qq_34205684/article/details/114401402