android設備兼容性
原文地址:http://developer.android.com/guide/practices/compatibility.html
android被設計成能夠在多種不同的設備上執行的系統,為了達到這個目的,android系統提供了一個動態app框架,在這個框架中你能夠在動態文件(為不同屏幕大小的不同xml布局文件)中提供詳細的配置資源。android會依據設備配置載入適當的資源。
兼容性是什麽意思?
有兩種不同的適配:設備適配和app適配。
設備兼容:能夠在android執行環境下正常執行應用程序。
作為一個app開發人員。你不須要是否一個設備是設備兼容的。可是你必須得考慮在這樣潛在的設備配置下的app適配。
讓你的應用對設備來說可用
一些特征是基於硬件的比方指南針傳感器。一些是基於軟件的不如app widgets,一些是基於平臺版本號的.
為了實現你的應用程序的最大的用戶群,你應該努力使用一個apk來支持越多的設備配置越好。在非常多情況下,你應該在執行時禁用可選的功能,為不同的配置提供應用程序資源的替代品(比方為不同的屏幕尺寸提供不同的布局文件),假設必須。你須要通過Google play的下面特征來限制你的應用程序的可用性:
1,設備特征
2.平臺版本號
3.屏幕配置
設備特征
為了讓你基於設備特征合適的管理你的app,android定義了featuresIds,比方說指南針傳感器的featureid是FEATURE_SENSOR_COMPASS
FEATURE_APP_WIDGETS
.
假設必要的話,你能夠保護安裝你的app可是他們的設備沒有提供在你的manifest文件裏用<uses-feature>
?聲明的feature的用戶.
比方說,你的app不會再一個缺少指南針傳感器的設備上起作用,你能夠這樣在你的manifest文件裏聲明指南針傳感器:
<manifest ... > ? ? <uses-feature android:name="android.hardware.sensor.compass" ? ? ? ? ? ? ? ? ? android:requiredGoogle play 商店比較你app聲明的feature和用戶設備中上的feature,來決定你的app是否兼容每一個應用。若設備沒有提供全部你的app須要的feature,用戶就不能安裝你的app.="true" /> ? ? ... </manifest>
可是,若你的app的主要作用不須要一個設備feature,你須要設置required屬性為false並且在設備執行時檢測設備feature,若你的app feature在當前設備不可用,你須要優雅的降解app feature,比方,你能夠像這樣通過調用hasSystemFeature()查詢一個feature是否可用:
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { ? ? // This device does not have a compass, turn off the compass feature ? ? disableCompassFeature(); }
平臺版本號
比方。?Calendar Provider?API是在API level 14之後加入的。假設你的app必須使用這個api,你能夠這樣聲明你支持的最低版本號號是14:
<manifest ... > ? ? <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> ? ? ... </manifest>
targetSdkVersion
?是重要的,由於它暗示系統你的app是否繼承在新版本號中的行為改變。若你不把targetSdkVersion更新到最新版本號。這時系統假設在執行最新版本號sdk時,你的app須要的是先前兼容的行為。
若你的app使用一些在近期的sdk版本號中加入的api,可是不把他們作為主要功能,你應該在執行時檢查API
levels,同一時候當API level太低時,優雅的減少符合的feature.這樣的情況下,將能支持你app執行的最低的APIlevel賦值給
minSdkVersion。然後比較當前系統版本號
SDK_INT?與你想檢查的符合的api版本號比較。比方:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
? ? // Running on something older than API level 11, so disable
? ? // the drag/drop features that use ClipboardManager
APIs
? ? disableDragAndDrop();
}
屏幕配置
為了通過設備的屏幕類型將設備分類。Android為每一個設備定義了兩種特征:屏幕尺寸(small, normal, large, and xlarge)和屏幕密度(mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high), and others.)。
默認情況下你的app是兼容全部尺寸和密度的。系統為每一個屏幕對你的UI布局和image資源做了合適的調整,可是你應該通過為不同尺寸的屏幕加入特殊的布局和為普通屏幕密度優化bitmap images來優化用戶體驗。
出於商業原因,控制應用程序的可用性?
你應該為了商業或法律的原因來限制你的app的可用性。不如一個展示倫敦地下列車表的應用不能在英國之外使用,對於這樣的類型的情況。Google play在開發人員控制臺提供了過濾選項來同意你控制你的應用在非技術方面的可用性。比方用戶位置。
android設備兼容性