另外一种更优雅兼容Android P获取Application的方法

  • 那么我们有没有什么优雅的方法去调用hiden的API呢?

    有这里我们使用的是类加载器的委托机制,具体怎么做呢。

package android.app;


public class ActivityThread {

    public static Application currentApplication() {
        return null;
    }
}

《另外一种更优雅兼容Android P获取Application的方法》 image.png

try {
      //兼容android P,直接调用@hide注解的方法来获取application对象
      Application app = ActivityThread.currentApplication();
      Log.e("MainActivity", app.getPackageName());
    } catch(Exception e) {
      e.printStackTrace();
    }
    try {
      //兼容android P,直接调用@hide注解的方法来获取application对象
      Application app = AppGlobals.getInitialApplication();
      Log.e("MainActivity2", app.getPackageName());
    } catch (Exception e) {
      e.printStackTrace();
    }


这里需要注意,我们在本地定义的两个ActivityThread和AppGlobals要以android.app包名来命名,这样就可以欺骗编辑器,然后根据类加载器的委托机制,他会直接加载系统的ActivityThread和AppGlobals因此就可以直接获取application了


    原文作者:Lazy1
    原文地址: https://www.jianshu.com/p/3628cdc19154
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞