Android9.0 如何區(qū)分SDK接口和非 SDK接口

剛剛有同學(xué)問(wèn)我柒竞,不太了解 “非SDK接口” 是什么意思政供?android9.0有什么限制 ?apache的http也有限制 朽基?

而且現(xiàn)在的大部分系統(tǒng)都升級(jí)上來(lái)了布隔,黑名單、灰名單和白名單 也是必須要了解一下的稼虎,這里參考Google開(kāi)發(fā)者網(wǎng)站給大家整理一下衅檀。

首先,公共 SDK 接口是在 Android 框架軟件包索引 中記錄的那些接口霎俩,什么是框架軟件包哀军?

鏈接地址:https://developer.android.google.cn/reference/packages.html

非 SDK 接口 的處理是 API 抽象出來(lái)的實(shí)現(xiàn)細(xì)節(jié),因此這些接口可能會(huì)在不另行通知的情況下隨時(shí)發(fā)生更改打却。

黑名單 無(wú)論應(yīng)用的目標(biāo) API 級(jí)別是什么杉适,都無(wú)法使用此列表中的非 SDK 接口。如果您的應(yīng)用嘗試訪問(wèn)其中任何一個(gè)接口柳击,系統(tǒng)就會(huì)拋出錯(cuò)誤猿推。
灰名單 從 Android 9(API 級(jí)別 28)開(kāi)始,在每個(gè) API 級(jí)別分別會(huì)限制某些非 SDK 接口捌肴。如果應(yīng)用的目標(biāo) API 級(jí)別較低蹬叭,您可以訪問(wèn)灰名單中的受限 API,但如果您的應(yīng)用嘗試訪問(wèn)在您的目標(biāo) API 級(jí)別受限的非 SDK 接口哭靖,系統(tǒng)就會(huì)假定此 API 已列入黑名單具垫。說(shuō)白了,就是只要在您應(yīng)用的目標(biāo) API 級(jí)別不限制此列表中的非 SDK 接口试幽,您就可以使用它們筝蚕。
白名單 此列表中的接口已在 Android 框架軟件包索引中正式記錄卦碾,它們是受支持的接口,您可以自由使用起宽。

有的同學(xué)聽(tīng)完還是比較郁悶……

那換個(gè)說(shuō)法吧洲胖,比如應(yīng)用在通過(guò)反射等機(jī)制與類互動(dòng)時(shí)(WebView、HTTP等)坯沪,android9.0之后就不應(yīng)訪問(wèn) SDK 中未列出的方法或字段绿映,否則會(huì)提示報(bào)錯(cuò),應(yīng)用老老實(shí)實(shí)的用谷歌大佬提供的API就好了腐晾。

來(lái)看谷歌大佬的回應(yīng):

盡管您目前仍可以使用灰名單中的某些非 SDK 接口(取決于您應(yīng)用的目標(biāo) API 級(jí)別)叉弦,但是如果您使用任何非 SDK 方法或字段,終歸存在很可能會(huì)損壞應(yīng)用的風(fēng)險(xiǎn)藻糖。

如果您的應(yīng)用依賴于非 SDK 接口淹冰,則應(yīng)該開(kāi)始計(jì)劃遷移到 SDK 接口或其他替代方案。如果您無(wú)法為應(yīng)用中的功能找到使用非 SDK 接口的替代方案巨柒,則應(yīng)該請(qǐng)求新的公共 API樱拴。

盡管還是可以使用,但后果自負(fù)洋满。

有frameworks的同學(xué)可以看這個(gè)路徑晶乔,此文本包含已列入灰名單的非受限 API 的列表。

入灰名單的非受限 API 的列表

如果非常想使用此接口又找不到替代方案牺勾?

如果非常想使用此接口又找不到替代方案時(shí)怎么辦正罢?可以找Google提需求,如下圖禽最。


python2048Google提需求

其它的說(shuō)明都可以忽略腺怯,主要是確認(rèn)自己的SDK接口到底是不是屬于非SDK接口。

公眾號(hào)奧特曼超人屬于非SDK接口

應(yīng)用調(diào)試時(shí)進(jìn)行測(cè)試

先建議開(kāi)啟lintOptions川无,檢測(cè)一下其他問(wèn)題呛占。

另外在搭載 Android 9(API 級(jí)別 28)或更高版本的設(shè)備或模擬器上構(gòu)建和運(yùn)行可調(diào)試應(yīng)用來(lái)測(cè)試該應(yīng)用是否使用非 SDK 接口。

在您的應(yīng)用上運(yùn)行測(cè)試時(shí)懦趋,如果該應(yīng)用訪問(wèn)了某些非 SDK 接口晾虑,系統(tǒng)就會(huì)輸出一條日志消息。

您可以檢查應(yīng)用的日志消息仅叫,查找以下詳細(xì)信息:

  • 聲明的類帜篇、名稱和類型(采用 Android 運(yùn)行時(shí)所使用的格式)。
  • 訪問(wèn)方式:鏈接诫咱、反射或 JNI
  • 所訪問(wèn)的非 SDK 接口屬于哪個(gè)列表笙隙。

我們可以使用 adb logcat 來(lái)查看這些日志消息,這些消息顯示在所運(yùn)行應(yīng)用的 PID 下坎缭,不過(guò)日志消息看起來(lái)很痛苦……

舉例而言竟痰,日志中可能包含如下條目:

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

我們也可以使用 StrictMode API 進(jìn)行測(cè)試的
記得在主方法里面開(kāi)啟 StrictMode签钩,用 StrictMode API 來(lái)測(cè)試應(yīng)用是否使用 非 SDK 接口 ,怎么開(kāi)啟坏快?打開(kāi) detectNonSdkApiUsage 方法 铅檩,然后使用 penaltyListener 來(lái)接收每次使用 非 SDK 接口的行為所對(duì)應(yīng)的回調(diào),并且可以在其中實(shí)現(xiàn)自定義處理莽鸿。

回調(diào)中提供的 Violation 對(duì)象派生自 Throwable昧旨,并且封閉式堆棧軌跡會(huì)提供相應(yīng)使用行為的上下文。

當(dāng)然祥得,我們也可以使用 veridex 工具進(jìn)行測(cè)試的

您還可以在 APK 上運(yùn)行靜態(tài)分析工具 veridex兔沃。veridex 工具 會(huì)掃描 APK 的整個(gè)代碼庫(kù)(包括所有第三方庫(kù)),并報(bào)告發(fā)現(xiàn)的所有使用非 SDK 接口的行為啃沪。

veridex工具檢測(cè)

不過(guò) veridex 工具存在以下局限性:

  • 它無(wú)法檢測(cè)到通過(guò) JNI 實(shí)現(xiàn)的調(diào)用粘拾。
  • 它只能檢測(cè)到一部分通過(guò)反射實(shí)現(xiàn)的調(diào)用窄锅。
  • 它對(duì)非活動(dòng)代碼路徑的分析僅限于 API 級(jí)別的檢查创千。

有的人會(huì)好奇,它對(duì)原生代碼中的非 NDK 接口是否有限制入偷?Google大佬回應(yīng)追驴,Android SDK 包含 Java 接口。Android 平臺(tái)從 Android 7(API 級(jí)別 26)開(kāi)始就已經(jīng)限制訪問(wèn)原生 C/C++ 代碼中的非 NDK 的接口了疏之。


python2048微信公眾號(hào)

作者:奧特曼超人Dujinyang

來(lái)源:CSDN

原文:dujinyang.blog.csdn.net/

版權(quán)聲明:本文為博主杜錦陽(yáng)原創(chuàng)文章殿雪,轉(zhuǎn)載請(qǐng)附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锋爪,一起剝皮案震驚了整個(gè)濱河市丙曙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌其骄,老刑警劉巖亏镰,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拯爽,居然都是意外死亡索抓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門毯炮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逼肯,“玉大人,你說(shuō)我怎么就攤上這事桃煎±捍保” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵为迈,是天一觀的道長(zhǎng)三椿。 經(jīng)常有香客問(wèn)我奈揍,道長(zhǎng),這世上最難降的妖魔是什么赋续? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任男翰,我火速辦了婚禮,結(jié)果婚禮上纽乱,老公的妹妹穿的比我還像新娘蛾绎。我一直安慰自己,他們只是感情好鸦列,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布租冠。 她就那樣靜靜地躺著,像睡著了一般薯嗤。 火紅的嫁衣襯著肌膚如雪顽爹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天骆姐,我揣著相機(jī)與錄音镜粤,去河邊找鬼。 笑死玻褪,一個(gè)胖子當(dāng)著我的面吹牛肉渴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播带射,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼同规,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了窟社?” 一聲冷哼從身側(cè)響起券勺,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灿里,沒(méi)想到半個(gè)月后关炼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钠四,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年盗扒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀去。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侣灶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缕碎,到底是詐尸還是另有隱情褥影,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布咏雌,位于F島的核電站凡怎,受9級(jí)特大地震影響校焦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜统倒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一寨典、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧房匆,春花似錦耸成、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至岳链,卻和暖如春花竞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掸哑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工约急, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人举户。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓烤宙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親俭嘁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容