我在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) 在 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)