如何让 Proguard 忽略外部库?

发布于 2024-12-09 07:10:23 字数 533 浏览 0 评论 0原文

我想使用 Proguard 主要是出于混淆的原因。

我的问题是我有三个库,Twitter4J 和两个路标库。当我尝试创建签名的 APK 时,这些库导致错误。为了解决这个问题,我将以下内容放入 proguard.config 文件中...

-dontwarn org.apache.commons.codec.binary.** 
-dontwarn org.slf4j.** 
-dontwarn com.sun.syndication.io.**
-dontwarn com.sun.syndication.feed.synd.*   

虽然这消除了控制台中的错误,但当我将签名的 APK 加载到手机上时,它立即崩溃了。 DDMS 表示这是由于 Twitter4J 中未找到的类造成的。

摆脱上面的“dontwarns”并没有帮助。添加 dontshrink dontoptimise 也没有效果。

我希望 Proguard 完全忽略这些库(因为它们无论如何都是开源的)。这可能吗?

I want to use Proguard mainly for obfuscation reasons.

My problem is that I have three libraries, Twitter4J and two signpost libraries. These libraries caused errors when I tried to create an signed APK. To get over this I put the following in the proguard.config file...

-dontwarn org.apache.commons.codec.binary.** 
-dontwarn org.slf4j.** 
-dontwarn com.sun.syndication.io.**
-dontwarn com.sun.syndication.feed.synd.*   

While this got rid of the errors in the console, when i loaded my signed APK onto my mobile phone it instantly crashed. The DDMS said this was due to a class not found in Twitter4J.

Getting rid of the "dontwarns" above did not help. Neither did adding dontshrink dontoptimise.

I would like Proguard to completely ignore the libraries (as they are open source anyway). Is this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

腹黑女流氓 2024-12-16 07:10:23

试试这个:

-keep class javax.** { *; }
-keep class org.** { *; }
-keep class twitter4j.** { *; }

参见@CaspNZ 的帖子:
带有外部 jar 的 Android Proguard

Try this:

-keep class javax.** { *; }
-keep class org.** { *; }
-keep class twitter4j.** { *; }

Cf post from @CaspNZ:
Android Proguard with external jar

尐偏执 2024-12-16 07:10:23

您应该能够将以下行添加到 proguard.cfg 中以排除包(和子包)中的所有类

-keep class org.apache.commons.codec.binary.**
-keep interface org.apache.commons.codec.binary.**
-keep enum org.apache.commons.codec.binary.**
-keep class org.slf4j.**
-keep interface org.slf4j.**
-keep enum org.slf4j.**
-keep class com.sun.syndication.io.**
-keep interface com.sun.syndication.io.**
-keep enum com.sun.syndication.io.**
-keep class com.sun.syndication.feed.synd.**
-keep interface com.sun.syndication.feed.synd.**
-keep enum com.sun.syndication.feed.synd.**

You should be able to add to the proguard.cfg the following lines to exclude all classes within a package (and subpackages)

-keep class org.apache.commons.codec.binary.**
-keep interface org.apache.commons.codec.binary.**
-keep enum org.apache.commons.codec.binary.**
-keep class org.slf4j.**
-keep interface org.slf4j.**
-keep enum org.slf4j.**
-keep class com.sun.syndication.io.**
-keep interface com.sun.syndication.io.**
-keep enum com.sun.syndication.io.**
-keep class com.sun.syndication.feed.synd.**
-keep interface com.sun.syndication.feed.synd.**
-keep enum com.sun.syndication.feed.synd.**
青衫儰鉨ミ守葔 2024-12-16 07:10:23

我想补充一点,在添加 proguard 规则后,您应该将项目与 Gradle 文件同步,否则它们可能无法工作。

I'd like to add that you should sync your project with Gradle files after adding proguard rules, otherwise they may not work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文