android p 第三方预装,android P 隐藏API对系统APP的影响

android P限制了第三方APK对@hide API的调用,那么对系统APK有什么影响呢?

国内各大手机厂商对ROM进行各种定制,可以很容易绕过这些限制,那对于需要出海并且满足CTS要求的厂商有什么影响呢?

先说结论:对系统厂商APK没有任何影响,依然可调用任何API

第三方APK,受hide限制

系统platform签名APK,不受限制

非platform签名APK,集成在system分区,又在hiddenapi-package-whitelist.xml,不受限制。(且目前不影响CTS)

一、对第三方APK、系统APK的影响

SDK28

@hide 浅灰

@hide 黑名单

@systemapi

非platform签名

/data/app

是,警告

是,需permisison权限

/system/app

是,警告

是,需permisison权限

/system/priv-app

是,警告

是,需permisison权限

hiddenapi-package-whitelist.xml

(/system/app、priv-app)

是,需permisison权限

platform签名

/data/app

/system/app

/system/priv-app

是,需permisison权限

二、新增hiddenapi-package-whitelist.xml名单,能否通过CTS?

实测无影响。

但不确定google后续CTS版本是否加强检查,有风险。

相关测试项:

CtsHiddenApiBlacklistApi27TestCases

CtsHiddenApiBlacklistCurrentApiTestCases

CtsHiddenApiBlacklistDebugClassTestCases

CtsHiddenApiKillswitchDebugClassTestCases

CtsHiddenApiKillswitchWhitelistTestCases

CtsHiddenApiKillswitchWildcardTestCases

三、Hide API限制原理

详细的原理牵扯到编译时、运行时,还是比较复杂的,下面仅从较宏观的角度阐明受限原理、加白原理。

a.访问受限原理

hiddenapi-light-greylist.txt包含的api,会在dex中对应的Method结构生成HiddenApiAccessFlags::kLightGreylist访问权限标记。

生成正常framework dex

Hiddenapi工具根据hiddenapi-light-greylist.txt等配置文件对dex的access_flags进行修改

新的带access标记的framework dex

ART通过access_flags判断是否可以调用:

Action action = GetActionFromAccessFlags(member->GetHiddenApiAccessFlags());

if (action == kAllow) {

return action;

}

b.加白不受限原理

构造ApplicationInfo时会判断platform签名、hide-package-whitelist,来确定HIDDEN_API_ENFORCEMENT的flag

private boolean isAllowedToUseHiddenApis() {

return isSignedWithPlatformKey()

|| (isPackageWhitelistedForHiddenApis() && (isSystemApp() || isUpdatedSystemApp()));

}

ActivityManagerService中startProcessLocked()启动进程时会把是否检查hide api的flag传给zygote

@HiddenApiEnforcementPolicy int policy =app.info.getHiddenApiEnforcementPolicy();

int policyBits = (policy << Zygote.API_ENFORCEMENT_POLICY_SHIFT);

runtimeFlags |= policyBits;

fork新的app进程后,调用ZygoteHooks_nativePostForkChild( ),初始化art虚拟机参数hidden_api_policy_,设置不进行hide api检查的kNoChecks选项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值