android p 第三方预装,android P 隐藏API对系统APP的影响
android P限制了第三方APK對@hide API的調(diào)用,那么對系統(tǒng)APK有什么影響呢?
國內(nèi)各大手機(jī)廠商對ROM進(jìn)行各種定制,可以很容易繞過這些限制,那對于需要出海并且滿足CTS要求的廠商有什么影響呢?
先說結(jié)論:對系統(tǒng)廠商APK沒有任何影響,依然可調(diào)用任何API
第三方APK,受hide限制
系統(tǒng)platform簽名APK,不受限制
非platform簽名APK,集成在system分區(qū),又在hiddenapi-package-whitelist.xml,不受限制。(且目前不影響CTS)
一、對第三方APK、系統(tǒng)APK的影響
SDK28
@hide 淺灰
@hide 黑名單
@systemapi
非platform簽名
/data/app
是,警告
否
是,需permisison權(quán)限
/system/app
是,警告
否
是,需permisison權(quán)限
/system/priv-app
是,警告
否
是,需permisison權(quán)限
hiddenapi-package-whitelist.xml
(/system/app、priv-app)
是
是
是,需permisison權(quán)限
platform簽名
/data/app
/system/app
/system/priv-app
是
是
是,需permisison權(quán)限
二、新增hiddenapi-package-whitelist.xml名單,能否通過CTS?
實(shí)測無影響。
但不確定google后續(xù)CTS版本是否加強(qiáng)檢查,有風(fēng)險(xiǎn)。
相關(guān)測試項(xiàng):
CtsHiddenApiBlacklistApi27TestCases
CtsHiddenApiBlacklistCurrentApiTestCases
CtsHiddenApiBlacklistDebugClassTestCases
CtsHiddenApiKillswitchDebugClassTestCases
CtsHiddenApiKillswitchWhitelistTestCases
CtsHiddenApiKillswitchWildcardTestCases
三、Hide API限制原理
詳細(xì)的原理牽扯到編譯時(shí)、運(yùn)行時(shí),還是比較復(fù)雜的,下面僅從較宏觀的角度闡明受限原理、加白原理。
a.訪問受限原理
hiddenapi-light-greylist.txt包含的api,會(huì)在dex中對應(yīng)的Method結(jié)構(gòu)生成HiddenApiAccessFlags::kLightGreylist訪問權(quán)限標(biāo)記。
生成正常framework dex
Hiddenapi工具根據(jù)hiddenapi-light-greylist.txt等配置文件對dex的access_flags進(jìn)行修改
新的帶access標(biāo)記的framework dex
ART通過access_flags判斷是否可以調(diào)用:
Action action = GetActionFromAccessFlags(member->GetHiddenApiAccessFlags());
if (action == kAllow) {
return action;
}
b.加白不受限原理
構(gòu)造ApplicationInfo時(shí)會(huì)判斷platform簽名、hide-package-whitelist,來確定HIDDEN_API_ENFORCEMENT的flag
private boolean isAllowedToUseHiddenApis() {
return isSignedWithPlatformKey()
|| (isPackageWhitelistedForHiddenApis() && (isSystemApp() || isUpdatedSystemApp()));
}
ActivityManagerService中startProcessLocked()啟動(dòng)進(jìn)程時(shí)會(huì)把是否檢查hide api的flag傳給zygote
@HiddenApiEnforcementPolicy int policy =app.info.getHiddenApiEnforcementPolicy();
int policyBits = (policy << Zygote.API_ENFORCEMENT_POLICY_SHIFT);
runtimeFlags |= policyBits;
fork新的app進(jìn)程后,調(diào)用ZygoteHooks_nativePostForkChild( ),初始化art虛擬機(jī)參數(shù)hidden_api_policy_,設(shè)置不進(jìn)行hide api檢查的kNoChecks選項(xiàng)。
總結(jié)
以上是生活随笔為你收集整理的android p 第三方预装,android P 隐藏API对系统APP的影响的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qsub 指定节点_PBS,QSUB常用
- 下一篇: linux关机_Linux中shutdo