带有外部 jar 的 Android Proguard

Posted

技术标签:

【中文标题】带有外部 jar 的 Android Proguard【英文标题】:Android Proguard with external jar 【发布时间】:2011-10-15 19:02:30 【问题描述】:

我已将外部 jar 文件添加到 mt 项目的 libs 文件夹中,并在构建路径中进行配置。 当我尝试“导出 android 包”时,我收到一条 Proguard 错误消息,其中包含许多未找到的参考类,例如: 警告:com.itextpdf.text.BaseColor:找不到引用的类 java.awt.Color

当我尝试调试 BaseColor 类时工作正常,所以我不知道为什么它会警告我。

任何帮助将不胜感激,

谢谢

【问题讨论】:

【参考方案1】:

我尝试了几天让外部罐子正常工作。有人建议下载引用的 JARS 或正确定义 libjar。这些都不适合我。 起作用的是将这种东西放入出错的 JARS 中:

-dontwarn javax.management.**
-dontwarn java.lang.management.**
-dontwarn org.apache.log4j.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.slf4j.**
-dontwarn org.json.*

还有这个:

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

(显然您需要调整它以匹配您的错误消息)

祝你好运。

【讨论】:

这不会损害应用程序的功能吗?我尝试添加“-ignorewarnings”,它工作正常,但我担心它会给我的应用程序带来问题,比如强制关闭。 嗯,它可以删除你需要的东西,但为了避免这种情况,我混淆了,但没有压缩我的代码,即我使用了这些选项: -dontshrink -dontoptimize -dontpreverify 这意味着它混淆,但不删除东西。此外,例如,twitter4j 似乎包含对我的应用程序中未使用的库的引用。 ***.com/questions/3902943/… @Blundell,这个问题不是如何添加外部 jar,而是如何让 Proguard 不抱怨它们。 @Casp 如果您正确添加它们,它不会抱怨它们。我遇到了这个问题,找到了你的答案,Q 是我去的下一个链接。因此,我发布它是为了帮助其他到达这里的人。【参考方案2】:

com.itextpdf.text.BaseColor 包含在您添加的 jar 中,我猜。它扩展了java.awt.Color,它不包含在其中,但包含在您在 Eclipse 下使用的 Java 发行版中。

当您导出文件时,导出过程被卡为java.awt.colordoesn't exist in the Android base framework。我认为这与 Proguard 无关:即使您禁用了混淆,这也一定会发生。

【讨论】:

所以你的意思是我必须将 rt.jar (java.awt.color 所在的位置)添加到我的项目中,以使应用程序正常运行?因为我试图'-ignorewarnings'并且它仍然使用这个类(BaseColor)。 我不知道你是否可以这样做,因为很多类会与其 Android 版本冲突。我认为您应该包含整个 AWT 源代码以使其正常工作。我从未尝试过,但我在 Anddev 上找到了这个,它似乎证实了:anddev.org/other-coding-problems-f5/…

以上是关于带有外部 jar 的 Android Proguard的主要内容,如果未能解决你的问题,请参考以下文章

Android Proguard 跳过外部 jar

带有外部 Jar 的 Keycloak 自定义 SPI 部署

如何将 Android 库项目转换为外部 JAR?

如何在 Android 项目中使用外部 JAR?

eclipse生成带有外部jar包的java可执行jar包

Spring Boot:是不是可以在带有胖 jar 的任意目录中使用外部 application.properties 文件?