對(duì)有一定經(jīng)驗(yàn)的 Android 玩家來(lái)說(shuō),在下載 App 這件事情上,Play 商店依然是那個(gè)值得排除萬(wàn)難、能上就上的選擇,沒(méi)有之一。坊間還流傳著各種關(guān)于「Play 版」應(yīng)用的傳聞:Play 版應(yīng)用有 FCM 推送、Play 版應(yīng)用更省電、Play 版應(yīng)用沒(méi)廣告、Play 版應(yīng)用有更適合現(xiàn)代設(shè)備的 64 位版本……
這種「Play 版更好」的說(shuō)法究竟是科技圈的都市傳說(shuō)還是確有其事?為什么國(guó)產(chǎn)應(yīng)用在 Play 商店中正變得越來(lái)越少了?
今天這篇文章,我們從一個(gè)對(duì)普通用戶而言可能會(huì)有點(diǎn)陌生的概念——目標(biāo) API 級(jí)別入手,希望能為你解答上面所提到的一部分問(wèn)題。
Android 有幾種寫(xiě)法?
對(duì) Android 系統(tǒng)而言,同一個(gè)系統(tǒng)版本一般都對(duì)應(yīng)了不止一種名稱,比如對(duì)消費(fèi)者而言 Android 12 是 Android 12,或者根據(jù) Google 按照字母表順序命名的習(xí)慣叫做 Android S;而如果 2019 年 Google 沒(méi)有官宣取消甜品代號(hào)命名方式,Android 12 的甜品代號(hào) Snow Cone 應(yīng)該也會(huì)更加為大眾所熟知。
針對(duì)開(kāi)發(fā)者,每個(gè) Android 版本還會(huì)被分配到一個(gè)唯一的整數(shù)標(biāo)識(shí)符,這個(gè)整數(shù)標(biāo)識(shí)符就是 API 級(jí)別。
針對(duì)這些不同的命名方式,GitHub 上也有人做了一個(gè)清晰明了的網(wǎng)站,有興趣的朋友可以去看看。從網(wǎng)站提供的表格不難看出,和一個(gè)甜品代號(hào)可以對(duì)應(yīng)多個(gè) Android 版本不同——比如 Android 7.0 和 Android 7.1 都可以叫「牛軋?zhí)恰埂?/span>API 級(jí)別和 Android 版本是嚴(yán)格對(duì)應(yīng)的。
API 級(jí)別 32 只可能對(duì)應(yīng) Android 12L,Android 12L 的 API 級(jí)別也只能是 32。對(duì)于市面上運(yùn)行系統(tǒng)版本千差萬(wàn)別的 Android 設(shè)備而言(你同樣可以在上面那個(gè)網(wǎng)站中看到不同 Android 版本的累計(jì)用戶占比),API 級(jí)別也成為了開(kāi)發(fā)者辨別用戶系統(tǒng)版本和應(yīng)用運(yùn)行環(huán)境、保證應(yīng)用兼容性的重要參考。
具體而言:
- 最低 API 級(jí)別:代表了應(yīng)用可以運(yùn)行的最低系統(tǒng)版本。如果一款應(yīng)用的最低 API 級(jí)別為 28,那么這款應(yīng)用只能保證在 Android 9 及以上系統(tǒng)版本中的兼容性
- 目標(biāo) API 級(jí)別:代表了應(yīng)用被設(shè)計(jì)用于運(yùn)行的系統(tǒng)版本。如果一款應(yīng)用的目標(biāo) API 級(jí)別為 32,則代表這款應(yīng)用被設(shè)計(jì)用于在 Android 12L 中運(yùn)行,因此也理所當(dāng)然地支持 Android 12L 引入的新特性
參考鏈接:
- 了解 Android API 級(jí)別 – Xamarin | Microsoft Docs
- API Levels
目標(biāo) API 級(jí)別與體驗(yàn)
聊完概念我們?cè)賮?lái)聊聊現(xiàn)象。
即便不談應(yīng)用商店本身的使用體驗(yàn),在能不能下到好應(yīng)用這一核心需求上,Google Play 和各種國(guó)內(nèi)應(yīng)用商店都有著天壤之別。
對(duì)國(guó)內(nèi)應(yīng)用商店而言,兼容各種魚(yú)龍混雜、質(zhì)量參差不齊的應(yīng)用才是頭等大事。畢竟為了賺錢,大部分 Android 設(shè)備默認(rèn)的應(yīng)用商店也都是自家的,如果用戶發(fā)現(xiàn)某個(gè)應(yīng)用無(wú)法正常運(yùn)行,即便這個(gè)應(yīng)用本身做得非常糟糕,他們往往也會(huì)將「鍋」扔給手機(jī)廠商。一傳十十傳百,這家廠商的手機(jī)在這位朋友的圈子里就會(huì)被打上「不推薦」的評(píng)級(jí)。
Google Play 商店不一樣。
在更廣泛的 Android 生態(tài)里,大多數(shù) Android 設(shè)備都會(huì)搭載 GMS 套件、不同廠商的 Android 設(shè)備也能從同一個(gè) Google Play 商店中獲取應(yīng)用。因此 Play 商店作為由 Google 直接控制的應(yīng)用商店,需要做好的就是平臺(tái)本身:如何規(guī)范應(yīng)用行為、如何保證設(shè)備安全、如何進(jìn)行高效分發(fā)……
關(guān)聯(lián)閱讀:必須兼容 PD 快充,Google 為 Android 設(shè)下了這些新標(biāo)準(zhǔn)
相對(duì)而言,Google 的地位也更加主動(dòng)一點(diǎn),如果某款 Play 商店的應(yīng)用無(wú)法正常運(yùn)行,用戶只會(huì)將責(zé)任歸咎于手機(jī)和手機(jī)系統(tǒng)本身,或是在商店里留個(gè)一星差評(píng)罵罵開(kāi)發(fā)者。
解決方案藏在目標(biāo) API 級(jí)別這個(gè)概念里。
通過(guò)讀取應(yīng)用開(kāi)發(fā)者為應(yīng)用聲明的 targetSdkVersion 清單屬性,Android 系統(tǒng)得以判斷這款應(yīng)用的目標(biāo) API 級(jí)別是多少,進(jìn)而確定哪些新特性可以在這款應(yīng)用中啟用、哪些特性則需要做適當(dāng)?shù)募嫒萏幚怼?/span>
以前幾年大家熱切期盼的「沙盒」機(jī)制分區(qū)存儲(chǔ)為例,應(yīng)用必須首先通過(guò)清單屬性告訴 Android 系統(tǒng)「我的目標(biāo) API 級(jí)別是 30,是支持最新特性的好應(yīng)用」,系統(tǒng)在讀取到這一聲明后才會(huì)為應(yīng)用啟用分區(qū)存儲(chǔ)機(jī)制;而對(duì)當(dāng)時(shí)需要時(shí)間過(guò)渡的應(yīng)用而言,它們?cè)诟嬖V系統(tǒng)自己的目標(biāo) API 級(jí)別不夠 30 之后,系統(tǒng)則不會(huì)為這些應(yīng)用啟用「沙盒」機(jī)制。
所以在 Android 開(kāi)發(fā)者網(wǎng)站所列出的各種 API 接口、聲明數(shù)值、字符串等信息旁,也都會(huì)有一行小字說(shuō)明這個(gè)功能是在哪一個(gè) API 級(jí)別中所加入的;在 Android 13 的介紹中,Google 也有一個(gè)專門的頁(yè)面來(lái)說(shuō)明目標(biāo) API 級(jí)別在 Android 13 及以上(另一種說(shuō)法是「以 Android 13 或更高版本為目標(biāo)平臺(tái)」)的應(yīng)用將受到哪些行為變更影響。
兩年為期、相對(duì)嚴(yán)格
我們可以將 2017 年看作是 Google 開(kāi)始著手治理 Android 系統(tǒng)「碎片化」問(wèn)題的開(kāi)始,這一年,Android 系統(tǒng)本身引入了著名的 Project Treble,讓那些有開(kāi)發(fā)實(shí)力的團(tuán)隊(duì)在系統(tǒng)大版本更新這件事情上直接轉(zhuǎn)入了「快車道」。
但系統(tǒng)更新僅僅是一方面,系統(tǒng)更新帶來(lái)的各種新功能,除了手機(jī)廠商的配合,還是需要應(yīng)用開(kāi)發(fā)者這邊積極響應(yīng),才能將 Google 所預(yù)想的 Android 體驗(yàn)帶到用戶手中。
因此也是在 2017 年,Google 開(kāi)始通過(guò) Play 商店對(duì) Android 應(yīng)用的最終體驗(yàn)進(jìn)行干預(yù),首先在 64 位應(yīng)用支持這件事情上開(kāi)始了籌備。2021 年 8 月,經(jīng)過(guò)四年多的籌備和過(guò)渡,Play 商店中的所有應(yīng)用都具備了向 64 位設(shè)備提供對(duì)應(yīng)支持的能力。
同時(shí),近幾年 Play 商店在 API 級(jí)別上的規(guī)范也逐漸成型。
總體而言,對(duì)于那些需要在 Play 商店中持續(xù)提供更新的大部分應(yīng)用,Google Play 商店一般會(huì)提供一年左右的時(shí)間來(lái)讓開(kāi)發(fā)者針對(duì)最新的目標(biāo) API 級(jí)別進(jìn)行適配。
這里 Play 商店將應(yīng)用分成了三類:新應(yīng)用、應(yīng)用更新和現(xiàn)有應(yīng)用,新應(yīng)用指此前從未在 Play 商店發(fā)布過(guò)的應(yīng)用,應(yīng)用更新指已經(jīng)在 Play 商店上架的應(yīng)用所提供的更新版本,現(xiàn)有應(yīng)用則對(duì)應(yīng)那些已經(jīng)發(fā)布在 Play 商店、但并不提供任何更新的應(yīng)用。
舉個(gè)例子,Android 11 正式版發(fā)布于 2020 年 9 月,目前 Google Play 管理中心的要求是:
- 2021 年 8 月 2 日之后,新應(yīng)用必須將目標(biāo) API 級(jí)別設(shè)置為對(duì)應(yīng)的 API 級(jí)別 30
- 2021 年 11 月 1 日之后,應(yīng)用更新必須將 API 級(jí)別設(shè)置為對(duì)應(yīng)的 API 級(jí)別 30
- 2022 年 11 月 1 日之后,現(xiàn)有應(yīng)用必須將目標(biāo) API 級(jí)別設(shè)置為對(duì)應(yīng)的 API 級(jí)別 30
如此一來(lái),新應(yīng)用開(kāi)發(fā)和現(xiàn)有應(yīng)用針對(duì)新版本系統(tǒng)特性跟進(jìn)適配的窗口時(shí)間,便被控制在了系統(tǒng)更新后的一年左右時(shí)間內(nèi)。
至于那些妄圖通過(guò)不提供應(yīng)用更新保留 Play 商店上架狀態(tài)的應(yīng)用,上述限制的存在也有一定的限制作用:2022 年 11 月 1 日之后,如果你的手機(jī)已經(jīng)升級(jí)到了 Android 11 及以上系統(tǒng)版本,那些目標(biāo) API 級(jí)別低于 30 的應(yīng)用就不會(huì)出現(xiàn)在 Play 商店的頁(yè)面和搜索結(jié)果當(dāng)中了。
參考鏈接:Google Play 應(yīng)用在目標(biāo) API 級(jí)別方面需滿足的要求 – Play 管理中心幫助
我們姑且以「Play 商店中能否搜到」這個(gè)行為為前提,對(duì)應(yīng) Android 版本和 API 級(jí)別,梳理一下最近一段時(shí)間內(nèi) Play 版應(yīng)用將會(huì)提供的一些體驗(yàn)。在 2022 年 11 月 1 日后:
所有能在 Play 商店中下載到的應(yīng)用,都將提供分區(qū)存儲(chǔ)(也就是「沙盒」)機(jī)制支持。關(guān)于分區(qū)存儲(chǔ)的詳細(xì)介紹,可以參見(jiàn)少數(shù)派此前的文章。
關(guān)聯(lián)閱讀:還存儲(chǔ)空間一片清朗:Android 的「沙盒」機(jī)制何時(shí)到來(lái)?
在數(shù)月未使用的情況下,已經(jīng)授予的運(yùn)行時(shí)敏感權(quán)限都會(huì)被系統(tǒng)自動(dòng)重置;
權(quán)限自動(dòng)重置與位置權(quán)限始終允許設(shè)置
申請(qǐng)位置信息訪問(wèn)權(quán)限時(shí),最高都只能申請(qǐng)到「僅在使用中允許」,「總是允許」只能在系統(tǒng)設(shè)置中手動(dòng)開(kāi)啟;查詢?cè)O(shè)備上已安裝應(yīng)用的列表時(shí),則只能獲取到系統(tǒng)過(guò)濾后的已安裝應(yīng)用列表。
另外,2022 年 11 月 1 日后,此前已上架應(yīng)用的新版本都將支持 Android 12 的新特性,比如自定義通知布局、應(yīng)用休眠、傳感器采樣率限制、前臺(tái)服務(wù)啟動(dòng)限制、更快的通知操作響應(yīng)速度(trampoline 優(yōu)化)……
參考鏈接:
- Google Play 應(yīng)用在目標(biāo) API 級(jí)別方面需滿足的要求 | Play 管理中心幫助
- 行為變更:以 Android 11 為目標(biāo)平臺(tái)的應(yīng)用 | Android 開(kāi)發(fā)者
- 行為變更:以 Android 12 為目標(biāo)平臺(tái)的應(yīng)用 | Android 開(kāi)發(fā)者
國(guó)內(nèi)還停留在三年前
如果用一句話從用戶角度去概括本文第三部分的所有內(nèi)容,那應(yīng)該是:
在 Android 11 正式版發(fā)布兩年后,所有 Play 商店中能夠搜到的應(yīng)用,無(wú)一例外都是支持 Android 11 新特性的。
所以我們說(shuō) Play 商店在目標(biāo) API 級(jí)別要求上的「嚴(yán)格」,其實(shí)也是一種相對(duì)而言的說(shuō)法。因?yàn)閲?guó)內(nèi)主流應(yīng)用商店在目標(biāo) API 級(jí)別的要求普遍還停留在 3 年前。
2018 年 7 月,電信終端產(chǎn)業(yè)協(xié)會(huì)(TAF)發(fā)布了一份《移動(dòng)應(yīng)用軟件高API等級(jí)預(yù)置與分發(fā)自律公約》,這份公約由 OPPO、華為、百度、360、阿里、小米、vivo、騰訊發(fā)起,要求自 2019 年 5 月 1 日起,新上架和預(yù)置應(yīng)用的目標(biāo) API 級(jí)別為 26 及以上,自 2019 年 8 月 1 日起,現(xiàn)有應(yīng)用的更新則必須以目標(biāo) API 級(jí)別 26 及以上進(jìn)行開(kāi)發(fā)。目標(biāo) API 級(jí)別 26 對(duì)應(yīng)的版本是 Android 8.0,Android 8.0 的正式版發(fā)布時(shí)間是 2017 年 8 月。彼時(shí)的國(guó)內(nèi)主流應(yīng)用商店,還能給出一份與 Google Play 商店節(jié)奏一致的目標(biāo) API 級(jí)別要求。
不知道是電信終端產(chǎn)業(yè)協(xié)會(huì)后續(xù)在這方面沒(méi)有持續(xù)跟進(jìn),還是 Google 在 2020 年的 Android 11 正式版中引入的分區(qū)存儲(chǔ)機(jī)制過(guò)于激進(jìn),國(guó)內(nèi)應(yīng)用商店在目標(biāo) API 級(jí)別要求這件事情上自那之后便陷入了停滯。目前,我們?cè)?OPPO、小米等廠商的相關(guān)開(kāi)發(fā)者文檔中,能夠檢索到的目標(biāo) API 級(jí)別相關(guān)要求大多數(shù)都與三年前那份《移動(dòng)應(yīng)用軟件高API等級(jí)預(yù)置與分發(fā)自律公約》有關(guān)。
我所使用的設(shè)備上所安裝應(yīng)用的目標(biāo) API 級(jí)別統(tǒng)計(jì)
換句話說(shuō),以五年前 Android 8.0 系統(tǒng)體驗(yàn)為基礎(chǔ)的應(yīng)用,依然存在于 2022 年的國(guó)內(nèi)應(yīng)用商店中。至于數(shù)量有多少,你可以下載 AppChecker 這類應(yīng)用自行檢查。
與 Play 商店實(shí)際仍有些保守的做法相比,國(guó)內(nèi)應(yīng)用商店還有更長(zhǎng)的路要走,甚至應(yīng)該先從態(tài)度上重視起來(lái)——比起最近在 64 位應(yīng)用這件事情上的被動(dòng)應(yīng)戰(zhàn),國(guó)內(nèi)應(yīng)用商店、尤其是已經(jīng)有著相當(dāng)大影響力和號(hào)召力的 O、V、華、米幾家國(guó)內(nèi)應(yīng)用商店,應(yīng)該主動(dòng)擁抱的「優(yōu)秀品質(zhì)」還有不少,與時(shí)俱進(jìn)的目標(biāo) API 級(jí)別要求可以是其中之一。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。