幫助您構(gòu)建高質(zhì)量的應(yīng)用逛尚,是我們長(zhǎng)期努力的一個(gè)方向吨些。為此搓谆,我們經(jīng)常尋找可以在工具和資源上投入精力的領(lǐng)域,這些工具和資源可以使您更加深刻地了解應(yīng)用的性能豪墅。
重大更新
在 Android 11 上泉手,我們引入了兩個(gè)新工具——"數(shù)據(jù)訪問(wèn)審核 (Data Access Audit) API" 和 "進(jìn)程退出原因 (Process Exit Reasons)",這可以使您更清晰地了解隱私數(shù)據(jù)的訪問(wèn)和進(jìn)程退出的原因偶器。
數(shù)據(jù)訪問(wèn)審核 API
Android 鼓勵(lì)開(kāi)發(fā)者審慎地訪問(wèn)敏感數(shù)據(jù)斩萌。在 Android 11 上,通過(guò)訪問(wèn)新的 API屏轰,可以給您帶來(lái)更加透明的私有數(shù)據(jù)以及受保護(hù)數(shù)據(jù)的使用情況颊郎。這一 API 對(duì)于那些保留了舊代碼或使用了第三方庫(kù)或 SDK 的大型應(yīng)用或許會(huì)十分有用。
在大型應(yīng)用中霎苗,排查使用隱私數(shù)據(jù)的歸因并非易事
第一個(gè) API 是一個(gè)回調(diào)姆吭,當(dāng)運(yùn)行時(shí)權(quán)限所保護(hù)的數(shù)據(jù)被調(diào)用時(shí),它允許應(yīng)用 回溯到代碼調(diào)用處唁盏。如果希望得到通知内狸,任何應(yīng)用都可以在 AppOpsManager 中設(shè)置回調(diào),每當(dāng)有代碼使用私有數(shù)據(jù) (例如獲取位置更新) 時(shí)都會(huì)執(zhí)行該回調(diào)厘擂。您可以創(chuàng)建特定的邏輯來(lái)跟蹤昆淡、提取和分析數(shù)據(jù)。
Android 11 中的數(shù)據(jù)訪問(wèn)審核 API 有助于追溯您代碼中私有數(shù)據(jù)的使用情況
第二個(gè) API 針對(duì)多功能的復(fù)雜應(yīng)用驴党。一個(gè)社交類應(yīng)用可能同時(shí)擁有 "查找好友" 以及 "照片標(biāo)記" 功能瘪撇,每個(gè)功能使用了各自的敏感數(shù)據(jù)子集。舉例來(lái)說(shuō),"查找好友" 使用了位置倔既、聯(lián)系人數(shù)據(jù)恕曲,而 "照片標(biāo)記" 使用位置、聯(lián)系人以及相機(jī)渤涌。在 Android 11 中佩谣,您可以創(chuàng)建一個(gè)新的 Context 對(duì)象,該對(duì)象可以將應(yīng)用中的部分代碼 歸因 于一個(gè)或者多個(gè)功能实蓬。此后茸俭,每種權(quán)限的使用都將追溯到與此上下文關(guān)聯(lián)的功能。
關(guān)于這些 API 的實(shí)際使用情況安皱,請(qǐng)查閱 代碼示例:
除了幫助您識(shí)別私有數(shù)據(jù)訪問(wèn)之外调鬓,Android 11 還包含了另一個(gè)新的 API,用來(lái)輔助排查無(wú)法捕捉現(xiàn)場(chǎng)的崩潰酌伊。
進(jìn)程退出原因
造成應(yīng)用被終止的原因腾窝,可能是 ANR、崩潰或是用戶強(qiáng)行關(guān)閉應(yīng)用等諸多情況居砖,也因此難以進(jìn)行跟蹤虹脯,我們也收到了開(kāi)發(fā)者們對(duì)此的相關(guān)反饋。為了診斷應(yīng)用終止原因奏候,一些開(kāi)發(fā)者正在加入自定義代碼循集,以構(gòu)建自己的分析程序來(lái)改善應(yīng)用的穩(wěn)定性。
基于此想法蔗草,我們?yōu)槟峁┝艘环N簡(jiǎn)化診斷部分的方法咒彤。
Android 11 引入了一個(gè)新的 ActivityManager API 來(lái)上報(bào)應(yīng)用進(jìn)程終止相關(guān)的歷史信息。
您的應(yīng)用可以使用該 API 來(lái)獲取任何可用的進(jìn)程退出的歷史診斷信息蕉世,如進(jìn)程終止是否源于ANR蔼紧、內(nèi)存問(wèn)題、還是其他原因狠轻。
如果應(yīng)用由于 ANR 導(dǎo)致終止奸例,那么 ApplicationExitInfo.getTraceInputStream() 將在終止之前將一個(gè) InputStream 返回給堆棧跟蹤存儲(chǔ)。這在高版本的系統(tǒng)上尤其有效向楼,因?yàn)槌鲇陔[私和安全考慮查吊,高版本系統(tǒng) 提取 ANR traces 文件 將更加復(fù)雜。為了避免資源泄漏湖蜕,讀取 InputStream 后將其關(guān)閉即可逻卖。
此外,您還可以使用新的 ActivityManager.setProcessStateSummary() 方法存儲(chǔ)自定義狀態(tài)信息昭抒。您可以保存任意進(jìn)程數(shù)據(jù)评也,這能非常有效地幫助您調(diào)試導(dǎo)致應(yīng)用崩潰的代碼段炼杖。對(duì)于一些開(kāi)發(fā)者來(lái)講,了解應(yīng)用終止之前的狀態(tài)必不可少盗迟,比如: 游戲開(kāi)發(fā)者可能希望了解進(jìn)程終止之前用戶的游戲等級(jí)坤邪,一種常見(jiàn)的解決方案是將數(shù)據(jù)持久化保存,并在應(yīng)用下次啟動(dòng)時(shí)讀取罚缕。然而需要注意的是艇纺,輸入數(shù)據(jù)的大小非常有限。任何保存過(guò)的進(jìn)程狀態(tài)信息都可以通過(guò) ApplicationExitInfo.getProcessStateSummary() 方法獲取邮弹。
相關(guān)資源
我們希望您通過(guò)這些額外的工具可以提升應(yīng)用的隱私意識(shí)和穩(wěn)定性黔衡。詳細(xì)了解,請(qǐng)參閱以下開(kāi)發(fā)文檔:
數(shù)據(jù)訪問(wèn)審核 | Android 開(kāi)發(fā)者:https://developer.android.google.cn/preview/privacy/data-access-auditing
進(jìn)程退出原因 | Android 開(kāi)發(fā)者:https://developer.android.google.cn/preview/features#app-process-exit-reasons