Android源码环境应用开发知识点

本文解析了系统应用如何使用Android中的隐藏API,包括平台签名豁免、白名单机制及属性配置。阐述了pri-app与app目录下应用的区别,以及共享userId的意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

隐藏API(hidden api)怎么对应

	ApplicationInfo.java
    private boolean isAllowedToUseHiddenApis() {
    //platform签名豁免
        if (isSignedWithPlatformKey()) {
            return true;
      //SystemApp(/system/pri-app;/system/app;/product/pri-app;/product/app都是)
      //isUpdatedSystemApp表示systemApp通过install进行了更新的App
        } else if (isSystemApp() || isUpdatedSystemApp()) {
        //是否在白名单里
            return usesNonSdkApi() || isPackageWhitelistedForHiddenApis();
        } else {
            return false;
        }
    }

综上,第三方应用由于不是system应用所以不豁免,系统应用(指位于系统分区或者product分区的应用,通常是厂商预装的,不能卸载的应用)如果是在白名单中的豁免。
添加白名单两种方式:1.白名单中添加,可参考我另一篇文章。2.AndroidManifest中指定 android:usesNonSdkApi=“true”,这个是Q上新出的属性,所以如果是P只能使用白名单添加。
当然源码编译需要指定LOCAL_PRIVATE_PLATFORM_APIS:=true才能编过,但这个命令只是编过,如果不是platform签名仍然需要添加白名单。

pri-app和app目录下的应用的不同点

pri-app是指定了privileged:true的应用(此处举例bp方式指定),也即特权应用,通过添加特权白名单能够获取系统特权,即privileged类型的权限。app目录下的应用不能通过这种方式获取特权。两种应用的isSystemApp都返回true。

android:sharedUserId意义

通过指定这个属性可以让多个包共享同一个userId,所以权限会共享。通过白名单获取的特权也能够共享,所以白名单声明一次即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值