4

我无法在 android studio中使用errorpronenullaway 。看起来 nullaway 取决于容易出错。这些是避免 NPE 的静态分析工具。nullaway github页面上关于如何在android中使用nullaway的文档很差而且不清楚。

我试过去 android studio 中的插件区域并安装了容易出错的插件,然后将 java 编译器切换到 javac 容易出错,如下图所示:

在此处输入图像描述

然后我将以下代码放在 android studio 中,认为编译器会捕获潜在的 null:

private void processLog() {     
     log(null);
}

static void log(Object x) {
    System.out.println(x.toString());
}
static void foo() {
    log(null);
}

相反,什么也没发生。这是我放入 gradle 文件的内容;

底层build.gradle:

dependencies {
    annotationProcessor "com.uber.nullaway:nullaway:0.1.6"
}

顶级build.gradle 文件:

buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
        mavenCentral()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:3.1.1'
        classpath 'io.fabric.tools:gradle:1.24.+'

        classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.11"
        classpath "net.ltgt.gradle:gradle-apt-plugin:0.11"

    }
}

plugins {
    id "net.ltgt.errorprone" version "0.0.13"
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()

        maven { url "https://maven.google.com"   }

        maven { url "http://dl.bintray.com/pt-midtrans/maven" }

        maven { url "https://jitpack.io" }

        maven { url "https://plugins.gradle.org/m2/" }
    }

}

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex')) {
                details.useVersion "$supportlib_version"
            }
        }
    }
}


task clean(type: Delete) {
    delete rootProject.buildDir
}
4

2 回答 2

0

基于我们的Android 示例应用程序,我在这里为带有 NullAway 的 Android 应用程序放置了一个自包含的 Gradle 构建文件。您必须根据需要调整选项以引用您自己的包和 Android SDK / 目标版本。此外,如果您只希望 NullAway 发出警告但不阻止构建,请忽略该选项。"-XepOpt:NullAway:AnnotatedPackages=com.uber""-Xep:NullAway:ERROR"

于 2017-12-23T18:15:24.837 回答
0

无需error-prone从 android studio 安装插件。

如文档中所述,请执行以下两个步骤:

1) 在顶级构建文件中添加存储库 url 和类路径:

repositories {
    // other repositories
    maven { url "https://plugins.gradle.org/m2/" }
 }
dependencies {
    classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}

2)为null-away添加注释处理器并在模块级gradle文件中应用容易出错的插件(第二部分是你所缺少的。你没有将插件应用到你的模块):

````

apply plugin: 'net.ltgt.errorprone'

dependencies {
    annotationProcessor "com.uber.nullaway:nullaway:0.1.6"
} 

```

于 2017-10-23T14:53:37.583 回答