mam włączone projektu przy użyciu Gradle w mojej aplikacji:PROGUARD usuwanie adnotacji w aplikacji Android
compile group: 'org.bytedeco', name: 'javacv', version: '0.11'
która buduje w porządku. Ale gdy uruchomię aplikację z włączonym proguardem, najwyraźniej usuwa ona adnotację @Platform
ze słoików, które są wtedy dołączane.
Próbowałem za pomocą następujących podstawie http://proguard.sourceforge.net/manual/examples.html#annotations
-keepattributes *Annotation*
-keep @org.bytedeco.javacpp.annotation interface * {
*;
}
Próbowałem też następuje na podstawie http://proguard.sourceforge.net/manual/troubleshooting.html#notkept
-keep @interface *
Ale to nie działa. Co jeszcze mogę zrobić, aby zapobiec usunięciu tych adnotacji przez proguard? Myślałem o użyciu -injars
lub -libraryjars
, ale uważam, że gradle obsługuje to dla Ciebie.
Rozwiązanie:
więc rozwiązanie jest następujące:
mam włączone następujące w moich zasad PROGUARD:
# 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
i następujące wiersze w moim gradle (są to najnowsze wersje na dzień 7/5/2015 (dd/mm/rrrr)):
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'
Jestem całkiem pewien, że niektóre zasady proguarda są nieco przesadzone, ale jeszcze nie przetestowałem, które są zbędne. Możesz sam się tego dowiedzieć, jeśli napotkasz ten problem.
który PROGUARD wersji używasz – apk
@apk, mam wersji dostarczanej z najnowszymi wydanie AS. To jest wersja proguard 4.7 – Gooey
try 4.9 i powyżej – apk