Android R 系统编译时 Lint 工具检查问题记录

Posted 虫师魁拔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android R 系统编译时 Lint 工具检查问题记录相关的知识,希望对你有一定的参考价值。

android R上面对于系统api的修改变更有了新的检查方式,对于代码静态检查变得更严格了,代码中类型或是参数有些必须要添加 @NonNull 等注释,否则编译不过。遇到的报错贼多,举个栗子如下

 

1、返回类型缺少非空判断

Missing nullability on method `buildParamsForInviteConferenceParticipants` return [MissingNullability]

2、使用了具象类,要求使用父类,这里就是 List 来替换 ArrayList ,使接口可以更宽泛

Parameter type is concrete collection (`java.util.ArrayList`); must be higher-level interface [ConcreteCollection]

3、静态工具类缺少私有构造函数

Fully-static utility classes must not have constructor

 

修改方式有两种,一是在代码中添加报错提示的注释,如下

        public static @NonNull Bundle buildParamsForInviteConferenceParticipants(
                @NonNull String callId, @NonNull ArrayList<String> numbers) {
            return obtainBuilder(ACTION_INVITE_CONFERENCE_PARTICIPANTS)
                    .putStringParam(PARAM_STRING_CALL_ID, callId)
                    .putStringArrayListParam(PARAM_STRING_ARRAY_LIST_NUMBERS, numbers)
                    .build();
        }

二是修改系统的 frameworks/base/api/lint-baseline.txt 把报错部分添加上,跳过编译检查报错

ConcreteCollection: android.telecom.TelecomHelper.InCallServiceHelper#buildParamsForInviteConferenceParticipants(String, java.util.ArrayList<java.lang.String>) parameter #1:

添加时按照 class#mothod() parameter #index 格式,mothod 参数把类型写全,parameter # 后面从0开始,注明是参数几。这种方式有时候没用,还没搞清楚为啥。

以上是关于Android R 系统编译时 Lint 工具检查问题记录的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Android Studio 编译时 lint 检查报错 ( Could not resolve junit:junit:4.+. )

错误记录Android Studio 编译时 lint 检查报错 ( Error: Google Play requires that apps target API level 29 or )

Android Lint——内嵌于Android Studio的代码优化工具

如何检查 Perl-CGI 应用程序中的所有错误(例如,使用 Perl 编译器或类似 lint 的工具检查,免费开源?)

SourceInsight工具增强——AStyle(代码格式化)PC-Lint(静态检查)

我们如何配置 Android Studio 以在每次构建时运行它的 Lint?