Android一套代码适配不同Android版本终极指南
前言
原来BOSS秉承着多生孩子好打架的原理,成立多个部门各自为战。然后同样的功能,不同部门做的各不相同给客户呈现的也是神仙大战,各不相同。为此客户多番投诉说同一个公司的产品,不同的型号为啥表现形式不一样,为此有了今天得这篇文章。怎么在Android中使用同一套代码适配多个Android版本。本篇不是讨论移动端的多适配,而是在Room开发定制的Android系统级别应用。
一.具体业务需求
下面我们来看一个这样的场景,我们在Android的PowerManager中新增了一个isScreenReady的方法,可是现在由于公司要求所有平台机型和Android版本都统一使用同一份代码,那么这个私有接口就会导致在没有增加上述接口的机型上面编译不过,那么这个怎么处理呢。
public static boolean isScreenOnFinish(Context context){
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
boolean ifOpen = powerManager.isScreenOn();
boolean ifScreenReady = powerManager.isScreenReady();//这个接口不是通用的
Log.e(TAG, ifOpen ? "isScrrenOn" : "isScrrenOff");
Log.e(TAG, ifScreenReady ? "DisplayReady" : "DisplayNotReady");
return (ifOpen && ifScreenReady );
}
这里有两个办法可以解决上面的问题,下面让我们一一道来。
1.1 通过反射
反射的好处就是可以编译,通过然后再运行时查找对应的接口是否存在。具体如下:
public static boolean isScreenOnFinish(Context context){
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
boolean ifOpen = powerManager.isScreenOn();
boolean ifScreenReady = true;
Method misScreenReady = powerManager.getClass().getDeclaredMethod("isScreenReady");
misScreenReady.setAccessible(true);
ifScreenReady = (boolean)misScreenReady.invoke(powerManager);
Log.e(TAG, ifOpen ? "isScrrenOn" : "isScrrenOff");
Log.e(TAG, ifScreenReady ? "DisplayReady" : "DisplayNotReady");
return (ifOpen && ifScreenReady );
}
1.2 添加适配层
如上反射的方法总是感觉不优雅,其实还有一种方法就是添加适配层,在Android,mk编译的时候根据Android的版本选择具体的实现文件。下面我们看下怎么实现。
步骤一: .修改Android.mk,根据Android选择编译文件
步骤二 :添加适配层文件,如下:
看看代码里面做了什么,如下:
这样就可以根据不同Android版本的特性来实行相关的接口了。大功告成了。
结语
修行至此,恭喜读者你已经对Android一套代码怎么适配多个Android版本有一定了解了,行走江湖是可能的了,平台化的道路就可以开启了。
写在最后
各位读者看官朋友们,Android一套代码怎么适配多个Android版本,希望能吸引你,激发你的学习欲望和斗志。在最后麻烦读者朋友们如果本篇对你有帮助,关注和点赞一下,当然如果有错误和不足的地方也可以拍砖。