39

GitHub - androidmalin/AMSHook: 启动未在AndroidManifest中注册的Activity,适配了And...

 5 years ago
source link: https://github.com/androidmalin/AMSHook
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

Android ams hook, 启动未在AndroidManifest.xml中注册的Activity

适配了Android4-9,要彻底搞清楚代码,需要提前掌握的知识点如下:

  1. 反射的使用
  2. 泛型
  3. 动态代理
  4. AIDL通信
  5. Activity启动流程以及其中涉及到的两次跨进程通信
  6. Handler消息处理机制
  7. Activity启动拦截

问题思考

  1. 如何确保我们启动的未注册的Activity,有正常的Activity的生命周期?

源码探索系列29---插件化基础之启动插件的Activity

  1. 从整体宏观的角度看,我们到底做了什么?

  2. 对PackageManager的hook,为什么要hook两个地方

hook技术(三)对AMS&PMS进行Hook

@Override
public PackageManager getPackageManager() {
    if (mPackageManager != null) {
        return mPackageManager;
    }
    IPackageManager pm = ActivityThread.getPackageManager();
    if (pm != null) {
        return (mPackageManager = new ApplicationPackageManager(this, pm));
    }
    return null;
}

由于系统的执行肯定在我们代码之前,所以系统先生成了一个pm,这个是原生的pm然后保存在ApplicationPackageManager中, 使得以后使用ContextImp.getPackageManager()都返回这个IPackageManager 对象。 就算我们后来替换了ActivityThread.getPackageManager(),但是也不影响mPackageManager 里面之前包装好的。 所以我们还需要改变mPackageManager 里面的原来的pm对象。

参考文章列表

  1. Android:学习AIDL,这一篇文章就够了(上)
  2. Android:学习AIDL,这一篇文章就够了(下)
  3. 大白话说Java反射:入门、使用、原理
  4. Android 插件化原理解析——Hook机制之AMS&PMS
  5. Android系统篇之----Hook系统的AMS服务实现应用启动的拦截功能
  6. Android插件化的兼容性(中):Android P的适配
  7. Android Hook Activity 的几种姿势

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK