Android P FAQ第一彈:非SDK管控特性

weixin_33763244發表於2018-06-01

​​Android P預覽版釋出的非 SDK 介面管控特性,被稱為 Android 史上最嚴格的變更特性之一,針對這個特性開發者在適配工作中普遍遇到哪些疑點和困惑?華為終端開放實驗室整理了一份Android P非 SDK 管控特性 FAQ,一起來看看吧。

Q1.什麼是非 SDK 介面?

A:谷歌網站:

https://developer.android.goo... 在此網站能夠查詢到的介面都是 SDK 介面;除以上的 SDK 介面外,其他都是非 SDK 介面。

Q2.如果呼叫了非 SDK 介面,會怎麼樣?

A: 無論通過呼叫、反射還是 JNI 等方式呼叫非 SDK 介面,都會導致應用出現 crash,無法啟動;或在執行過程中出現崩潰、閃退等現象;也可能導致應用功能不可用等嚴重相容性問題,其影響範圍波及所有呼叫此介面的應用,因此,非 SDK 介面管控被稱為 Android 史上最嚴格的變更特性之一。

Q3. 什麼是非 SDK 介面管控名單?

A: 名單型別分 light grey list (淺灰名單), dark grey list (深灰名單), dark list(黑名單)。

Q4.怎麼查非 SDK 介面管控名單?

A: 查詢連結:

https://android.googlesource....

Q5.hidden api淺灰名單、深灰名單和黑名單進一步說明:

A:①淺灰名單:

hiddenapi-light-greylist.txt+hiddenapi-vendor-list.txt,hiddenapi-p-light-greylist.txt 名單目前還未用到,可以暫不關注。

②深灰名單和黑名單:

目前沒有具體的程式碼名單可以看到深灰和黑名單介面列表,開發者可以通過編譯谷歌提供的靜態掃描veridex工具(需要下載谷歌 Android P 整個工程程式碼),動態生成淺灰、深灰和黑名單介面名單:

工具路徑: art/tools/veridex/

工具編譯:make appcompat

outtargetcommonobjPACKAGING下會動態生成三個名單:

原始碼下載指導:

https://source.android.google...

③需要整改的介面名單: 黑名單介面

④在 DP1 版本中黑中名單是空的,只有淺灰+深灰,不會因為非 SDK 變更導致應用出現相容性問題;而 DP2 版本開始加入黑名單,如果應用未在 DP1 版本整改和適配的話,可能會因為 DP2 版本加入的黑名單導致相容性問題。

Q6.名單變化的趨勢是怎樣的?

A:整合 OEM 廠商的掃描測試+谷歌的掃描測試+開發者自己掃描測試,申請將掃描到的黑名單介面加入到灰名單中。目前趨勢是黑名單不斷減少,淺灰名單不斷增加。DP2 版本淺灰名單是現在谷歌最新淺灰名單的一個子集,應用在 DP2 版本中測試可以充分暴露問題。因此,針對非 SDK 問題,應用在 DP2 版本整改之後,不會在後續版本引入新的問題。

Q7.名單申請deadline是什麼時間?

A:目前谷歌官方未公佈,應用須儘快向谷歌反饋需要加灰名單的介面;越晚反饋申請難度越大,之後再發現有新的必須呼叫的非 SDK API 就只能走 escalation 了,申請修改加灰名單的難度係數將增加很多。

Q8.應用使用 blacklist 非 SDK 介面導致崩潰,無法發現其呼叫的其他更多非 SDK 介面,怎麼辦?

A:請用下面的命令將 blacklist 設為只警報不崩潰:

adb shell settings put global hidden_api_policy_pre_p_apps 1

adb shell settings put global hidden_api_policy_p_apps 1

注意:此為開發者選項,僅供開發時使用

復位命令:

adb shell settings delete global hidden_api_policy_pre_p_apps

adb shell settings delete global hidden_api_policy_p_apps

Q9.應用現在要做的最緊急的事情是?

A:在DP2版本中通過 veridex 靜態分析 + logcat 動態測試充分暴露問題,發現必須要使用的且不在淺灰名單的非 SDK 介面,需儘快反饋給谷歌,申請加淺灰名單,並提交申請理由,以確保後續的 DP 版本不會出現同樣的非 SDK 介面問題。

問題反饋連結:

https://issuetracker.google.c...

Q10. 使用加固的應用該怎麼做?

A:對於使用加固的應用,因為 OEM 廠商和谷歌都無法通過靜態工具幫助應用掃描使用的非 SDK 介面列表。如果應用還未更新最新適配谷歌 Android P 的加固版本,存在無法啟動的問題,那麼通過動態掃描的方式也是無法進行的。所以使用加固的應用需要通過靜態+動態掃描白包的方式獲取正在使用的非 SDK 介面,並反饋給谷歌申請加灰名單。

重點關注:

1.應用測試中發現需要申請加入淺灰名單的非 SDK 介面需儘快反饋給谷歌,越晚反饋,谷歌修改的難度將越大,可能導致無法加入灰名單而影響應用功能;

2.谷歌釋出的 DP2 版本中已加入黑名單,建議開發者在 DP2 版本中測試驗證應用呼叫的非 SDK 介面,針對無法整改的非 SDK 介面,及時向谷歌反饋必需使用此介面的詳細原因,申請重新評估該介面。

Android P FAQ系列將持續推出,歡迎大家掃描螢幕下方二維碼關注瞭解更多

相關文章