簡評:或許在 Android 應用身后的巨石開始滾起來了。
最近 Google 對于 Play Store 應用 targetSdkVersion 的最低要求引發了一些開發者的擔憂。如果您上架應用的 minSdkVersion 低于 11,那么有必要在最近的幾個月開始考慮這個問題了。
在十二月中旬,Google 宣布了從 2018 年開始,在 Play Store 所發布應用(無論是新應用或是舊應用更新)的 targetSdkVersion 需要為 26(Android O) 或以上。對于新應用將從 2018 年 8 月開始執行,對于舊應用的更新從 2018 年 11 月開始執行。并且這將是一個持續的過程,比如在 2019 年對應用 targetSdkVersion
的最低要求將上升到 Android P,以此類推。
而從 v26.0.0 開始,Android support 庫的 minSdkVersion 提高到了 14(Android 4.0)。因此,對于維護舊設備應用的開發者來說就會遇到些麻煩了:
如果嘗試在 Play Store 發布 targetSdkVersion 低于 26 的應用,那么會被 Play Store 拒絕。
如果將應用的 targetSdkVersion 提升到 26 或以上。那 Android Studio 會提示 support 庫和 targetSdkVersion 版本不匹配。
如果再提高 support 庫的版本來匹配 targetSdkVersion,由于 support 庫的 minSdkVersion 為 14,那么還得提高應用的 minSdkVersion 來匹配 support 庫的 minSdkVersion。
因此,Play Store 和 support 庫之間對于 SDK 版本要求的提升,一定程度上會幫助淘汰掉部分老舊設備。并且,預計 Google 在未來的幾年還將進一步提高 support 庫的 minSdkVersion(下一次可能是升級到 21)。
按照 Google 的說法,這樣做的部分原因是出于安全因素的考慮。淘汰掉支持老舊設備的應用能促使用戶購買替代的設備(或許也有助于各手機廠商快速升級自家 ROM 所基于的 Android 版本),從而提高整體的安全性。
不過,不是所有的開發者都對這一舉動感到高興。對于 Google 的這項措施,作為一名必須維護老舊應用的開發者可以采取的做法:
使用 manifest merger 和相關技術來使用較新版本的 support 庫。不過這種做法是很有風險的,因為 Google 已經計劃在 support 庫中刪除一些廢棄的方法和代碼,如果采取這種做法,請非常徹底的測試。
使用 Gradle 的 //noinspection GradleCompatible 注釋來消除錯誤提示。這樣你就可以繼續使用 v25.3.1 的 support 庫,并將應用的 targetSdkVersion 改為 26 來滿足 Play Store 的要求。這要比上面的做法更安全,但風險會隨著所用 support 庫的 minSdkVersion 和 Play Store 要求的 targetSdkVersion 版本差距的逐漸增大而增加。
為舊設備用戶使用其他的應用分發渠道。
停止使用 support 庫,雖然這不太現實。
去自己維護或使用別人維護的 support 庫的分支來代替官方庫,保證能向下兼容到更低的版本。
去向 Google 反應不要強制要求應用的 targetSdkVersion,雖然很有可能他們不會聽。
最后,即使你應用當前的 minSdkVersion 已經是 14 或更高了,你也需要開始思考在未來的幾年 Google 可能再次提升 support 庫的 minSdkVersion 的這一事實。如果沒有別的辦法,可以事先與用戶建立起溝通渠道,讓他們了解到這些問題和你們的計劃。