Android N中添加了新的api 如何使用这个新的API
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
会报错,运行在低版本的api上面会报找不到方法或者找不到类的错。
解决办法有两个,如下:
第一种就是 @Celery 说的判断当前api版本然后根据版本执行不同的方法。但是很多时候,发现替代方法并不好写,或者你的app必须只能使用新的api,这时候你就需要第二种方法。
第二种是声明api最低版本。在build.gradle里声明minSdkVersion num. 这种你需要权衡一下,可以考虑不支持低版本的手机。这样低版本手机在安装你的apk的时候就直接拒绝了。
minSdkVersion num
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { doSomethingWithOldApi(); } else { doSomethingWithNewApi(); }
or
try { doSomethingWithNewApi(); } catch (NoSuchMethodException e) { doSomethingWithOldApi(); }
我一般这样写。
一般google出新的api都会有对应的兼容包出来用于那些低版本的手机。如果没有兼容包就需要在代码中对SDK的版本进行判断,在选择性执行代码。
一般如果有support包的话不会报错,假如没有,需要进行版本判断然后再写代码
新功能与兼容性是一个难以权衡的问题,Android 对 Ui 的 Api 以及非 Ui 的 Api 采用了不同的处理方式。
对于 UI 的 Api,Google 为了让不同版本的 Android 尽可能的获得一致的 Ui 体验,提供了 Support Library 来兼容不同的 Android 版本,比如说常见的 support-v4,cardview-v7 等等,即使有些 Ui 组件没有被添加到官方的兼容包里,依旧有可能在 github 中找到开源的项目。
而对于非 Ui 的 Api,则往往很难找到兼容 Library,对于这种 Api 常用的方式是根据不同的 Android 版本做判断,如果要用的新 api 属于一个方法的核心的话,可以考虑为该方法提供 @TargetApi 形式的注解,比如;
@TargetApi(Build.VERSION_CODES.HONEYCOMB) private void useNewApi() { // do samething }
假如新的 Api 可有可无或者有旧的替代方式的话,可以考虑利用 Build.VERSION.SDK_INT 做一下判断,比如:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { setBackground(newDrawable()); } else { setBackgroundDrawable(newDrawable()); }
说的都是泪啊!妹的,有个同事用了新的api,在老系统中,直接crash,导致线上crash率猛增,我的年终奖啊
会报错,运行在低版本的api上面会报找不到方法或者找不到类的错。
解决办法有两个,如下:
第一种就是 @Celery 说的判断当前api版本然后根据版本执行不同的方法。但是很多时候,发现替代方法并不好写,或者你的app必须只能使用新的api,这时候你就需要第二种方法。
第二种是声明api最低版本。在build.gradle里声明
minSdkVersion num
. 这种你需要权衡一下,可以考虑不支持低版本的手机。这样低版本手机在安装你的apk的时候就直接拒绝了。or
我一般这样写。
一般google出新的api都会有对应的兼容包出来用于那些低版本的手机。如果没有兼容包就需要在代码中对SDK的版本进行判断,在选择性执行代码。
一般如果有support包的话不会报错,假如没有,需要进行版本判断然后再写代码
新功能与兼容性是一个难以权衡的问题,Android 对 Ui 的 Api 以及非 Ui 的 Api 采用了不同的处理方式。
对于 UI 的 Api,Google 为了让不同版本的 Android 尽可能的获得一致的 Ui 体验,提供了 Support Library 来兼容不同的 Android 版本,比如说常见的 support-v4,cardview-v7 等等,即使有些 Ui 组件没有被添加到官方的兼容包里,依旧有可能在 github 中找到开源的项目。
而对于非 Ui 的 Api,则往往很难找到兼容 Library,对于这种 Api 常用的方式是根据不同的 Android 版本做判断,如果要用的新 api 属于一个方法的核心的话,可以考虑为该方法提供 @TargetApi 形式的注解,比如;
假如新的 Api 可有可无或者有旧的替代方式的话,可以考虑利用 Build.VERSION.SDK_INT 做一下判断,比如:
说的都是泪啊!妹的,有个同事用了新的api,在老系统中,直接crash,导致线上crash率猛增,我的年终奖啊