兼容性
何为兼容
- 设备的兼容性
设备必须是Android兼容的,也就是说设备要具有运行Android程序的环境,这要通过谷歌的Compatibility Test Suite (CTS)保证,通过CTS测试的设备,才是安卓兼容的。 App的兼容性
你的应用可以兼容运行在不同配置(硬件和软件平台)的机型上。主要考虑三个方面:- Device features
- Platform versions
- Screen configuration
也可以通过以上要素,决定你的应用对不同配置设备的可用性。
控制应用对不同设备的可用性
Device features
在Manifest中明确声明需要的feature:
<manifest ... >
<uses-feature android:name="android.hardware.sensor.compass"
android:required="true" />
...
</manifest>
为了在不具备某feature上机型上运行你的应用,需要将该feature的required属性设为false,并在代码中作动态检查 hasSystemFeature():
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
// This device does not have a compass, turn off the compass feature
disableCompassFeature();
}
Platform version
Manifest中声明:
<manifest ... >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
...
</manifest>
minSdkVersion指你的应用可以兼容运行的最低版本;targetSdkVersion指你的应用达到最优化的版本,这个属性不妨碍你在更高版本上运行你的应用,然而你的应用不能享用更高版本的优化。
也可以在运行时动态判断平台版本,以决定在低版本上禁用某些功能:
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();
}
Screen configuration
安卓按照屏幕物理尺寸和像素密度(dots per inch, DPI),将屏幕进行一般化分类:
- 尺寸:small, normal, large, xlarge.
- DPI:mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high), and others.