2011-01-24 3 views
2

Итак, я пытаюсь заставить реализацию ADT встроенной proguard работать для моего приложения. К сожалению, кажется, что он задыхается от различных классов в сторонних библиотеках. Я пробовал различные, если не все, комбинации -libraryjars и -keep публичные строки классов, о которых я могу думать, но это все не к лучшему. Я не настолько опытен с Proguard, так честно, я не знаю, где я ошибаюсь. Я пробовал Google, но большая часть информации относится к скриптам Ant.Проблемы с Android ADT, Proguard и внешними банками

Некоторые из вещей, которые я пробовал:

  • линий, как -libraryjars C: \ Users \ Dave \ рабочее пространство \ Dropbox_Sync_for_Tasker_and_Locale \ Lib \ апач-mime4j-0.6.jar в верхней или нижней части файл

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

  • Линия как -keep общественного класса org.apache.commons.logging.LogFactory

  • линия, которые относятся к другой части линий ошибок, как -keep общественного класса org.apache.james.mime4j. field.MailboxListField

Во всяком случае, журнал ошибок огромная стена текста, так что я положил его на Pastebin here.

+0

Похоже, что вы можете столкнуться с одним из тех предположений платформы, которые делает Android. Вероятно, вы захотите поместить свои библиотеки в библиотеки libs/внутри вашего Android-проекта root. Похоже, что андроид работает в предположении, что внешние библиотеки jar будут расположены в этом каталоге. –

+0

Библиотеки находятся в этой папке. Я попытался ссылаться на них через относительный путь и продолжал получать IOExceptions от Proguard. Edit: Я просто заметил, что я использую папку lib, а не libs. Когда я вернусь к своему компьютеру, я посмотрю, если это проблема ... – camperdave

+0

Итак, да, так оно и было. Затем я сделал небольшие изменения и переделал, и он прекратил работать. Я понятия не имею, что делать сейчас. – camperdave

ответ

3

Итак, если вам случится найти этот ответ и, как, хм, у меня тоже есть эта проблема, я бы хотел, чтобы он опубликовал его решение, вам вдвойне повезло.

Путь я исправил это было просто наклеить -libraryjars линии там, а затем

-dontwarn org.apache.commons.logging.LogFactory 
-dontwarn net.jcip.annotations.NotThreadSafe 
-dontwarn net.jcip.annotations.ThreadSafe 
-dontwarn net.jcip.annotations.Immutable 

И это работало нормально. Это взлом, и он грязный, но он решил это для меня. К сожалению, вы все еще по-своему, если у вас тоже есть эта проблема.

0

попробуйте загрузить commons-logging.jar, поместите его в свои библиотеки и добавьте -libraryjars в конфигурацию proguard.

3

У меня был ровно та же проблема после добавления «apache-mime4j-0.6.1.jar» и «httpmime-4.0.1.jar» в мой проект. (для многостраничного POST'ing двоичных данных на моем сервере).

Я также не знаком с pro-guard, но по крайней мере мне удалось добавить свой пользовательский виджет в proguard.cfg - к сожалению, библиотека apache оказалась еще сложнее добавить!

это мое исправление ... Я это добавляется к нижней части proguard.cfg:

#APACHE LIBRARY 
-libraryjars /libs/apache-mime4j-0.6.1.jar 
-libraryjars /libs/httpmime-4.0.1.jar 
-keepnames class org.apache.** {*;} 
-keep public class org.apache.** {*;} 
-dontwarn org.apache.commons.logging.LogFactory 
-dontwarn org.apache.http.annotation.ThreadSafe 
-dontwarn org.apache.http.annotation.Immutable 
-dontwarn org.apache.http.annotation.NotThreadSafe 

Я надеялся, что первые 4 строки будет исправить. К сожалению, dontwarn нужны, чтобы действительно «исправить» его.

Исправьте меня, если я ошибаюсь (поскольку я не proGuard pro), но я считаю, что первые 4 строки гарантируют, что библиотеки используются как есть. Второй раздел из четырех строк (dontwarn) просто прикрывает оставшееся дерьмо и не исправляет некоторые основные проблемы. Какая основная проблема я не знаю.

+0

Команда -keepnames спасла мою жизнь и мой проект! Благодаря! +1! – Eduardo

Смежные вопросы