Android Proguard&x2B;安卓注释:Can';找不到超类或接口javac.annotation.processing.AbstractProcessor

Android Proguard&x2B;安卓注释:Can';找不到超类或接口javac.annotation.processing.AbstractProcessor,android,annotations,obfuscation,proguard,android-annotations,Android,Annotations,Obfuscation,Proguard,Android Annotations,所以有人告诉我,有了Android Studio和最新版本的Android SDK,我应该能够在我的项目上运行Proguard,它使用Android注释,没有问题。然而,我已经为此奋斗了很多天了 当我尝试在Android Studio中通过Build->Generate Signed APK工具运行Proguard时,我得到了数百个错误: com.googlecode.androidannotations.annotationprocessor.AnnotatedAbstractProcesso

所以有人告诉我,有了Android Studio和最新版本的Android SDK,我应该能够在我的项目上运行Proguard,它使用Android注释,没有问题。然而,我已经为此奋斗了很多天了

当我尝试在Android Studio中通过Build->Generate Signed APK工具运行Proguard时,我得到了数百个错误:

com.googlecode.androidannotations.annotationprocessor.AnnotatedAbstractProcessor: can't find superclass or interface javax.annotation.processing.AbstractProcessor
com.googlecode.androidannotations.AndroidAnnotationProcessor: can't find referenced method 'void init(javax.annotation.processing.ProcessingEnvironment)' in class com.googlecode.androidannotations.annotationprocessor.AnnotatedAbstractProcessor
我尝试过sdk附带的内置proguard-android.txt文件,也尝试过从android注释复制的自定义文件,我相信:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}
-优化过程5
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-不要翻转
-冗长的
-优化!代码/简化/算术,!字段/*,!类/合并/*
-keep public class*扩展android.app.Activity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-keep public class*扩展了android.app.backup.BackupAgentHelper
-keep public class*扩展了android.preference.preference
-保持公共类com.android.vending.licensing.ILicensingService
-KeepClassSwithMemberNames类*{
本地人;
}
-KeepClassSwithMemberNames类*{
public(android.content.Context、android.util.AttributeSet);
}
-KeepClassSwithMemberNames类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}

我也尝试过在命令行上通过gradle获得同样的结果。有人能帮我吗?

你可能应该升级你的Android注解版本。最近的版本区分了

  • androidannotations-X.Y.jar
    ,用于在编译时生成代码,以及
  • androidannotations-X.Y-api.jar
    ,放入目录
    libs
    ;包含运行时所需的代码
这避免了向应用程序添加依赖于Android运行时中不存在的类的类。例如,ProGuard试图解决依赖关系并抱怨
com.googlecode.androidannotations.annotationprocessor.AnnotatedBStractProcessor
,这取决于缺少的
javax.annotation.processing.AbstractProcessor


旁注:Android SDK的最新版本使用
proguard project.txt
而不是
proguard.cfg
(默认配置可能是从Android注释的过时wiki页面复制的)。如果在
project.properties
中使用
proguard.config
更新该行,则生成过程将自动应用默认配置。然后,文件
proguard project.txt
可以是空的;它只需要包含特定于项目的配置。

谢谢Eric,我有最新版本的AA。我的问题是我将androidannotations-X.Y.jar列为依赖项,而不是androidannotations-X.Y.-api.jar。