簡體   English   中英

Proguard刪除Android應用程序中的注釋

[英]Proguard removing annotations in Android application

我在我的應用程序中使用gradle包含了一個項目:

compile group: 'org.bytedeco', name: 'javacv', version: '0.11'

哪個建好了。 但是每當我在啟用proguard的情況下運行應用程序時,它顯然會從包含的jar中刪除@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中有以下幾行(這些是2015年7月5日最新版本(dd / mm / yyyy)):

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規則有點矯枉過正,但我​​還沒有測試哪些是多余的。 如果遇到這個問題,您可能想要自己解決這個問題。

我也在使用javacv,這是我的proguard文件的樣子:

## JavaCV
-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.**

它可能有點過分,但它最終讓它為我工作。 希望它能幫到你。

如果將以下行添加到gradle文件,則也不需要添加任何額外的jar文件:

compile group: 'org.bytedeco.javacpp-presets', name: <module>, version: <module-version>, classifier: <your-platform>

要獲取可用模塊,請在jcenter中搜索javacpp ,您將看到它們為org.bytedeco.javacv-presets:<module>

單擊其中任何一個將使您獲得與您的javacv版本匹配的版本。 因此,如果您正在使用javacv 0.11並想要添加opencv模塊,則需要使用2.4.7-0.11版本的javacpp-preset。

最后,只需添加你選擇的android-armandroid-x86或兩者的平台就可以了,你應該好好去。

最后,作為一個例子,這里的javacv導入對於arm平台的opencv和ffmpeg看起來像:

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: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-arm'

也許這可以幫助。

-keep @org.bytedeco.javacpp.annotation.Platform public class *

-keepclasseswithmembernames class * {
    @org.bytedeco.* <fields>;
}

-keepclasseswithmembernames class * {
    @org.bytedeco.* <methods>;
}

以下可能會有所幫助:

-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keep @interface org.bytedeco.javacpp.annotation.*,javax.inject.*

你可以使用:

-keepattributes *Annotation*

-keep @org.bytedeco.javacpp.annotation.Platform interface * {
    *;
}
-keepclassmembers,allowobfuscation class * {
    @org.bytedeco.javacpp.annotation.Platform <fields>;
    @org.bytedeco.javacpp.annotation.Platform <init>(...);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM