设备的兼容性

         Android被设计运行在许多不同类型的设备上,从手机到平板再到电视等。作为一个开发者,种类繁多的设备为你的app提供了一个巨大的潜在客户。为了使你的app能够在这些设备上成功运行,它应该能够兼容一些可变特性并且能够提供一个适应不同屏幕的配置的流动的用户界面。

为了实现这个目标所要求的效果,android提供了一些动态APP框架,用这些框架你能用静态文件为你提供特定配置的app资源(不同屏幕的不同XML布局文件)。Android系统然后根据当前设备配置加载正确的资源。因此由于针对于你的app设计和一下app资源的这些考虑,你能仅仅打一个能够适应很多设备的用户界面的软件包。

然而,如果需要的话,你能指定你的App的特性要求,并且控制在GooglePlay中那些设备能够安装你的APP,

设备特性

      为了你能够根据设备的特性管理你的app的能力,Android为任何那些并不是适用于全部设备的硬件或者软件特性定义特性IDs。例如,指南针传感器的特性ID是FEATURE_SENSOR_COMPASS和App Wedget的特性ID是FEATURE_APP_WIDGETS.如果需要的话,你能防止当用户的设备不支持你的app要求的特性时安装你的app,依靠在你的app的manifest文件中定义<uses-feature>元素,例如

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>


无论你的设备是否兼容所用的设备Google Play Store 都会把你的设备所要求的设备特性与每一个用户设备相比较。如果一个设备不能满足你的app设备的全部要求,这个用户将要不能安装你的app。

   然而,如果你的app的功能并不需要要求某种设备特性,你可以在manifest的配置文件中的<uses-feature>元素的属性值设置为false。如果你的app在当前设备上是不可用的,就会自然的降低相对应的app特性。例如,你可以查询出一个设备是否支持一个特性用hasSystemFeature():

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device does not have a compass, turn off the compass feature
    disableCompassFeature();
}


平台版本

        不同的设备可能运行在不同的android平台版本上,每一个成功的平台版本都会增加一些前一个的平台版本不可用的API。为了识别哪一个API版本是可用的,每一个平台版本指定一个API等级。例如,android 1.0是API1,android 4.4是API19。

      API Level允许我们定义你的app兼容的最小版本,可以在manifest文件中的user-sdk 的minSdkVersion属性值设定。

<manifest ... >
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
    ...
</manifest>


minSdkVersion属性定义了你的app兼容的最小api版本,targetSdkVersion属性值定义了你的app已经优化的最高版本。

注意:targetSdkVersion的属性值不会阻止你的app被高于指定的api的系统安装你的app,但是它是重要的,因为它能够让系统推测出是否你的app应该继承新版本的改变。如果你不更新你的app的targetSdkVersion到最新版本,系统将会假定你的app在运行在最新版本的时候需要一些向后兼容的行为。

屏幕配置

      Android能够运行在从手机到电视机等大量的设备上。为了把这些设备类型分门别类,android为每个设备定义了两种特性:屏幕大小和屏幕分辨率,为了简化这些不同的配置,android把这些变形归纳成组,使实现这个目标更加容易。

 small, normal, large, and xlarge.

mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high), and others.

     默认地,你的app兼容所有的屏幕和分辨率,因为系统能够尽量调正布局配置和资源适应每一个屏幕。然而,为了尽可能的优化麼一中屏幕的用户体验,为不同大小的屏幕增加特定的布局并且为相同屏幕分辨率优化图片。