小编Ada*_*abb的帖子

Android Studio中的多模块注释处理

我在Android Studio中有一个包含多个模块的项目.模块可能依赖于另一个模块,例如:

模块PhoneApp - >模块FeatureOne - >模块服务

我已经在根模块中包含了我的注释处理,但是android-apt注释处理仅在最顶层(PhoneApp)发生,因此理论上它应该在编译时可以访问所有模块.但是,我在生成的java文件中看到的只是PhoneApp中注释的类,而其他模块中没有注释.

PhoneApp/build/generated/source/apt/debug/.../GeneratedClass.java
Run Code Online (Sandbox Code Playgroud)

在其他模块中,我在中间目录中找到一个生成的文件,该文件仅包含该模块中带注释的文件.

FeatureOne/build/intermediates/classes/debug/.../GeneratedClass.class
FeatureOne/build/intermediates/classes/debug/.../GeneratedClass.java
Run Code Online (Sandbox Code Playgroud)

我的目标是在PhoneApp中创建一个生成的文件,允许我从所有模块访问带注释的文件.不完全确定为什么每个代码生成过程都在运行,并且无法在PhoneApp上聚合所有注释.任何帮助赞赏.

到目前为止,代码相当简单直接,checkIsValid()省略,因为它正常工作:

注释处理器:

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    try {

        for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(GuiceModule.class)) {
            if (checkIsValid(annotatedElement)) {
                AnnotatedClass annotatedClass = new AnnotatedClass((TypeElement) annotatedElement);
                if (!annotatedClasses.containsKey(annotatedClass.getSimpleTypeName())) {
                    annotatedClasses.put(annotatedClass.getSimpleTypeName(), annotatedClass);
                }
            }
        }

        if (roundEnv.processingOver()) {
            generateCode();
        }

    } catch (ProcessingException e) {
        error(e.getElement(), e.getMessage());
    } catch (IOException e) {
        error(null, e.getMessage());
    }

    return true;
}

private void generateCode() throws IOException {
    PackageElement …
Run Code Online (Sandbox Code Playgroud)

java android annotations annotation-processing

6
推荐指数
1
解决办法
1621
查看次数

取消运行时权限请求?

在 Marshmallow 的运行时权限的 Android 文档中,以下代码注释指的是取消权限请求:

case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
        // If request is cancelled, the result arrays are empty.
        if (grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Run Code Online (Sandbox Code Playgroud)

我无法确定如何实际取消权限请求,以便 grantResults 数组返回长度 == 0。请求权限的对话框仅允许用户允许或拒绝该请求,因此可以通过以下方式取消请求用户操作不明显。

然而,我运行了 Monkey,它至少成功完成了一次。

onRequestPermissionResult 的文档表明可以取消。

如何重现 grantResults 长度为 0 的情况(这表明这是一个已取消的请求)?(String[] grantResults 不为 null,但长度为 0)

java android android-6.0-marshmallow

5
推荐指数
1
解决办法
1951
查看次数