安卓被设计运行在各种各样的设备上面,包括手机、平板、电视甚至卫星。开发者需要注意他们之间的区别,设计不同的用户界面以适应不同的屏幕。在开发过程中,开发者可以设计不同的特定的配置文件,比如不同的XML文件,使不同的设备上有不同的体验,当然你也可以在必要的时候指定那些设备可以安装你的App。
兼容性的含义
兼容性包括设备兼容性和App兼容性两方面。对于开发者而言,这方面不需要太关心,交给Google Play Store就可以了。当然,你也应该考虑该应用是否与潜在的设备兼容,比如使用了螺旋仪等等传感器。
控制设备兼容性
在 Android API Level中定义了设备的兼容性,这些兼容性包括了硬件兼容性、软件兼容性和其他的一些兼容性。当然不是所有的设备都支持这些特性,需要根据需要进行控制App的可用性。
设备的特性
Android设备间各种特性记录下来,并以ID的形式供开发者标注,以便标示不可能在所有设备上运行。如果有必要,可以阻止那些没有相关设备特性的设备安装App,可以使用 <uses-feature>标签,比如标识指南针传感器:
<manifest ... >
<uses-feature android:name="android.hardware.sensor.compass"
android:required="true" />
...
</manifest>
这样Google play Store就可以帮你决定哪些设备可以安装你的App,如果不满足某些标记的特性,App将不能被安装。
当然,你也可以将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();
}
平台版本
不同的设备可能运行着不同的Android平台,比如说4.0或者4.4,一般来说新的平台会包含一些新的低平台所不具备的API,不同的平台对应不同的API Level,Android 4.4 对应API Level 19,开发者需要申明App所需要的最低的API Level。
<manifest ... >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
...
</manifest>
minSdkVersion 标记了最低API Level, targetSdkVersion标记了最高的API Level。
一些较高的API Level可能更改了某些较低的API Level的某些行为,所以,targetSdkVersion也是很重要的,如果你不更新targetSdkVersion到最新版本,系统假定您的应用程序需要一些向后兼容最新版本的运行时行为。
屏幕配置
Android提供了四种常用的大小表示: small, normal, large, and xlarge。还有几种常用的密度表示:mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high), and others。
其他的就不赘述了。
商用原因
很多时候需要根据法律原因和商业原因控制App的特性,Google Play Store 为开发者提供了一个过滤器,允许开发者根据地区和其他非技术性原因提供不同的App版本。
P.S:这里更多的是关于Android的大的方面,看似没有什么,但是感觉却是整个Android的设计思想。这些内容都是一个字一个字码的,难免有错别字,如果有,请指正!