簡(jiǎn)評(píng):或許在 Android 應(yīng)用身后的巨石開(kāi)始滾起來(lái)了史隆。
最近 Google 對(duì)于 Play Store 應(yīng)用 targetSdkVersion 的最低要求引發(fā)了一些開(kāi)發(fā)者的擔(dān)憂锁蠕。如果您上架應(yīng)用的 minSdkVersion 低于 11连锯,那么有必要在最近的幾個(gè)月開(kāi)始考慮這個(gè)問(wèn)題了顽馋。
在十二月中旬替裆,Google 宣布了從 2018 年開(kāi)始啸蜜,在 Play Store 所發(fā)布應(yīng)用(無(wú)論是新應(yīng)用或是舊應(yīng)用更新)的 targetSdkVersion 需要為 26(Android O) 或以上江兢。對(duì)于新應(yīng)用將從 2018 年 8 月開(kāi)始執(zhí)行,對(duì)于舊應(yīng)用的更新從 2018 年 11 月開(kāi)始執(zhí)行读规。并且這將是一個(gè)持續(xù)的過(guò)程抓督,比如在 2019 年對(duì)應(yīng)用 targetSdkVersion
的最低要求將上升到 Android P,以此類推束亏。
而從 v26.0.0 開(kāi)始铃在,Android support 庫(kù)的 minSdkVersion 提高到了 14(Android 4.0)。因此碍遍,對(duì)于維護(hù)舊設(shè)備應(yīng)用的開(kāi)發(fā)者來(lái)說(shuō)就會(huì)遇到些麻煩了:
如果嘗試在 Play Store 發(fā)布 targetSdkVersion 低于 26 的應(yīng)用定铜,那么會(huì)被 Play Store 拒絕。
如果將應(yīng)用的 targetSdkVersion 提升到 26 或以上怕敬。那 Android Studio 會(huì)提示 support 庫(kù)和 targetSdkVersion 版本不匹配揣炕。
如果再提高 support 庫(kù)的版本來(lái)匹配 targetSdkVersion,由于 support 庫(kù)的 minSdkVersion 為 14东跪,那么還得提高應(yīng)用的 minSdkVersion 來(lái)匹配 support 庫(kù)的 minSdkVersion畸陡。
因此,Play Store 和 support 庫(kù)之間對(duì)于 SDK 版本要求的提升虽填,一定程度上會(huì)幫助淘汰掉部分老舊設(shè)備丁恭。并且,預(yù)計(jì) Google 在未來(lái)的幾年還將進(jìn)一步提高 support 庫(kù)的 minSdkVersion(下一次可能是升級(jí)到 21)卤唉。
按照 Google 的說(shuō)法涩惑,這樣做的部分原因是出于安全因素的考慮仁期。淘汰掉支持老舊設(shè)備的應(yīng)用能促使用戶購(gòu)買(mǎi)替代的設(shè)備(或許也有助于各手機(jī)廠商快速升級(jí)自家 ROM 所基于的 Android 版本)桑驱,從而提高整體的安全性竭恬。
不過(guò),不是所有的開(kāi)發(fā)者都對(duì)這一舉動(dòng)感到高興熬的。對(duì)于 Google 的這項(xiàng)措施痊硕,作為一名必須維護(hù)老舊應(yīng)用的開(kāi)發(fā)者可以采取的做法:
使用 manifest merger 和相關(guān)技術(shù)來(lái)使用較新版本的 support 庫(kù)。不過(guò)這種做法是很有風(fēng)險(xiǎn)的押框,因?yàn)?Google 已經(jīng)計(jì)劃在 support 庫(kù)中刪除一些廢棄的方法和代碼岔绸,如果采取這種做法,請(qǐng)非常徹底的測(cè)試橡伞。
使用 Gradle 的 //noinspection GradleCompatible 注釋來(lái)消除錯(cuò)誤提示盒揉。這樣你就可以繼續(xù)使用 v25.3.1 的 support 庫(kù),并將應(yīng)用的 targetSdkVersion 改為 26 來(lái)滿足 Play Store 的要求兑徘。這要比上面的做法更安全刚盈,但風(fēng)險(xiǎn)會(huì)隨著所用 support 庫(kù)的 minSdkVersion 和 Play Store 要求的 targetSdkVersion 版本差距的逐漸增大而增加。
為舊設(shè)備用戶使用其他的應(yīng)用分發(fā)渠道挂脑。
停止使用 support 庫(kù)藕漱,雖然這不太現(xiàn)實(shí)。
去自己維護(hù)或使用別人維護(hù)的 support 庫(kù)的分支來(lái)代替官方庫(kù)崭闲,保證能向下兼容到更低的版本肋联。
去向 Google 反應(yīng)不要強(qiáng)制要求應(yīng)用的 targetSdkVersion,雖然很有可能他們不會(huì)聽(tīng)刁俭。
最后橄仍,即使你應(yīng)用當(dāng)前的 minSdkVersion 已經(jīng)是 14 或更高了,你也需要開(kāi)始思考在未來(lái)的幾年 Google 可能再次提升 support 庫(kù)的 minSdkVersion 的這一事實(shí)牍戚。如果沒(méi)有別的辦法沙兰,可以事先與用戶建立起溝通渠道,讓他們了解到這些問(wèn)題和你們的計(jì)劃翘魄。