9

我刚刚创建了一个需要 Dropbox.com API 库的 Android 应用程序。我现在正在尝试以“发布”模式构建应用程序,并希望在代码上运行 proguard 以对其进行混淆。但是,每当我尝试运行 Proguard 时,都会出现以下错误:

Proguard returned with error code 1. See console
Warning: com.dropbox.client2.DropboxAPI: can't find referenced class org.json.simple.JSONArray
Warning: com.dropbox.client2.DropboxAPI: can't find referenced class org.json.simple.JSONArray
Warning: com.dropbox.client2.DropboxAPI$Entry: can't find referenced class org.json.simple.JSONArray
Warning: com.dropbox.client2.DropboxAPI$Entry: can't find referenced class org.json.simple.JSONArray
Warning: com.dropbox.client2.RESTUtility: can't find referenced class org.json.simple.parser.JSONParser
Warning: com.dropbox.client2.RESTUtility: can't find referenced class org.json.simple.parser.JSONParser
Warning: com.dropbox.client2.RESTUtility: can't find referenced class org.json.simple.parser.JSONParser
Warning: com.dropbox.client2.RESTUtility: can't find referenced class org.json.simple.parser.ParseException
Warning: there were 8 unresolved references to classes or interfaces.
         You may need to specify additional library jars (using '-libraryjars'),
         or perhaps the '-dontskipnonpubliclibraryclasses' option.
         java.io.IOException: Please correct the above warnings first.
         at proguard.Initializer.execute(Initializer.java:308)
         at proguard.ProGuard.initialize(ProGuard.java:210)
         at proguard.ProGuard.execute(ProGuard.java:85)
         at proguard.ProGuard.main(ProGuard.java:499)

我已经包含了“-dontskipnonpubliclibraryclasses”选项,这对我一点帮助都没有。我尝试包含“-libraryjars”选项,但是,我可能使用不正确,因为我不确定我打算如何使用该标志。

有谁知道如何纠正这个错误?现在,我无法在通过 Proguard 运行我的应用程序时构建它。任何帮助表示赞赏!谢谢!

4

2 回答 2

10

参照。ProGuard 手册 > 疑难解答 > 警告:找不到引用的类

com.dropbox 似乎依赖于 org.json。因此,理论上,您应该将 org.json jar 添加到您的 libs 目录中,这样它就可以被处理并包含在您的应用程序中。实际上,没有它,您的应用程序也可以正常工作,因此您可以让 ProGuard 忽略缺少的依赖项:

-dontwarn org.json.**

或者

-dontwarn com.dropbox.**

您不应该添加 -libraryjars,因为您指定的任何 jar 都不会出现在 Android 设备上,除非您设法安装它们。

于 2011-11-07T23:38:57.843 回答
2

好吧,基本上通过反复试验,我至少找到了一种解决方法。我不会认为这本身就是一个实际的“答案”,但是,通过在我的proguard.cfg文件中添加以下行来解决我的问题。

-libraryjars /lib/dropbox-android-sdk-1.2.1.jar
-libraryjars /lib/httpmime-4.0.3.jar
-libraryjars /lib/json_simple-1.1.jar

-dontwarn com.dropbox.client2.DropboxAPI
-dontwarn com.dropbox.client2.DropboxAPI$Entry
-dontwarn com.dropbox.client2.RESTUtility

希望这会帮助那些发现自己在未来遇到这个或非常类似的问题的人。

于 2011-11-07T17:05:46.367 回答