插件化框架对Android P的适配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010019468/article/details/82805131

Android P non-sdk

对于非sdk接口的hide field和方法,Android P进行限制调用,可以参考如下文章https://juejin.im/post/5b8959f96fb9a019fe685eb3
为了适配P,整体原则就是能绕过non-sdk方法就想办法找到兼容替代方法,实在不行就把TargetSdk 降低到28
以下是对目前使用的到Hook方面以及插件化中在P中的限制api 调用

关于插件中Hook

目前Hook 涉及到Instrumentation 、IActivityManager、IContentProvider,均通过查询并没有限制这些实例的限制,应该是可以使用的。1)Instrumention 主要是Hook ActivityThread中的mInstrumentation

对于资源Resource的加载

摒弃现在通用的 反射方式调用addAssetsPath接口,也就是上述的灰度名单
采用如下方式获取到AssertManager:

    PackageManager packageManager = mContext.getPackageManager();
    PackageInfo packageInfo = packageManager.getPackageArchiveInfo(apkPath, flags);
    ApplicationInfo applicationInfo = packageInfo.applicationInfo;
    Resources resources;
    try {    
    resources = packageManager.getResourcesForApplication(applicationInfo);
    } catch (PackageManager.NameNotFoundException e) { 
    }
    //获取AssetManager ,避免反射方式实现
   AssetManager assets = resources.getAssets();

暴力破解限制

参考 https://yq.aliyun.com/articles/609421
无论谷歌怎么限制,主要不是在内核层限制,在自己的进程空间里面限制的话,理论上都是可以绕过的。一句话就是Hook 源码中的判断逻辑

猜你喜欢

转载自blog.csdn.net/u010019468/article/details/82805131