一、语言适配
MyProject/
res/
values/ // 默认
strings.xml
values-es/ // 适配西班牙语
strings.xml
values-fr/ // 适配法语
strings.xml
二、屏幕适配
调整布局以适配不同的屏幕大小:
MyProject/
res/
layout/ // 普通屏幕
main.xml
layout-land/ // 横向屏幕
main.xml
layout-large/ // 大屏幕
main.xml
layout-large-land/ // 横向大屏幕
main.xml
layout-xlarge/ // 超大屏幕
main.xml
layout-xlarge-land/ // 横向超大屏幕
main.xml
调整资源以适配不同的屏幕精度:
MyProject/
res/ // 尺寸比例:
drawable-xxhdpi/ // 3.0
awesomeimage.png
drawable-xhdpi/ // 2.0
awesomeimage.png
drawable-hdpi/ // 1.5
awesomeimage.png
drawable-mdpi/ // 1.0(基准)
awesomeimage.png
drawable-ldpi/ // 0.75,可省略,系统会从hdpi按比例缩小一半
awesomeimage.png
三、提高兼容性
设备特性的兼容。假如APP中需要用到罗盘传感器,并且它不是核心功能所必需,则可在AndroidManifest.XML中定义如下:
<manifest ... >
<uses-feature android:name="android.hardware.sensor.compass"
<!-- 若设为true,则没有罗盘传感器的设备将无法安装此APP -->
android:required="false" />
...
</manifest>
在代码中判断是否要提供相关功能:
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
// This device does not have a compass, turn off the compass feature
disableCompassFeature();
}
平台版本的兼容。假设APP的核心功能是基于Android 4.0(SDK版本14)的Calendar Provider来实现的,则可定义最低支持的版本如下:
<manifest ... >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
...
</manifest>
如果基于新版本API制作了某些非核心功能,而APP最低支持的版本又无法运行它们,可在代码中如此设置:
// 如果系统SDK版本低于xxx版本
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.xxx) {
disableNewFeature();
}
另外,targetSdkVersion的设置会影响到APP的权限和某些系统特性。假如Android推出新增某些权限的新版本,而targetSdkVersion又设得比该版本低的话,在新版本的Android设备里会赋予旧版APP所有的新权限,并且在Google Play会显示APP需要这些权限。新版本在更新某些系统特性的同时,也会保留旧版本的特性。targetSdkVersion为旧版的APP将使用旧版的系统特性。
参考资料:
Android Training > Supporting Different Devices
https://developer.android.com/intl/zh-cn/training/basics/supporting-devices/index.html
Android API Guides > Device Compatibility
https://developer.android.com/intl/zh-cn/guide/practices/compatibility.html#defined
Android API Guides > System Permissions
https://developer.android.com/intl/zh-cn/guide/topics/security/permissions.html