先上一张Android SDK版本号与API Level 的对应关系图:
![](https://img.haomeiwen.com/i2894274/972bf00b92ba5ca0.png)
再看看目前(2018年9月3日)市场上Android各版本的占有率:
![](https://img.haomeiwen.com/i2894274/d72402a3294078f3.png)
由此可见Android 4.4的机器还是有不少的,占到了10%以上的份额,所以作为一个合格的Android开发,兼容4.4是必不可少的,这样就要求我们的minSdkVersion 要<=19,这里以19为例记录需要兼容的地方:
1. multiDexEnabled
这个属性就是为了解决Android打包后.dex文件中方法数64k限制问题,在.build文件将multiDexEnabled属性设置为true后,.dex文件中方法数超过64k时会自动分拆成多个.dex文件让Dalvik虚拟机去执行(实际开发中大概率会遇到这种情况,必须要适配的一点)。非常好用的一个属性,可是只能在5.0以上的版本中支持,那5.0以下该怎么适配呢?如下:
- 添加 compile 'com.android.support:multidex:1.0.3'依赖
android {
defaultConfig {
...
minSdkVersion 19
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3'
}
- 继承MultiDexApplication
public class MyApplication extends MultiDexApplication { ... }
2. 资源文件的获取
这里可以用Android Studio自带的Lint工具检查,以Android 3.1.2为例:
Analyze->Inspect Code->选择whole porject,如果项目中使用了4.4以上的api会出现如下错误:
![](https://img.haomeiwen.com/i2894274/81a5cf837035d4f3.png)
使用ContexCompat来获取资源文件:
getDrawable(res)--->ContextCompat.getDrawable(context,res)
getColor(res)--->ContextCompat.getColor(context,res)
3. xml文件中属性问题
![](https://img.haomeiwen.com/i2894274/060d57d0b27a9588.png)
如上图backgroundTint属性只能在5.0以上的api中调用,为了兼容以下版本,我们可以新建一个values-v21文件夹,这个里面声明的属性会在api21以上的机器上优先于values文件夹中执行。
![](https://img.haomeiwen.com/i2894274/8a38f7669d9ad44b.png)
参考资料:
官方multidex适配:https://developer.android.com/studio/build/multidex
Android市场占有率分布:https://mta.qq.com/mta/data/device/os
网友评论