首先我们需要理清当前问题的解决思路。
问题分为三个方面:
1编译问题
2lint提示问题
3代码真机运行问题(是否崩溃)
针对第一个问题:
只要参与编译的android版本拥有当前调用的函数,编译没有任何问题
针对第二个问题:
lint:依据一定规则在源码级别检测代码潜在安全等等问题的一种工具。
如果当前调用方法版本高于minisdkverison版本,lint就会提示我们,这处调用可能会在低版本的android系统上运行失败,就是俗称的崩溃。
针对lint提示的问题,解决方案就是针对lint的机制提出的:
1改规则,一般没人怎么做
2关闭该条规则检查
3使用注解告诉lint,不要检查当前的方法,就是SuppressWarnings(“NewApi”)
4使用注解告诉lint,这种用法我已经做了妥善处理,请不要提示。就是TargetApi,RequireApi。这些注解只是告诉lint不要提示罢了,如果你没做任何防范措施,对代码的运行不会产生任何影响,该崩的还是会崩。就好像,别人告诉你这样做很危险,你说你是故意这样做的,并且说你防范了潜在的危险。事实上你没防范。
5使用行动告诉lint,你做了防范,就是所谓的添加版本判断。有时候你添加了版本判断,但是高版本分支代码是对一个自定义的方法的调用,而不是直接调用高版本的方法。这时候你还要在自定义的函数上面添加TargetApi,RequireApi提示。这次你是做了防范之后,告诉lint这个包含高版本的方法调用的方法是安全的。
针对第三个问题:
一定需要确保高版本的方法调用只在高版本中发生。唯一的方法就是添加版本判断。
网友评论