Использование Proguard для обфускации приложения Android с библиотеками Dropbox.com - PullRequest
9 голосов
/ 07 ноября 2011

Я только что закончил создавать приложение для Android, для которого требуются библиотеки API Dropbox.com. Сейчас я пытаюсь собрать приложение в режиме «Release» и хотел бы запустить 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. Любая помощь приветствуется! Спасибо!

Ответы [ 2 ]

10 голосов
/ 08 ноября 2011

ЧФР. Руководство по ProGuard> Устранение неполадок> Предупреждение: не удается найти указанный класс

com.dropbox, по-видимому, зависит от org.json.Теоретически, вы должны добавить jar org.json в каталог libs, чтобы он мог быть обработан и включен в ваше приложение.На практике ваше приложение работает нормально без него, поэтому вы можете позволить ProGuard игнорировать отсутствующую зависимость:

-dontwarn org.json.**

или

-dontwarn com.dropbox.**

Не следует добавлять -libraryjars, потому что любые jar-файлыуказанное вами имя не будет присутствовать на устройствах Android, если вам не удастся их установить.

2 голосов
/ 07 ноября 2011

Ну, в основном методом проб и ошибок, я по крайней мере получил обходной путь.Я бы не стал воспринимать это как фактический «ответ» как таковой, однако, моя проблема была решена путем добавления следующих строк в мой файл 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

Надеюсь, это поможет кому-то, кто найдет себязастрял с этой или очень похожей проблемой в будущем.

...