0

所以有人告诉我,在Android Studio和最新版本的Android SDK中,我应该可以在我的项目上运行Proguard ,它使用Android Annotations,没有问题。不过,我已经为此奋斗了很多天了。Proguard + Android Annotations:找不到超类或接口javac.annotation.processing.AbstractProcessor

当我试图通过建设 - 运行Proguard的>生成Android Studio中签署APK工具,我得到数百形式的错误:

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 

我已经与内置的proguard的,Android的尝试自带的SDK,并与一个自定义的,我从Android的注解复制.txt文件,我相信:

-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 *; 
} 

我也通过gradle这个试着用同样的结果在命令行上。谁能帮我吗?

回答

2

您应该升级您的Android注释版本。最新版本使被投入区别

  • androidannotations-X.Y.jar之间
      ,生成在编译时的代码,
    • androidannotations-X.Y-api.jar,该目录libs;包含运行时所需的代码。

    这可以避免将类添加到依赖于Android运行时不存在的类的应用程序。例如,ProGuard会尝试解决依赖关系,并且会投诉com.googlecode.androidannotations.annotationprocessor.AnnotatedAbstractProcessor,这取决于缺少的javax.annotation.processing.AbstractProcessor

    注意:最新版本的Android SDK使用proguard-project.txt而不是proguard.cfg(您可能从Android Annotations的过期wiki页中复制的默认配置)。如果更新project.properties中的proguard.config行,构建过程将自动应用默认配置。文件proguard-project.txt然后可以是空的开始;它只需要包含项目特定的配置。

  • +0

    谢谢埃里克,我有最新版本的AA。我的问题是我有androidannotations-X.Y.jar列为依赖而不是androidannotations-X.Y.-api.jar。 –

    相关问题