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

相关推荐
Sirens.9 小时前
MySQL表设计进阶-约束范式连接索引与事务
android·数据库·mysql
zh_xuan12 小时前
安卓上 mmap读取并修改文件内容
android·mmap
二流小码农13 小时前
鸿蒙开发:实现文本渐变效果
android·ios·harmonyos
光头闪亮亮14 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(中)
android·c++·go
光头闪亮亮14 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(上)
android·sqlite·go
光头闪亮亮14 小时前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(下)
android·c++·go
Ch_champion15 小时前
2018年之前的Android 项目上使用的技术点(及第三方库)
android
龚礼鹏15 小时前
RK Android16 wifi 投屏失败问题排查
android
晓梦林17 小时前
[ACTF2020 新生赛]BackupFile学习笔记
android·笔记·学习
ITmaster073117 小时前
告别 IDE?Android CLI 来了,开发进入 AI Agent 时代
android·ide·人工智能