android - 在使用 Android Gradle 插件 3.6.2 进行注释处理期间,Android R 类不可用
问题描述
我有一个库,它使用注释处理来创建用于在此处获取资源的 API:
https://github.com/Comcast/resourceprovider
我刚刚将 android gradle 插件从 3.2.1 更新到 3.6.2,突然在注释处理轮次中找不到 R 类。
查找 R 类的代码在 process 函数中:
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(RpApplication.class)) {
// annotation is only allowed on classes, so we can safely cast here
TypeElement annotatedClass = (TypeElement) annotatedElement;
if (!isValidClass(annotatedClass)) {
continue;
}
try {
List<String> rStringVars = new ArrayList<>();
List<String> rPluralVars = new ArrayList<>();
List<String> rDrawableVars = new ArrayList<>();
List<String> rDimenVars = new ArrayList<>();
List<String> rIntegerVars = new ArrayList<>();
List<String> rColorVars = new ArrayList<>();
List<String> rIdVars = new ArrayList<>();
//lame. this assumes that the application class is at the top level. find a better way.
String packageName = getPackageName(processingEnv.getElementUtils(), annotatedClass);
String rClassName = packageName + R_CLASS_IDENTIFIER;
boolean generateIdProvider = annotatedElement.getAnnotation(RpApplication.class).generateIdProvider();
boolean generateStringProvider = annotatedElement.getAnnotation(RpApplication.class).generateStringProvider();
boolean generateColorProvider = annotatedElement.getAnnotation(RpApplication.class).generateColorProvider();
boolean generateDrawableProvider = annotatedElement.getAnnotation(RpApplication.class).generateDrawableProvider();
boolean generateIntegerProvider = annotatedElement.getAnnotation(RpApplication.class).generateIntegerProvider();
boolean generateDimensionProvider = annotatedElement.getAnnotation(RpApplication.class).generateDimensionProvider();
roundEnv.getRootElements().stream().filter(element -> element instanceof TypeElement).forEach(element -> {
TypeElement typeElement = (TypeElement) element;
if (typeElement.getQualifiedName().toString().equals(rClassName)) {......}
我从来没有进入那个街区。Android Gradle Plugin 3.5.0 一切正常。
任何帮助,将不胜感激。
解决方案
如问题所述: https ://issuetracker.google.com/issues/153964091
暂时,我们可以使用android.generateRJava=true
来强制生成 R 类。但是,这将在 AGP 4.1 中删除
推荐阅读
- python - How to get State name from Latitude and Longitude in India
- kubernetes - 在 AWS kuberbetes 上安装超集后无法登录
- sql - ( CASE WHEN [date] IS NULL THEN 0 ELSE 1 END) is not working in my pivot
- visual-studio - Move caret line start/end in Visual Studio 2019?
- java - 当将 Jason 反序列化为 ProtoBuffer 时,消息 null 值设置为默认值
- powerbi - 表视觉对象中的不同计数行
- django - Django Loop 返回一行
- apache - 如何在 Apache 中添加检查,以便删除查询参数超过 800 个字符的任何请求
- vb.net - 如何在 Microsoft Visual Studio Express 2012 for Web 的工具箱中添加功能?
- apple-sign-in - 苹果登录授权返回错误:操作无法完成。(com.apple.AuthenticationServices.AuthorizationError 错误 1000。)