1. 程式人生 > >外掛化框架對Android P的適配

外掛化框架對Android P的適配

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 原始碼中的判斷邏輯