修改启动页
新建一个空工程 什么都不用改 打包apk
使用apktool工具反编译apk
java -jar apktool_2.5.0.jar d app-release.apk -f --out=app-release
另起一个工程也可以在原有的工程中创建一个启动页
运行在build目录下获取Monkey.java的dex文件
使用baksmali工具将dex转成smali文件
java -jar baksmali-2.2.2.jar disassemble Monkey.dex -o Monkey
也可以打包成apk用apktool工具反编译获取smali文件
将monkey的两个 smali文件放到最开始反编译的文件夹中
将activity_monkey.xml文件复制到
因为使用不同包名工程做的启动页 所以要将smali文件中所有用到包名的地方修改成目标apk的包名
在R$layout 中注册添加的xml文件 在最后添加 编码加一
将monkey中红框框的编码替换成修改的layout编码
上面的绿框是bbtt那个按钮的id
修改AndroidManifest.xml文件
为什么Monkey.java会有两个smali文件 查了一下资料大概意思的 Monkey$1.smali文件中放的是匿名类,如果代码中有用到匿名类就后生成连个smali文件,如果把monkey.java中那个按钮事件的匿名函数去掉的话就不会有Monkey$1.smali文件了
然后用apktool 打包成apk
java -jar apktool_2.5.0.jar b app-release -o app.apk
报错
找到对应的文件将值改成默认的值
使用zipalign工具对齐
zipalign -p -f -v 4 app.apk app-new.apk
使用apksigner.jar重签名
运行界面
点击跳转MainActivity
创建so文件
下载CMake
不需要修改直接运行 效果如下即可
在native-lib.cpp 中添加自己定义的方法 注意方法的签名路径要和使用的脚本路径一致
也可以自己创建一个cpp文件
将自己创建的cpp文件加入构建
-
cmake_minimum_required(VERSION 3.10.2): 指定构建本项目所需的最低CMake版本。
-
project(“myapplication”): 定义项目名称为"myapplication"。
-
add_library(myapplication SHARED native-lib.cpp): 创建一个名为"myapplication"的共享库,其源代码位于native-lib.cpp文件中。这个命令将native-lib.cpp编译成共享库。
-
find_library(log-lib log): 查找名为"log"的NDK库,并将其路径存储在log-lib变量中。这个库通常用于在控制台上输出日志信息。
-
target_link_libraries(jnihello ${log-lib}): 将jnihello库与log库链接起来。这样,当你在JNI代码中使用#include <android/log.h>时,就可以使用log库中的函数来输出日志。
你可以修改这个文件来添加更多的源文件或依赖库,以满足你的项目需求。例如,如果你的JNI库依赖于其他第三方库,你可以通过find_library和target_link_libraries来添加这些库的链接。
使用so文件
将上面获取的so文件放入工程的libs文件夹中 添加引用
使用
修改monkey.java 尝试引用so文件并插入apk
获取这个文件的smali文件 复制替换到之前的test解压的工程中 记得修改路径和编码
打包成apk后运行报找不到Go方法
将两个smali文件中的Go放发改成Out 运行没问题
发现Smali中的Go方法不知道为什么变成了大写的GO 和so文件中匹配不上 改成Go后运行正常
加壳
…