增加系统白名单,允许普通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调用内部方法。

相关推荐
ltlovezh6 小时前
ROI 编码学习指南:Android 与 FFmpeg 的真实实现边界
android·ffmpeg·音视频开发
心前阳光7 小时前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
utf8mb4安全女神8 小时前
MySQL5.7升级到MySQL8.0并进行数据迁移
android
黄林晴8 小时前
Android XR DP4 重磅发布:手机 App 直投眼镜,Compose 原生玩转 3D 内容
android·google io
炼川淬海DB10 小时前
数据库开发规范
android·adb·数据库开发
2501_9159184110 小时前
iOS App性能测试工具的实现方法与优化循环指南
android·ios·小程序·https·uni-app·iphone·webview
天天爱吃肉821811 小时前
豆包 vs DeepSeek API 对比分析报告
android·java·大数据·开发语言·功能测试·嵌入式硬件·汽车
问心无愧051312 小时前
ctf show web入门123
android·前端·笔记
想你依然心痛12 小时前
手机远程控制电脑教程:安卓iOS远程桌面推荐、免费工具配置与远程办公技巧
android·智能手机·电脑