我是来填坑的,我们搞的插件机制 DroidPlugin 开源成功了。

2015-08-27 20:01:55 +08:00
 cmzy

坑在这里: https://www.v2ex.com/t/208961
填坑 https://github.com/Qihoo360/DroidPlugin

对,我就在 360 手机助手

22809 次点击
所在节点    Android
50 条回复
abmin521
2015-08-27 20:19:20 +08:00
你为什么发了两次?
fengdra
2015-08-27 21:03:55 +08:00
感觉好可怕,以后流氓程序可以不经允许直接代装软件了
simon7
2015-08-27 21:19:00 +08:00
简直黑科技。
ljbha007
2015-08-27 21:20:36 +08:00
大概看了下代码 大致总结思路:
1. 注册一堆各种配置的备用的 actvity
2. 用 DexClassloader 加载 apk 中的代码
3. 对关键系统服务和注册的 activity 使用 InvocationHandler 创建 Proxy 对象
4. 有专门的入口拦截发送给插件 activity 的 Intent 和做进程调度 我只找到了进程调度的代码 还没找到拦截 Intent 部分
5. 拦截到启动插件的 activity 的 Intent 后 使用进程调度服务启动 3 中生成的 activity 的 Proxy 对象
这样就加载了并运行了未安装的 apk
cmzy
2015-08-27 21:22:41 +08:00
@ljbha007 思路在 doc 的 ppt 里面有。很清晰的。
CRight
2015-08-27 21:23:01 +08:00
技术就是技术,不会无脑歧视 360 。
ljbha007
2015-08-27 21:32:06 +08:00
@cmzy
我这个思路是对的吧
主要就是先用各种 activitystub 占坑 然后用 activity 的 proxy 来接受来自系统的各种生命周期方法 再依次去调用插件 apk 里的各种生命周期方法
cmzy
2015-08-27 21:35:04 +08:00
@ljbha007 差不多。但是实际比这复杂。我现在在家爪机上网打字不方便。建议你看下 doc 的 ppt 。它对整体思路有一个大致的总结
est
2015-08-27 21:36:11 +08:00
@ljbha007 听起来好像很复杂。。。
cmzy
2015-08-27 21:37:17 +08:00
@est 确实比想象的复杂。踩过很多坑的
est
2015-08-27 21:41:45 +08:00
@cmzy 也只有贵厂才有如此奇葩的需求而且真做出来了。。。。。。。。。。
Epsil0n9
2015-08-27 21:45:31 +08:00
@CRight 360 “靠技术耍流氓”和“耍流氓受歧视”本身就不矛盾,技术一定程度上用钱来堆人才就成功一半了了,毕竟国内人更看重钱或者被所谓的“刚需”逼得看重钱
janxin
2015-08-27 22:00:50 +08:00
只是单纯 plugin 是没这么复杂的
StackGao
2015-08-27 22:04:36 +08:00
赞一个,但说不用修改目标 apk ,已经很牛逼了。
Mac
2015-08-27 22:51:00 +08:00
LZ 你们是想干什么。。。
49
2015-08-27 23:14:47 +08:00
你们把这种黑科技说出来真的好吗?
ljbha007
2015-08-27 23:44:13 +08:00
@est
@cmzy
深读了一下 基本上看懂了

1. 整个框架的入口时 PluginManager.getInstance ().installPackage ()
2. 上述方法会调用 HandleFactory 中的初始化方法
3. HandleFactory 中初始化了 用于劫持所有系统关键服务的 Proxy 对象
4. 通过反射将 VM 中关键的系统服务对象替换为 Proxy 对象
5. 其中最关键的是 ActivityManager 以及其中的 startActivity 方法
6. Proxy 对象中的 startActivity 方法根据要启动的 Activity 的包名判断是否是插件 如果是则将启动 Activity 用的 Intent 替换为启动占坑 Activity 的 Intent
7. 通过 Classloader 动态加载插件 apk 里的代码 然后利用反射调用调用 makeApplication
8. 通过某种机制用动态加载的代码代替 stub activity ?

最后一步我没搞懂怎么实现的
BuilderQiu
2015-08-27 23:53:31 +08:00
叼叼叼。 强行假装了解了。
silvernoo
2015-08-27 23:53:32 +08:00
咋感觉 lz 逻辑这么乱肋
dahvlh
2015-08-27 23:58:38 +08:00
居然可以这样 好神奇

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/216494

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX