Android, javamail и proguard - PullRequest
       5

Android, javamail и proguard

7 голосов
/ 25 марта 2011

Я пытаюсь использовать javamail в своем приложении для Android, но proguard жалуется на целый ряд вещей, которые он не может найти.Я пробовал различные средства, которые я нашел при поиске в Интернете, но, похоже, ничего не работает.У кого-нибудь эта штука работает?Спасибо.

Я добавил некоторые команды -dontwarn в defauly proguard.cfg и успешно удалил все предупреждающие сообщения, кроме этого:

Warning: org.apache.harmony.awt.datatransfer.DataProxy: can't find referenced class [Ljava.awt.datatransfer.DataFlavor;

Это предупреждение отсутствует даже вв том же формате, что и все остальные.

Ответы [ 3 ]

22 голосов
/ 26 марта 2011

Я использую 2.1 SDK, который может иметь значение. У меня также есть довольно сложное письмо. Но теперь я отсортировал его, обновившись до proguard 4.6 и добавив следующие строки в мой proguard, cfg:

-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**

-keep class javamail.** {*;}
-keep class javax.mail.** {*;}
-keep class javax.activation.** {*;}

-keep class com.sun.mail.dsn.** {*;}
-keep class com.sun.mail.handlers.** {*;}
-keep class com.sun.mail.smtp.** {*;}
-keep class com.sun.mail.util.** {*;}
-keep class mailcap.** {*;}
-keep class mimetypes.** {*;}
-keep class myjava.awt.datatransfer.** {*;}
-keep class org.apache.harmony.awt.** {*;}
-keep class org.apache.harmony.misc.** {*;}

Последняя группа строк нетривиальна. Я получил его, запустив команды tar tf для каждого из jar-пакетов в пакете javamail.

Обновление для SDK 17

Android SDK 17 вносит некоторые изменения в способ загрузки jar-файлов. Если у вас есть проект, который использует внешние файлы jar, обновление до SDK 17 или более поздней версии, вероятно, сломает его. Чтобы исправить это, выберите «Проект»> «Свойства»> «Путь сборки Java»> «Порядок и экспорт» в меню и установите флажки слева от трех jar-файлов, используемых javamail. Это гарантирует, что банки будут экспортированы в целевую сборку. Без этого исправления проект все еще будет собираться, но javamail больше не будет работать, и proguard также не будет работать. Это , а не вообще не проблема. Это проблема Android SDK. Никаких изменений в proguard.cfg не требуется.

Еще одним следствием обновления SDK является то, что больше нет необходимости обновлять Proguard вручную.

1 голос
/ 26 марта 2011

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

Более подробные похожие вопросы и ответы на сегодня: один в стеке overflow и одинСправочный форум ProGuard .

Искаженное сообщение об ошибке "[Ljava.awt.datatransfer.DataFlavor;"была решена в ProGuard 4.6.Вы можете просто заменить proguard.jar в Android SDK.В качестве альтернативы вы можете обойти эту проблему, перечислив ссылочный класс вместо ссылочного класса: «-dontwarn org.apache.harmony.awt.datatransfer.DataProxy».

0 голосов
/ 26 марта 2011

Вы используете этот проект: javamail-android ?

У меня это работало без единой заминки (правда, с использованием настроек Proguard по умолчанию в 2.3 SDK), поэтому проблема может заключаться в том, что стандартному javamail требуются классы AWT, которых нет в Android.

Соответствующий пример кода находится на Отправка электронных писем без вмешательства пользователя (без намерений) в Android

...