IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Android动态加载及hook资料汇总

    cuiran发表于 2016-01-16 15:46:10
    love 0

    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 15:ActivityManagerService通过Binder进程间通信机制通知MainActivity进入Paused状态;

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

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



    对比

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




沪ICP备19023445号-2号
友情链接