增加系统白名单,允许普通APP调用Android系统内部隐藏方法

普通APP通过反射,访问系统内部方法时,出现NoSuchMethodError错误,定位到

/frameworks/base/core/java/android/content/pm/ApplicationInfo.java

isAllowedToUseHiddenApis()方法:

java 复制代码
   private boolean isAllowedToUseHiddenApis() {
        if (isSignedWithPlatformKey()) {
            return true;
        } else if (isSystemApp() || isUpdatedSystemApp()) {
            return usesNonSdkApi() || isPackageWhitelistedForHiddenApis();
        } else {
            return false;
        }
    }

允许访问内部方法的APP有两种:

1、系统签名APP

2、SYSTEM APP或PRIVATE APP

修改isAllowedToUseHiddenApis方法:

java 复制代码
private boolean isAllowedToUseHiddenApis() {
        if (isSignedWithPlatformKey()) {
            return true;
        } else if (isSystemApp() || isUpdatedSystemApp()) {
            return usesNonSdkApi() || isPackageWhitelistedForHiddenApis();
        } else {
            //return false;
            return isPackageWhitelistedForHiddenApis();
        }
    }

isPackageWhitelistedForHiddenApis为自带方法,读取系统配置文件中白名单配置。

系统启动时,/frameworks/base/core/java/com/android/server/SystemConfig.java的readPermissionsFromXml方法读取配置文件:

/frameworks/base/data/etc/hiddenapi-package-whitelist.xml

java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<config>
....................
 <hidden-api-whitelisted-app package="your package name" />
</config>

在配置文件末尾增加APP的包名,允许此包名的APP调用内部方法。

相关推荐
阿杰m16 分钟前
Android源码第四章:Android 系统启动——App 的第一行代码从哪来?
android
疯华整猫4 小时前
混淆起初根本不是为了防破解:我用 Trae 把 Android 混淆这二十来年重跑了一遍
android·人工智能·计算机视觉
Carson带你学Android5 小时前
AI时代,你的 App 会被 Agent 这三种方式调用
android·ai编程
恋猫de小郭6 小时前
Flutter 下 AOT 一个你怎么都想不出来的 Bug ,JIT 正常的计算,在 AOT 居然算错了
android·前端·flutter
好的佩奇1 天前
Dart 之扩展方法
android·flutter·dart
三少爷的鞋1 天前
换个思路理解:非阻塞挂起
android
好的佩奇1 天前
蓝牙之经典蓝牙
android·flutter·蓝牙
传奇开心果编程1 天前
【Flutter踩坑排雷】第19课:路由硬编码坑|字符串路由书写错误,页面跳转失败排查
android·flutter·ios·移动开发·跨平台·ui框架·声明式ui
微小的鱼1 天前
Linux的渲染与显示系统链路
android·java·linux
道尔柯南2 天前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++