2025年越狱源搭建源码(越狱源在线工具箱)

越狱源搭建源码(越狱源在线工具箱)打算从以上四个模块对 replugin 进行拆解阅读 RePlugin 的思想是 Hook ClassLoader 因此接下来就围绕 ClassLoader 进行分析 一 流程总结 1 1 插件的安装 RePlugin 插件的安装并不会真正的处理插件 APK 中的 dex so 库 资源等 只是将插件移动到需要的位置 这个位置默认是宿主的 context getFilesDir 然后将插件信息包装成 Plugin 对象并绑定宿主的 Context 宿主 ClassLoader




打算从以上四个模块对replugin进行拆解阅读

RePlugin的思想是Hook ClassLoader, 因此接下来就围绕ClassLoader进行分析

一、流程总结
1.1 插件的安装

  RePlugin插件的安装并不会真正的处理插件APK中的dex、so库、资源等, 只是将插件移动到需要的位置, 这个位置默认是宿主的context.getFilesDir(), 然后将插件信息包装成Plugin对象并绑定宿主的Context、宿主ClassLoader、负责和宿主通信的PluginContextImpl类, 最后将Plugin对象存入插件管理进程统一管理.

1.2 内置插件

  内置插件的安装是在初始化时就自动安装和加载了

1.3 外置插件

  外置插件的安装需要调用Replugin.install()方法来安装插件, 这个过程和内置插件类似, 区别就是内置插件是通过assets目录下的json文件来生成插件对象, 外置插件则是通过获取插件apk的PackageInfo来生成插件对象, 但是并不会处理apk中的dex、so库、资源等, 只有当真正使用这个插件中的类时才会去真正的解析加载这个插件

1.4 replugin-host-gradle

  主程序使用的Gradle插件, 主要职责是在我们的主程序打包的过程中(编译的过程中)动态的修改AndroidManifest.xml的信息, 动态的生成占位各种Activity、provider和service的声明.
  其次还会动态生成一个HostBuildConfig的java类, 这个类是根据app下的build.gradle中配置的参数信息(repluginHostConfig)产生的, 这个类的路径在BuildConfig的同级目录的gen包下.
  然后会扫描内置插件目录assets/plugins目录, 解析插件文件生成包含文件名、包名、版本、路径的plugins-build.json文件, 这个文件的路径在assets目录.

1.5 replugin-host-library

  这个库是由主程序依赖的, 也是RePlugin的核心, 它的主要职责是初始化Replugin的整体框架, 整体框架使用了Binder机制来实现多进程直接的沟通和数据共享, 或者说是插件之间和宿主之间沟通和数据共享, hook住ClassLoader, 加载插件、启动插件、多插件的管理全部都由这个库辅助

1.6 replugin-plugin-gradle

  这个是插件工程使用的gradle插件, 这个库使用了Transform API和Javassist实现了编译期间动态修改字节码文件, 主要是替换插件工程中的Activity的继承全部替换成Replugin库中定义的XXXActivity, 动态的将插件APK中调用LocalBroadcastManager的地方修改为Replugin中的PluginLocalBroadcastManager调用, 动态修改ContentResolver和ContentProvider的调用修改成Replugin调用, 动态的修改插件工程中所有调用Resource.getIdentifier方法的地方, 将第三个参数修改为插件工程的包名

1.7 replugin-plugin-library

  这个库是由插件工程依赖的, 这个库的主要目的是通过反射的方式来使主程序中接口和功能, 这个库在主程序加载插件apk后悔进行初始化.

二、RePluginClassLoader初始化
2.1 ClassLoader

Android系统默认三个ClassLoader

Replugin提供了两个ClassLoader
宿主APP中的ClassLoader, 加载应用内部的Activity
加载插件的Loader.

2.2 RePluginApplication初始化
2.3 PatchClassLoaderUtils.patch
2.4 创建RePluginClassLoader
三、下载插件
方法调用链
3.1 Replugin.intall
3.2 MP.pluginDownloaded
3.3 PmHostSvc
3.4 PluginManagerServer.intallLocked
四、加载插件
方法调用链
3.1 Replugin.startActivity
3.2 PluginLibraryInternalProxy.startActivity
3.3 PluginCommImpl.loadPluginActivity
3.4 PluginProcessPer.allocActivityContainer


编程小号
上一篇 2025-02-25 21:30
下一篇 2025-02-20 08:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/60531.html