Just My Life & My Work

[Android] 關於 SDK 編譯版本

將 App 送審已成為我工作不會缺少的一部分,但那也只是對 iOS App 有成百上千的次數。這次面臨要將 Android App 送審,心想應該大同小異才是!🤠

在專案設定中有三個地方跟 SDK 有關:

  • minSdkVersion
  • compileSdkVersion
  • targetSdkVersion

以上三個值,可以在 build.gradle 找到,其中又以 targetSdkVersion 最為重要,主要因為會影響程式碼運作。我就是在這裡踩到坑⋯⋯

來看一下這三者的使用說明:

minSdkVersion

  • minSdkVersion 是應用程式可以運行版本的最低要求,是 Google Play 商店用來判斷用戶設備是否可以安裝此應用的指標之一。
  • Support Library 或 Google Play Services,可能有他們自己的 minSdkVersion。你的應用程式設置的 minSdkVersion 必需大於等於這些 Library 的 minSdkVersion 。(例如有三個 Library 分別是 4, 7 和 9 那麼你的 minSdkVersion 必需至少是 9 才能使用它們。)
  • minSdkVersion Android 分佈統計,它提供了最近 7 天所有訪問 Google Play 的設備訊息。
  • 其中提醒的是,在 14億 設備中佔的 0.7% 也是個不小的數字。

compileSdkVersion

  • compileSdkVersion 是告訴 Gradle 決定用哪一個 Android SDK 版本,來編譯你的應用程式。
  • 修改 compileSdkVersion 不會修改程式運作行為,但有可能會出新的編譯警告或錯誤,建議修復這些警告。
  • 官方強烈推薦使用最新的 SDK 進行編譯(避免開發中的應用程式,使用到棄用的 API,也可以為使用新的 API 做好準備)
  • 使用最新發布的 Support Library 就需要使用最新的 SDK 編譯(至少大版本號需要一致,如 23.1.1 的 Support Library,compileSdkVersion 就必需至少是 23)。

targetSdkVersion

  • targetSdkVersion 是 Android 提供向前相容最主要依據(舊版本能否適應新版本的應用)
  • targetSdkVersion 更改務必做全面性的測試。
  • 綜合上面來看三者關係為:
    • minSdkVersion <= targetSdkVersion <= compileSdkVersion
  • 理想上,在穩定狀態下三者的關係應該為:
    • minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)
  • 用最低的 minSdkVersion 來含蓋最大的使用族群,用最新的SDK設置 target 和 compile 來獲得最好的外觀和行為

將 targetSdkVersion 從 29 改為 30(必要,因為才能上傳版本),發現會 Crash 的程式碼區段:

mToast.getView().isShown()

錯誤提示:

java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean android.view.View.isShown()’ on a null object reference

怎麼解決?我先註解掉啦⋯⋯反正不影響功能的使用~😛

為什麼我要把 targetSdkVersion 從 29 改為 30?當然是 Google 硬性規定,不然就不給上傳版本啦!

自2021 年8 月起,全新應用需要:

  • 使用 Android App Bundle 格式發布。
  • 使用 Play Asset DeliveryPlay Feature Delivery 分發所有下載體積超過150MB 的資源或功能。對於全新應用,擴展文件(OBB) 將不再受支持。
  • 以 API 級別 30 (Android 11) 或更高級別為目標運行環境,並針對行為變更進行調整;Wear OS 應用除外,此類應用必須繼續以 API 級別 28 或更高級別為目標運行環境。

從 2021 年 11 月開始,新版應用必須以 API 級別 30 或更高版本為目標運行環境,並針對 Android 11 中的行為變更進行調整。未收到更新的現有應用不會受到影響,用戶可以繼續從 Play 商店下載。Wear OS 應用必須繼續以 API 級別 28 或更高級別為目標運行環境。

為何要以較新的 SDK 為目標平台?

每個新的 Android 版本都會發生變更,帶來安全性和性能方面的重大改進,並提升 Android 的整體用戶體驗。部分變更只會影響通過 targetSdkVersion 清單屬性(也稱為目標 API 級別)明確聲明支持這些變更的應用。

將您的應用配置為使用新近的 API 級別可確保用戶享受這些改進帶來的好處,同時您的應用仍然可以在較低版本的 Android 上運行。支持最新的API 級別還有助於讓您的應用利用平台的最新功能,為用戶提供愉悅的體驗。此外,從 Android 10(API 級別 29)開始,如果應用的目標平台為 Android 5.1(API 級別 22)或更低版本,則用戶首次啟動應用時會看到警告

這部分跟 iOS App 規則差很大~😳

  • iOS:Xcode 有預設版本,尚可調整為前一個版本。例如:Xcode 12 以 iOS 14 編譯,Xcode 13 以 iOS 15 編譯。
  • Android:則是根據 targetSdkVersion 編譯。

參考:符合Google Play 的目標API 級別要求

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: