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

相关推荐
君莫啸ོ14 小时前
Android杂记-EDLA认证
android
武当王丶也14 小时前
React Native App 内更新实践:从版本策略到 APK 下载和安装
android·javascript·react native
我命由我1234514 小时前
Android Framework P4 - ServiceManager 进程
android·c语言·c++·visualstudio·android studio·android-studio·android runtime
huaCodeA15 小时前
Android面试-Kotlin Coroutines(协程)
android·面试·kotlin
通玄15 小时前
Jetpack Compose 入门系列(三):MVVM + 协程 实现网络请求列表
android
LCG元16 小时前
MySQL慢查询分析与索引调优:从故障诊断到性能翻倍的进阶之路
android·前端·mysql
技术钱16 小时前
字符分割器组件的使用
android·python
小a彤16 小时前
atvoss:Vector 算子子程序模板库,让 Ascend C 开发效率提升 5 倍
android·c语言·数据库
oh_my_god16 小时前
Android 修改ntp网络校时服务器
android