Я включил проект, используя gradle в моем приложении:
compile group: 'org.bytedeco', name: 'javacv', version: '0.11'
Что строит отлично. Но всякий раз, когда я запускаю приложение с включенной proguard, он, видимо, удаляет аннотацию @Platform
из банок, которые затем включаются.
Я попытался использовать следующее на основе http://proguard.sourceforge.net/manual/examples.html#annotations
-keepattributes *Annotation*
-keep @org.bytedeco.javacpp.annotation interface * {
*;
}
Я также пробовал следующее на основе http://proguard.sourceforge.net/manual/troubleshooting.html#notkept
-keep @interface *
Но это тоже не работает. Что еще я могу попытаться предотвратить, чтобы proguard удалил эти аннотации? Я думал об использовании -injars
или -libraryjars
, но я верю, что gradle обрабатывает это для вас.
<ч/" >
Решение:
Итак, решение таково:
Я включил следующее в мои правила 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
И следующие строки в моем gradle (это самые последние версии на дату 7/5/2015 (дд/мм/гггг)):
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'
Я совершенно уверен, что некоторые правила proguard немного переборщит, но я еще не тестировал, которые являются избыточными. Вы можете сами понять это, если столкнулись с этой проблемой.