Android 應用程式可在其 build.gradle
檔案中設定多個 SDK 版本屬性。Android build.gradle
說明文件會解釋這些屬性對應用程式的一般含義,本文件則說明這些屬性將如何影響 NDK 建構。
compileSdkVersion
這個屬性對 NDK 建構沒有任何影響。NDK 的 API 可用性受 minSdkVersion
規範。這是因為 C++ 符號在程式庫載入時就被即時解析,而不是延遲到在第一次呼叫時才解析 (在 Java 中亦是如此)。使用 minSdkVersion
中未提供的任何符號會導致程式庫在沒有新版 API 的 OS 版本中載入失敗,無論這些 API 是否被呼叫都是如此。
如果是新的應用程式,請選擇最新版本。如果是現有應用程式,請更新 升級至最新版本
targetSdkVersion
與 Java 類似,應用程式的 targetSdkVersion
可以變更原生程式碼的執行階段行為。系統中的行為變更僅會在適用情況下影響符合以下條件的應用程式:targetSdkVersion
版本大於或等於採用對應變更的 OS 版本。
如果是新的應用程式,請選擇最新版本。如果是現有應用程式,請更新
但十分方便時 (在更新 compileSdkVersion
後)。
雖然應用程式開發人員通常會知道應用程式的 targetSdkVersion
,但對於不知道使用者會選擇哪個 targetSdkVersion
的程式庫開發人員而言,這個 API 相當實用。
在執行階段期間,您可以透過呼叫 android_get_application_target_sdk_version()
取得應用程式使用的 targetSdkVersion
。這個 API 適用於 API 級別 24 及更高級別。這個函式的簽名如下:
/**
* Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` if
* there is no known target SDK version (for code not running in the context of
* an app).
*
* The returned values correspond to the named constants in `<android/api-level.h>`,
* and is equivalent to the AndroidManifest.xml `targetSdkVersion`.
*
* See also android_get_device_api_level().
*
* Available since API level 24.
*/
int android_get_application_target_sdk_version() __INTRODUCED_IN(24);
其他行為變更可能取決於裝置 API 級別。您可以透過呼叫 android_get_device_api_level()
取得執行應用程式的裝置 API 級別。這個函式的簽名如下:
/**
* Returns the API level of the device we're actually running on, or -1 on failure.
* The returned values correspond to the named constants in `<android/api-level.h>`,
* and is equivalent to the Java `Build.VERSION.SDK_INT` API.
*
* See also android_get_application_target_sdk_version().
*/
int android_get_device_api_level();
maxSdkVersion
這個屬性對 NDK 建構沒有任何影響。
minSdkVersion
build.gradle
檔案中設定的 minSdkVersion
會決定建構時可用的 API (請參閱 compileSdkVersion,瞭解這不同於 Java 建構的原因),也會影響可與您的程式碼相容的最低 OS 版本。
NDK 會使用 minSdkVersion
來判斷編譯程式碼時可以使用哪些功能。例如,這個屬性會決定 libc 中使用的 FORTIFY 功能,而且如果您的二進位檔與舊版 Android 不相容,這個屬性也可能會為這些二進位檔啟用改善效能或大小功能 (例如 GNU 雜湊或 RELR)。即使您並未使用任何新的 API,這個屬性也會
仍然會管理您的程式碼支援的最低 OS 版本。
如果是新的應用程式,請前往 Android Studio「新專案」查看使用者分佈資料
或位於 apilevels.com 上。選擇餘額
可能的市佔率和維護成本minSdkVersion
值越低,
您花更多時間處理舊的錯誤及新增備用行為
找出尚未實作的功能
如果是現有應用程式,請在舊的 API 級別不含時提高 minSdkVersion
可以 降低維護成本,或為使用者需求降低費用
更重視新的維護成本Play 管理中心提供個人專屬的指標
對使用者發布的影響
應用程式的 minSdkVersion
提供給預先處理器
透過 __ANDROID_MIN_SDK_VERSION__
巨集 (舊版 __ANDROID_API__
是
但建議您使用前者,因為其意義比較清楚。這個巨集是
由 Clang 自動定義,因此無需加入標頭即可使用。適用對象
NDK 建構,系統一律會定義這個巨集。