Ich habe ein Projekt mit gradle in meiner App enthalten:Proguard Entfernen Anmerkungen in Android-Anwendung
compile group: 'org.bytedeco', name: 'javacv', version: '0.11'
Welche feinen baut. Aber wenn ich die app mit progard aktiviere, wird anscheinend die @Platform
Annotation aus den Gläsern entfernt, die dann enthalten sind.
Ich habe versucht, die basierend auf http://proguard.sourceforge.net/manual/examples.html#annotations
-keepattributes *Annotation*
-keep @org.bytedeco.javacpp.annotation interface * {
*;
}
auf http://proguard.sourceforge.net/manual/troubleshooting.html#notkept
-keep @interface *
Aber das funktioniert nicht, entweder habe ich versucht, auch die folgenden anhand folgenden verwenden. Was kann ich sonst noch tun, um zu verhindern, dass Proguard diese Anmerkungen löscht? Ich habe darüber nachgedacht, -injars
oder -libraryjars
zu verwenden, aber ich glaube, dass Gradle das für Sie behandelt.
Die Lösung:
So ist die Lösung wie folgt:
ich folgend in meinen proguard Regeln aufgenommen haben:
# JavaCV
-keep @org.bytedeco.javacpp.annotation interface * {
*;
}
-keep @org.bytedeco.javacpp.annotation.Platform public class *
-keepclasseswithmembernames class * {
@org.bytedeco.* <fields>;
}
-keepclasseswithmembernames class * {
@org.bytedeco.* <methods>;
}
-keepattributes EnclosingMethod
-keep @interface org.bytedeco.javacpp.annotation.*,javax.inject.*
-keepattributes *Annotation*, Exceptions, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable, LocalVariableTypeTable, Synthetic, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations, RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations, AnnotationDefault, InnerClasses
-keep class org.bytedeco.javacpp.** {*;}
-dontwarn java.awt.**
-dontwarn org.bytedeco.javacv.**
-dontwarn org.bytedeco.javacpp.**
# end javacv
Und die folgenden Zeilen in meinem Gradle (das sind die neuesten Versionen zum 05.05.2015 (TT/MM/JJJJ)):
compile group: 'org.bytedeco', name: 'javacv', version: '0.11'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-x86'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-x86'
Ich bin ziemlich sicher, dass einige Proguard-Regeln ein wenig übertrieben sind, aber ich habe noch nicht getestet, die redundant sind. Sie können dies selbst herausfinden, wenn Sie auf dieses Problem stoßen.
die Version ProGuard Sie verwenden – apk
@apk, habe ich die Version mit dem neuesten ausgeliefert Freigabe von AS. Es ist Proguard Version 4.7 – Gooey
versuchen Sie 4.9 und höher – apk