1. 程式人生 > >史上最嚴管控,Android P非SDK介面管控特性解讀及適配

史上最嚴管控,Android P非SDK介面管控特性解讀及適配

導讀

在 Android P 版本中,谷歌加入了非 SDK 介面使用限制,無論是通過呼叫、反射還是JNI等方式,開發者都無法對非 SDK 介面進行訪問,此介面的濫用將會帶來嚴重的系統相容性問題。

針對谷歌的大動作,開發者該如何快速反應,更便捷、高效的實現P版本的適配?華為專家為您帶來非 SDK 管控特性適配指導的詳細解讀,一起來看看吧。

在開發過程中,開發者如果呼叫了非 SDK 介面,會導致應用出現crash,無法啟動;或在執行過程中出現崩潰、閃退等現象;也可能導致應用功能不可用等嚴重相容性問題,其影響範圍波及所有呼叫此介面的應用,因此,非 SDK 介面管控被譽為Android史上最嚴格的變更特性之一。

一、特性介紹

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 版本對應的程式碼下載:

原始碼下載指導:

下載P版本 Android 工程程式碼後,可直接在工程下編譯執行掃描工具,再進行非 SDK 介面掃描。

非SDK介面整改

目前在P版本中,淺灰名單中的非SDK介面若不整改,仍可以正常使用。開發者需要重點關注的是++深灰名單和黑名單++中的非 SDK 介面,找到可替代的 SDK 介面進行適配。

無法整改的介面:向谷歌申請重新評估

如果呼叫的介面在深灰名單或者黑名單中,且無法找到可替代的SDK介面,可向谷歌提供必需使用此介面的詳細原因,申請重新評估該介面,問題反饋連結:

問題反饋郵件模板:

重點關注

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

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

四、P版本相容性測試驗證方法

方法一:購買谷歌 Pixel、Pixel XL、Pixel2、Pixel 2 XL,刷 P 版本進行測試

版本下載,參考:

刷機

*刷機前需要退出之前登入的谷歌賬號

1.下載對應裝置的壓縮包並解壓;

2.手機連 USB 後,執行 adb reboot bootloader 命令;

3.手機出現小機器人圖案,並顯示‘unlock’字樣時,執行壓縮包中的 bat 指令碼。

如果是“lock”字樣:

1.連續點選設定-版本號7次,開啟開發人員選項;

2.在開發人員選項中開啟 OEM unlock;

3.連線手機到電腦,執行 adb reboot bootloader 命令到小機器人介面;

4.執行 fastboot oem unlock,手機就解鎖了,再使用上面的刷機方法即可。

方法二:遠端真機除錯

1.新使用者註冊使用

新使用者如需申請使用華為終端開放實驗室的雲測功能,需加入安卓綠色聯盟,成為會員。可通過以下步驟申請:

  • 使用所在公司尾綴的郵箱進行賬號註冊;

  • 將您新申請的賬號、所在公司、個人姓名及電話、負責的應用名稱傳送至[email protected],申請成為安卓綠色聯盟會員,通過稽核後,將為您開通使用許可權;

2.登入賬號選擇真機進行遠端除錯

3.選擇手機:Pixel

4.點選“立即體驗”,上傳 APK 進行除錯

方法三:使用谷歌模擬器驗證

安裝和配置 Android P SDK 和模擬器

參考:

相關推薦

管控Android PSDK介面管控特性解讀

導讀 在 Android P 版本中,谷歌加入了非 SDK 介面使用限制,無論是通過呼叫、反射還是JNI等方式,開發者都無法對非 SDK 介面進行訪問,此介面的濫用將會帶來嚴重的系統相容性問題。 針對谷歌的大動作,開發者該如何快速反應,更便捷、高效的實現P版

微信機器人微信執行禁令啥操作會被封號?

這段日子,騰訊對微信進行了頻繁的調整。就在幾天前,微信釋出了新規定,被網友們稱為史上最嚴禁令。新規已於5月29日正式生效。1規範特殊識別碼、口令類資訊傳播為避免過度營銷造成對使用者的騷擾,朋友圈內不允許釋出及傳播具有識別、標記功能的特殊識別碼、口令類資訊。【示例】2規範視聽內

Android Binder機制原理(強理解沒有之一)(轉)

Binder是Android系統程序間通訊(IPC)方式之一。Linux已經擁有的程序間通訊IPC手段包括(Internet Process Connection): 管道(Pipe)、訊號(Signal)和跟蹤(Trace)、插口(Socket)、報文佇列(Messag

Android Binder機制原理(強理解沒有之一)

Binder是Android系統程序間通訊(IPC)方式之一。Linux已經擁有的程序間通訊IPC手段包括(Internet Process Connection): 管道(Pipe)、訊號(Signal)和跟蹤(Trace)、插口(Socket)、報文佇列(Messa

遭遇發票令?富立葉無線開票掃描槍3秒開票!

手動 容易 tar ron 微信 事先 註意 一行 nbsp 7月1日起 史上最嚴發票令正式實施 開發票時必須提供: 1、納稅人識別號 2、單位地址 3、電話號碼 4、開戶銀行 ······ 填寫信息多 開票時間長 手動填寫信息還很容易出錯 稍有不慎,發票無效啊! 然鵝,

**基礎加強:反射註解測試 [全重點web基礎day01] *

測試 1. Junit單元測試: 測試的分類: 1.黑盒測試:不需要寫程式碼,給輸入值,看程式是否能輸出期望的值。 2.白盒測試:需要寫程式碼的。關注程式具體的執行流程。 JUnit的使用:

**MySql基礎 篇1/共2篇 [全重點web基礎day02] *

今日內容: 1. mysql概述 2. sql概述 3. DDl 4. DML MySql概述: 1. 記憶體和檔案的優缺點: * 記憶體:速度快,但是不能永久儲存,資料是臨時狀態。 * 檔案:資料可以永久儲存,操作資料不方便,查詢某個資料。 2. 資料庫

**MySql約束 篇2/共3篇 [全重點web基礎day03] *

今日內容 1. DQL:查詢語句 1. 排序查詢 2. 聚合函式 3. 分組查詢 4. 分頁查詢 2. 約束 3. 多表之間的關係 4. 正規化 5. 資料庫的備份和還原 mysql約束: 1. 分組前篩選用where 分組後用having *

全的資料結構視訊教程分享-絕對是全的共30個!!

資料結構視訊教程下載地址 出自我是碼農 以下資料結構視訊教程是我多年收集的,因為在百度網盤上分享整個教程很快就會被delete,所以我只好花費大量功夫對單個視訊進行一個一個的分享,這樣才能長時間保留下來,為了學習,麻煩些也值得了!現在毫無保留的免費共享給大家,與君共勉! 個人認為資料結構

資料結構視訊教程-絕對是全的共30個!!

史上最全的資料結構視訊教程打包下載地址 本文出自出自我是碼農,轉載請註明出處,謝謝! 以下資料結構視訊教程是我多年收集的,因為在百度網盤上分享整個教程很快就會被delete,所以我只好花費大量功夫對單個視訊進行一個一個的分享,這樣才能長時間保留下來,為了學習,麻煩些也值得了!現在毫無保留的免費共

優秀的快的編輯器VIM(上古神器)

給大家介紹一下非常優秀的一款編輯器vim,它誕生於視覺化介面之前,的一款非常古老的編輯神器,那會兒都是黑乎乎的命令視窗,滑鼠的都沒有 vim可以解放我們一直抓著滑鼠的手,因為vim提供了足夠多的快捷鍵,可以實現滑鼠的所有功能,而且比滑鼠更快,更靈

詳細JVMJava記憶體區域講解

本人免費整理了Java高階資料一共30G,需要自己領取; 傳送門:https://mp.weixin.qq.co

【maven】全教程看了必懂

一、為什麼使用Maven這樣的構建工具【why】 一個專案就是一個工程 如果專案非常龐大,就不適合使用package來劃分模

Android滑動選單特效實現仿人人客戶端側滑效果簡單的側滑實現

                人人客戶端有一個特效還是挺吸引人的,在主介面手指向右滑動,就可以將選單展示出來,而主介面會被隱藏大部分,但是仍有左側的一小部分同選單一起展示。據說人人客戶端的這個特效是從facebook客戶端模仿來的,至於facebook是不是又從其它地方模仿來的就不得而知了。好,今天我們就一

【開源框架】Android簡單有用的第三方開源庫收集整理有助於快速開發歡迎各位網友補充完善

Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫,推薦給在苦苦尋找的開發者,而且我會 不定期的更新 這篇文章。 Android下的優秀

[轉]【開源框架】Android簡單有用的第三方開源庫收集整理有助於快速開發

原文地址:http://www.tuicool.com/articles/jyA3MrU Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫

全面細的Android中layout建立子資料夾

最近我在封裝android播放器 ,裡面的佈局巢狀比較多,layout檔案也比較多,所以想著能不能再layout資料夾下建立子資料夾,經過一系列的查閱與嘗試,最終還是完成了我想要的效果,在此分享給大家。先截圖來一波正確的操作:分解步驟:首先將專案以project目錄開啟1.在

詳細的Android Studio百度地圖(BaiDuMap)開發教程可以當作官方文件的教科書級別教程!

本文是續寫一一哥作品,(一些大神沒想過要寫出來的,而笨小白又不懂的,,稍有完善。) 原文:http://blog.csdn.net/syc000666/article/details/50756551 由於工作原因,需要用到地圖模組,之前一直是用Eclipse開發百度地圖

Linux基礎管理——軟件包管理:rpmyum高級使用方法(沒有之一)

rpm yum 軟件包管理 yum倉庫 yum源地址配置 前言: GRU Linux操作系統中,實現軟件包管理的常見工具有RPM和yum;本專題將就Centos系統中安裝包的命名、校驗、密鑰導入導出、包安裝、卸載、升級、查詢等眾多rpm包管理相關的操作實現進行總結。1、安裝包1.1、

大CPU缺陷Meltdown融毀和Spectre幽靈來襲各網絡設備廠家反饋以及解決方案匯總

dir ase agg 部分 arm 暴露 ace ado shadow 2018新年快樂 新年好,轉眼就到了2018。首先祝福大家新年快樂,萬事如意! 熱鬧的一月 就在大家剛享受完短暫的元旦假期,1月3號互聯網上就爆出了一個非常勁爆的消息,Intel,AMD,ARM的CP