2021年6月3日 星期四

如何讓程式在不同版本的SDK執行

Android 的 API 很多
compiler 時,常因版本問題無法通過
可以透過以下方法解決


使用 RequiresApi
格式:
@RequiresApi(api = [SDK版本編號])
sample:
@RequiresApi(api = 26)
private void test()
{
....
}
裝置在執行這個函式時會檢查
如果 API 版本不夠高,整個函式都不會被執行
雖然比較簡單(Android Studio 可以自動產生)
但,遇到舊版API,雖不致當掉,但整段函式都不執行
官方說明:
RequiresApi@Android Developers


(程式內)執行前檢查 SDK 版本
if (android.os.Build.VERSION.SDK_INT >=[ver])
{
執行程式
}
sample:
if (Build.VERSION.SDK_INT >= 26)
{
  myVibrator.vibrate (VibrationEffect.createWaveform(pattern, repeat));
}
else
{
  myVibrator.vibrate(pattern, repeat);
}
執行到底該處
如果 API 版本不夠高時,不執行該段程式
(不會因執行該段而當掉)
稍好一點
遇到 API 版本不夠高時,仍會執行函式
但會跳過新版功能,以免掛掉


Android 的 SDK 很多
還是希望程式盡可能多種裝置都正常執行

程式內依版本決定執行方式
if (android.os.Build.VERSION.SDK_INT >=[ver])
{
 使用新版方法
}
else
{
 使用舊版方法
}
有時候會遇到較複雜狀況:

if (android.os.Build.VERSION.SDK_INT >=28)
{
  SDK> 28 可用的API
}
else if (android.os.Build.VERSION.SDK_INT >=26)
{
  SDK> 26 可用的API
}
else
{
  SDK<26 可用的API
}

官方文件

這裡可以查到版本對應 API Levels@Android Developers