作者:?軟件工程師 David Brazdi 和 Nicolas Geoffray
在 Android 生態(tài)中晤碘,我們非常重視為用戶和開發(fā)者提供最好的體驗屑咳。每一次版本更新都會引入新的功能,助力開發(fā)者打造完美的用戶體驗外傅;然而,我們發(fā)現(xiàn)一些應用開發(fā)者在開發(fā)過程中調(diào)用了非 SDK 接口,導致用戶頻繁遭遇應用不兼容甚至崩潰岛心,并給開發(fā)者帶來緊急發(fā)布補丁等困擾。我們希望能做得更好篮灼,因此需要各位開發(fā)者的共同協(xié)助忘古,來確保每個 Android 新版本的穩(wěn)定性。
三個月前诅诱,我們宣布從 Android P 開始限制非 SDK 接口的使用髓堪。我們知道這些限制可能對您的應用發(fā)布造成影響,因此我們?yōu)殚_發(fā)者提供了相關工具用以檢測違規(guī)調(diào)用娘荡,幫助各位在計劃中預留充足時間干旁,針對谷歌新發(fā)布的政策調(diào)整,并向我們提供反饋炮沐。
在開發(fā)者預覽版和?Beta 1 版本中争群,我們通過多種方式告知了開發(fā)者這些限制對應用造成的影響。在開發(fā)者預覽版中大年,被限制 API 的調(diào)用信息會被記錄在日志中换薄,并顯示相應的 Toast 警告玉雾;而在 Beta 1 版本中,開發(fā)者可以通過使用StrictMode?檢測非 SDK 接口的調(diào)用专控,并自行記錄日志消息抹凳。比如:
我們理解應用調(diào)用非 SDK 接口有很多原因,而確保您的應用能夠繼續(xù)在 Android P 上順利運行對我們而言非常重要伦腐。我們十分感謝很多開發(fā)者通過錯誤追蹤器?(issue tracker) 進行反饋并詳細解釋對一些非 SDK 接口的需求赢底。對于大部分的請求,我們已將相關的非 SDK 接口添加至灰名單柏蘑,從而暫時豁免了它們在 Android P 上的限制幸冻。同時,我們團隊也投入了大量資源咳焚,在百萬個應用上運行靜態(tài)分析洽损,同時處理數(shù)千份來自內(nèi)外部 beta 測試人員的自動生成報告。借助分析結(jié)果革半,我們識別出了更多應用依賴的非 SDK 接口碑定,并相應地對灰名單進行了增補。此外又官,我們將會在未來發(fā)布的系統(tǒng)版本中延刘,探討是否存在公有 SDK 來替代灰名單中的接口。不過六敬,我們或許仍然漏掉了一些正在被使用的非 SDK 接口碘赖。因此,為了將應用不兼容的風險降至最低外构,targetSdkVersion 為 Android Oreo 或更低的應用依舊可以調(diào)用大部分非 SDK 接口普泡。
總而言之,在 Android P 上運行的應用會受到非 SDK 接口使用限制审编。如果您的目標版本為 Android P撼班,請查看灰名單中包含的仍然可以調(diào)用的非 SDK 接口,灰名單以外的非 SDK 接口均不可調(diào)用垒酬。如果應用的目標版本為 Android Oreo 或更低权烧,大部分的限制會被豁免,但是如果調(diào)用的非 SDK 接口不在灰名單中伤溉,那么應用會在 logcat 中收到警告信息 (對用戶不可見)般码。
請您在我們新發(fā)布的?Beta 2 版本上進行測試,并使用?StrictMode?來檢測仍在使用的非 SDK 接口乱顾。請注意:Beta 2 版本和最終穩(wěn)定版對非 SDK 接口的使用限制基本一致板祝。您可在文章下方留言,提出您在開發(fā)過程中遇到的相關問題或分享您的想法走净。
點擊查看《對于非 SDK 接口的限制》文檔了解詳細信息