導讀
在 Android P 版本中,谷歌加入了非 SDK 介面使用限制,無論是通過呼叫、反射還是JNI等方式,開發者都無法對非 SDK 介面進行訪問,此介面的濫用將會帶來嚴重的系統相容性問題。
針對谷歌的大動作,開發者該如何快速反應,更便捷、高效的實現P版本的適配?華為專家為您帶來非 SDK 管控特性適配指導的詳細解讀,一起來看看吧。
在開發過程中,開發者如果呼叫了非 SDK 介面,會導致應用出現crash,無法啟動;或在執行過程中出現崩潰、閃退等現象;也可能導致應用功能不可用等嚴重相容性問題,其影響範圍波及所有呼叫此介面的應用,因此,非 SDK 介面管控被譽為Android史上最嚴格的變更特性之一。
一、特性介紹
SDK 介面:
developer.android.google.cn/reference/p…,能夠在谷歌網站查詢到的介面都是 SDK 介面;
非 SDK 介面:
除以上的 SDK 介面外,其他都是非 SDK 介面
應用濫用 non-SDK interfaces 的危害:
非 SDK 介面在版本之間可能有所變化,將帶來相容性問題。
非 SDK 介面管控名單:
名單說明
非 SDK 介面呼叫警告
-
所有私有 API 均在 Logcat 中顯示警告。
-
DP版本在 Activity 開始時會顯示 Toast 警告。
-
Debuggable 應用出現對話方塊警告,彈框內容和 Toast 提示內容一致。
-
從 DP2 開始,由StrictMode內新增的detectNonSdkApiUsage()來檢測違規的呼叫。
-
正式商用版本將去掉 Toast 警告和對話方塊提示。
二、相容性影響
影響範圍
呼叫非 SDK(包括深灰名單、黑名單)介面的所有應用都將受到影響
具體影響
在 Developer Preview後續版本中,各種訪問非SDK介面的方法都會產生錯誤或其他不良結果:
三、相容性適配指導
獲取應用使用的所有非 SDK 介面列表
輸出非 SDK 介面列表:
非 SDK 介面掃描方法
方法1:動態執行,通過日誌分析掃描
通過自動化或人工測試,遍歷應用每一個介面和所有功能,抓取日誌分析呼叫的所有非 SDK 介面。
關鍵日誌
*Accessinghidden field Landroid/os/Message;->flags:I (light greylist, JNI)
*Accessing hidden method
Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;(dark greylist, reflection)
*Accessing hidden method
Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;(blacklist, reflection)
方法2:靜態掃描,通過谷歌提供的 Veridex 掃描工具掃描
-
工具路徑:art/tools/veridex/
-
工具編譯:make appcompat
-
工具執行:
./art/tools/veridex/appcompat.sh --dex-file=test.apk
使用帶引數的命令掃描可使掃描的結果更全面,但可能存在誤報的情況:./art/tools/veridex/appcompat.sh --dex-file=test.apk --imprecise
- 輸出掃描結果:
-
備註:已經加固的應用,需要使用加固前的 APK進行掃描
-
工具下載:
谷歌已開放 DP2 版本對應的程式碼下載:
android.googlesource.com/platform/ar…
原始碼下載指導:
source.android.google.cn/setup/downl…
下載P版本 Android 工程程式碼後,可直接在工程下編譯執行掃描工具,再進行非 SDK 介面掃描。
非SDK介面整改
目前在P版本中,淺灰名單中的非SDK介面若不整改,仍可以正常使用。開發者需要重點關注的是++深灰名單和黑名單++中的非 SDK 介面,找到可替代的 SDK 介面進行適配。
無法整改的介面:向谷歌申請重新評估
如果呼叫的介面在深灰名單或者黑名單中,且無法找到可替代的SDK介面,可向谷歌提供必需使用此介面的詳細原因,申請重新評估該介面,問題反饋連結:
issuetracker.google.com/issues/new?…
問題反饋郵件模板:
重點關注
-
應用測試發現需要申請加入淺灰名單的非SDK介面需儘快反饋給谷歌,越晚反饋,谷歌修改的難度將越大,可能會導致無法加入灰名單而影響應用的功能;
-
谷歌釋出的 DP2 版本中已加入黑名單,建議開發者在DP2版本中測試驗證應用呼叫的非 SDK 介面,針對無法整改的非SDK介面,及時向谷歌反饋必需使用此介面的詳細原因,申請重新評估該介面。
四、P版本相容性測試驗證方法
方法一:購買谷歌 Pixel、Pixel XL、Pixel2、Pixel 2 XL,刷 P 版本進行測試
版本下載,參考:
developer.android.google.cn/preview/dow…
刷機
*刷機前需要退出之前登入的谷歌賬號
1.下載對應裝置的壓縮包並解壓;
2.手機連 USB 後,執行 adb reboot bootloader 命令;
3.手機出現小機器人圖案,並顯示‘unlock’字樣時,執行壓縮包中的 bat 指令碼。
如果是“lock”字樣:
1.連續點選設定-版本號7次,開啟開發人員選項;
2.在開發人員選項中開啟 OEM unlock;
3.連線手機到電腦,執行 adb reboot bootloader 命令到小機器人介面;
4.執行 fastboot oem unlock,手機就解鎖了,再使用上面的刷機方法即可。
方法二:遠端真機除錯
1.新使用者註冊使用
新使用者如需申請使用華為終端開放實驗室的雲測功能,需加入安卓綠色聯盟,成為會員。可通過以下步驟申請:
-
登入https://deveco.huawei.com/;
-
使用所在公司尾綴的郵箱進行賬號註冊;
-
將您新申請的賬號、所在公司、個人姓名及電話、負責的應用名稱傳送至deveco@huawei.com,申請成為安卓綠色聯盟會員,通過稽核後,將為您開通使用許可權;
2.登入賬號選擇真機進行遠端除錯
3.選擇手機:Pixel
4.點選“立即體驗”,上傳 APK 進行除錯
方法三:使用谷歌模擬器驗證
安裝和配置 Android P SDK 和模擬器
參考:
https://developer.android.google.cn/preview/setup-sdk