TShopping

 找回密碼
 註冊
搜索
查看: 306|回復: 0

[教學] Android Build.VERSION.SDK_INT兼容介紹

[複製鏈接]
發表於 2015-10-26 07:27:59 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
Android Build.VERSION.SDK_INT兼容介紹

儘管Android向下兼容不好,但是一個程序還是可以在多個平台上跑的。向下兼容不好,接口改變,新的平台上不能用舊的API,舊的平台更不可能用新的API,不等於一個平台需要一個APK。可以在高SDK上開發,並在程序中作版本判斷,低版本運行環境使用舊的API。 例如要開發一個顯示通話記錄的程序,需要兼容1.6~2.2,我們知道不同的平台SDK level不同,1.5是3,1.6是4,2.2是8。對應的可以使用android.os.Build進行判斷。源代碼如下:

Java代碼
  1. if(Build.VERSION.SDK_INT <= 4)
  2. {
  3. Toast.makeText(this, "version" + Build.VERSION.RELEASE+ " :" + Build.VERSION.SDK_INT, Toast.LENGTH_SHORT).show();
  4. }
  5. else
  6. {
  7. Toast.makeText(this, "version" + Build.VERSION.RELEASE+ " :" + Build.VERSION.SDK_INT, Toast.LENGTH_SHORT).show();
  8. }
複製代碼

轉自:http://www.linuxidc.com/Linux/2011-11/48325.htm

Java代碼



android.os.Build
  1. Build.BOARD // 主板
  2. Build.BRAND // android系統定製商
  3. Build.CPU_ABI // cpu指令集
  4. Build.DEVICE // 設備參數
  5. Build.DISPLAY // 顯示屏參數
  6. Build.FINGERPRINT // 硬件名稱
  7. Build.HOST
  8. Build.ID // 修訂版本列表
  9. Build.MANUFACTURER // 硬件製造商
  10. Build.MODEL // 版本
  11. Build.PRODUCT // 手機製造商
  12. Build.TAGS // 描述build的標籤
  13. Build.TIME
  14. Build.TYPE // builder類型
  15. Build.USER
  16. // 運行結果
  17. /*
  18. board: unknown
  19. brand: generic
  20. cpu abi: armeabi
  21. device: generic
  22. display: google_sdk-eng 2.1 ERD79 22607 test-keys
  23. finger print: generic/google_sdk/generic/:2.1/ERD79/22607:eng/test-keys
  24. host: genki.mtv.corp.google.com
  25. id: ERD79
  26. manufacturer: unknown
  27. model: google_sdk
  28. product: google_sdk
  29. tags: test-keys
  30. time: 1261185425000
  31. type: eng
  32. user: android-build
  33. */
  34. Build.BOARD // 主板
  35. Build.BRAND // android系統定製商
  36. Build.CPU_ABI // cpu指令集
  37. Build.DEVICE // 設備參數
  38. Build.DISPLAY // 顯示屏參數
  39. Build.FINGERPRINT // 硬件名稱
  40. Build.HOST
  41. Build.ID // 修訂版本列表
  42. Build.MANUFACTURER // 硬件製造商
  43. Build.MODEL // 版本
  44. Build.PRODUCT // 手機製造商
  45. Build.TAGS // 描述build的標籤
  46. Build.TIME
  47. Build.TYPE // builder類型
  48. Build.USER
  49. // 運行結果
  50. /*
  51. board: unknown
  52. brand: generic
  53. cpu abi: armeabi
  54. device: generic
  55. display: google_sdk-eng 2.1 ERD79 22607 test-keys
  56. finger print: generic/google_sdk/generic/:2.1/ERD79/22607:eng/test-keys
  57. host: genki.mtv.corp.google.com
  58. id: ERD79
  59. manufacturer: unknown
  60. model: google_sdk
  61. product: google_sdk
  62. tags: test-keys
  63. time: 1261185425000
  64. type: eng
  65. user: android-build
  66. */
  67. Build.VERSION
  68. Java代碼
  69. // 當前開發代號
  70. Build.VERSION.CODENAME
  71. // 源碼控製版本號
  72. Build.VERSION.INCREMENTAL
  73. // 版本字符串
  74. Build.VERSION.RELEASE
  75. // 版本號
  76. Build.VERSION.SDK
  77. // 版本號
  78. Build.VERSION.SDK_INT
  79. // 結果
  80. /*
  81. REL
  82. 22607
  83. 2.1
  84. 7
  85. 7
  86. */
  87. // Build.VERSION.SDK_INT可與switch搭配用
  88. switch (Build.VERSION.SDK_INT) {
  89. case Build.VERSION_CODES.BASE: // 1.0
  90. break;
  91. case Build.VERSION_CODES.BASE_1_1: // 1.1
  92. break;
  93. case Build.VERSION_CODES.CUPCAKE: // 1.5
  94. break;
  95. case Build.VERSION_CODES.CUR_DEVELOPMENT: // current dev version
  96. break;
  97. case Build.VERSION_CODES.DONUT: // 1.6
  98. break;
  99. case Build.VERSION_CODES.ECLAIR: // 2.0
  100. break;
  101. case Build.VERSION_CODES.ECLAIR_0_1: // 2.0.1
  102. break;
  103. case Build.VERSION_CODES.ECLAIR_MR1: // 2.1
  104. break;
  105. }
  106. // 當前開發代號
  107. Build.VERSION.CODENAME
  108. // 源碼控製版本號
  109. Build.VERSION.INCREMENTAL
  110. // 版本字符串
  111. Build.VERSION.RELEASE
  112. // 版本號
  113. Build.VERSION.SDK
  114. // 版本號
  115. Build.VERSION.SDK_INT
  116. // 結果
  117. /*
  118. REL
  119. 22607
  120. 2.1
  121. 7
  122. 7
  123. */
  124. // Build.VERSION.SDK_INT可與switch搭配用
  125. switch (Build.VERSION.SDK_INT) {
  126. case Build.VERSION_CODES.BASE: // 1.0
  127. break;
  128. case Build.VERSION_CODES.BASE_1_1: // 1.1
  129. break;
  130. case Build.VERSION_CODES.CUPCAKE: // 1.5
  131. break;
  132. case Build.VERSION_CODES.CUR_DEVELOPMENT: // current dev version
  133. break;
  134. case Build.VERSION_CODES.DONUT: // 1.6
  135. break;
  136. case Build.VERSION_CODES.ECLAIR: // 2.0
  137. break;
  138. case Build.VERSION_CODES.ECLAIR_0_1: // 2.0.1
  139. break;
  140. case Build.VERSION_CODES.ECLAIR_MR1: // 2.1
  141. break;
  142. }
複製代碼

Android SDK 版本

下列表格為2015年6月時執行特定 Android 版本的裝置分布比例, 資料來源為 Android Developers.

VersionCodenameAPIDistribution
5.1Lollipop220.8%
5.02111.6%
4.4KitKat1939.2%
4.3Jelly Bean185.2%
4.2.x1717.5%
4.1.x1614.7%
4.0.3 -
4.0.4
Ice Cream Sandwich155.1%
2.3.3 -
2.3.7
Gingerbread105.6%
2.2Froyo80.3%

從表格中的分布比例可以發現, 即使有較新的版本, 執行較舊版本的裝置也不會立即升級或更換.

相容性

要有較多的使用者, 程式就要能執行在多種版本上. 要能執行在多種版本上, 相容性就是一個重要的議題.

Android 專案中通常有幾個 SDK 版本要設定.

minSdkVersion

位在 AndroidManifest.xml 中, 作業系統會拒絕安裝程式在低於 minSdkVersion 的裝置上.

targetSdkVersion

位在 AndroidManifest.xml 中, 程式主要的目標版本. 通常 targetSdkVersion 是最新版的 SDK, 除非當新版的 SDK 釋出時, 還無法確認程式在新版的 SDK 上運作正常, 才會降低 targetSdkVersion 到已確認過的版本上.

compileSdkVersion

依開發工具不同, 位在特定的專案設定檔中, 開發工具用來建置專案的 SDK 版本, 通常是最新版的 SDK.

minSdkVersion 和 compileSdkVersion 之間的差異可能會產生相容性的問題. 舉例來說, 假如程式使用了 minSdkVersion 之後的版本才有的功能, 當程式執行在 minSdkVersion 的裝置上時, 程式就會當掉.

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-9 15:53 , Processed in 0.057528 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表