Android动态加载及hook资料汇总

来源:互联网 发布:宜昌搜索引擎排名优化 编辑:程序博客网 时间:2024/06/05 05:06

Android  Java Hook

http://www.52pojie.cn/thread-288128-2-1.html

http://www.52pojie.cn/thread-426890-1-2.html


apk加固

http://blog.csdn.net/jiangwei0910410003/article/details/48415225


Android自动打包程序

http://www.jizhuomi.com/android/environment/281.html


360 Android插件(DroidPlugin)无需安装运行APK的原理是什么,用途都有哪些?

http://www.zhihu.com/question/35138070



http://www.kanxue.com/bbs/forumdisplay.php?f=161




Android中插件开发篇之----动态加载Activity(免安装运行程序)

http://blog.csdn.net/jiangwei0910410003/article/details/48104455



远程服务

http://www.2cto.com/kf/201402/276822.html



Android Activity学习笔记——Activity的启动和创建

http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html


Android-精通Activity

http://www.imooc.com/learn/413


Android系统Activity窗口启动过程

http://www.tuicool.com/articles/yQRrUv


Android的应用(APP)启动详细流程

http://laokaddk.blog.51cto.com/368606/1206822


Android 插件化 动态升级


http://www.trinea.cn/android/android-plugin/

https://github.com/cayden/Android-Plugin-Framework 





Android插件化开发,初入殿堂

http://my.oschina.net/kymjs/blog/327232



Android应用程序启动过程源代码分析


http://blog.csdn.net/luoshengyang/article/details/6689748

老罗帖子的里面最后的总结: 

 在应用程序内部启动新的Activity的过程要执行很多步骤,但是整体来看,主要分为以下四个阶段:

       . Step 1 - Step 10:应用程序的MainActivity通过Binder进程间通信机制通知ActivityManagerService,它要启动一个新的Activity

       . Step 11 - Step 15ActivityManagerService通过Binder进程间通信机制通知MainActivity进入Paused状态;

       . Step 16 - Step 22MainActivity通过Binder进程间通信机制通知ActivityManagerService,它已经准备就绪进入Paused状态,于是ActivityManagerService就准备要在MainActivity所在的进程和任务中启动新的Activity了;

       . Step 23 - Step 29ActivityManagerService通过Binder进程间通信机制通知MainActivity所在的ActivityThread,现在一切准备就绪,它可以真正执行Activity的启动操作了。



对比

  • DynamicLoadApk
    迁移成本很重:需要使用『that』而不是『this』,所有activity都需要继承自proxy avtivityproxy avtivity负责管理所有activity的生命周期)。
    无法启动apk内部的activity
    不支持ServiceBroadcastReceiver。文章开头提到,要想成为一个插件apk,是要满足一定条件的,如下是采用本文机制开发插件apk所需要遵循的规范:
  1. 慎用this(接口除外):因为this指向的是当前对象,即apk中的activity,但是由于activity已经不是常规意义上的activity,所以this是没有意义的,但是如果this表示的是一个接口而不是context,比如activity实现了而一个接口,那么this继续有效。
  2. 使用that:既然this不能用,那就用thatthatapkactivity的基类BaseActivity中的一个成员,它在apk安装运行的时候指向this,而在未安装的时候指向宿主程序中的代理activityanywaythat is better than this
  3. activity的成员方法调用问题:原则来说,需要通过that来调用成员方法,但是由于大部分常用的api已经被重写,所以仅仅是针对部分api才需要通过that去调用用。同时,apk安装以后仍然可以正常运行。
  4. 启动新activity的约束:启动外部activity不受限制,启动apk内部的activity有限制,首先由于apk中的activity没注册,所以不支持隐式调用,其次必须通过BaseActivity中定义的新方法startActivityByProxystartActivityForResultByProxy,还有就是不支持LaunchMode
  5. 目前暂不支持ServiceBroadcastReceiver等需要注册才能使用的组件,但广播可以采用代码动态注册。
  • AndroidDynamicLoader
    迁移成本很重:
    使用资源时要用MyResources.getResource(Me.class)而不是context.getResources()
    使用Fragment作为UI容器,所有每个页面都是使用Fragment而不是Activity,需要使用URL mapping才能实现页面跳转。
  • android-pluginmgr
    未经过生产环境App测试。
    不支持ServiceBroadcastReceiver
  • DroidPlugin from 奇虎360
    非常有趣的框架!DroidPlugin能够在一个App内启动一个没有安装的App。这个特性可能更适合360的安全产品,因为被启动的App和宿主App完全没有任何关联,相互间不能支持资源和代码调用。
    不支持自定义推送栏。


5 0
原创粉丝点击