Android, Proguard și Javamail

First off, i've already to referred to a similar post, Android, javamail and proguard

Soluția menționată a fost să păstreze în mod explicit următoarele în proguard-project.txt:

-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.** {*;}

La prima vedere, acest lucru părea să funcționeze, așa cum a compilat fără avertismente. Cu toate acestea, acesta nu reușește la citirea conținutului mesajului și doar omite peste acesta. Am incercat urmatoarele:

  1. -includerea în jurnal, denumirea explicită a fișierelor de 3 jar necesare pentru javamail.
  2. - a eliminat borcanele ca o bibliotecă externă, urmând noul format libs/inclus.
  3. - a menținut setările implicite pentru Android în proguard-android.txt
  4. - a urmat ghidul de remediere a problemelor din programul de lucru proguard
  5. - a inițiat un nou proiect și a copiat peste fișierele sursă la acesta.
  6. - au încercat diferite opțiuni de proguard, inclusiv -dontshrink, nume de ținere, etc
  7. -proiect/curat

După câteva ore de frustrare, iată ce am găsit că părea să funcționeze:

-dontobfuscate
-dontshrink
-keepdirectories
-keeppackagenames javax.mail.**
-keeppackagenames javax.activation.**
-keeppackagenames com.sun.mail.**
-keeppackagenames myjava.**
-keeppackagenames org.apache.harmony.**
-keeppackagenames mailcap.**
-keeppackagenames mimetypes.**
-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.** {*;}

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

Bineînțeles că este absurd pentru că mă întorc - dontobfuscate și -dontshrink. Orice proguard și javamail gurus au o soluție la asta? Sunt ADT17, folosind 2.1 (api7) pentru construire. Dacă aș putea exclude borcanele în întregime din proces? Orice sfat va fi un dumnezeiesc în acest moment.

3

1 răspunsuri

Problema rezolvata. Am postat soluția aici pentru oricine are probleme cu cealaltă soluție menționată în linkul de mai sus.

Pentru că folosesc o clasă de ajutor cu javamail (Mail.java), trebuia să includ această clasă ca o "ținere", pentru ca aceasta să funcționeze. Am editat soluția oferită la Android, javamail și proguard pentru a include clasa de ajutor, deoarece mulți folosesc aceasta și cealaltă soluție pot eșua oribil fără ea.

Puneți-o în fișierul dvs. proguard-project.txt. Am folosit setările implicite Android în caz contrar.

-dontshrink
-keep class javax.** {*;}
-keep class com.sun.** {*;}
-keep class myjava.** {*;}
-keep class org.apache.harmony.** {*;}
-keep public class Mail {*;}
-dontwarn java.awt.**
-dontwarn java.beans.Beans
-dontwarn javax.security.**
8
adăugat
-keep class com.sun.mail.handlers. ** {*;} a facut truc pentru mine, chiar si cu psihiatru.
adăugat autor Nick Russler, sursa
V-aș sfătuia ferm să nu folosiți Mail.java, cel puțin fără prea multe modificări. Acest cod conține un număr de pași inutili și, mai important, nu vă permite să recuperați mesajul de stare returnat de serverul SMTP. Dacă, din orice motiv, mesajul nu reușește să sosească, utilizatorul dvs. nu va fi cel mai înțelept. Soluția dvs. este mai scurtă decât a mea, dar numai pentru că păstrează mai multe binare, ceea ce poate duce la un fișier apk mai mare.
adăugat autor Philip Sheard, sursa
Această soluție permite compilarea și păstrarea funcționalității de e-mail chiar și atunci când eliminați declarația -dontshrink :-)
adăugat autor Pascal, sursa
@PhilipSheard Aveți vreo recomandare?
adăugat autor CyberMew, sursa
O soluție plăcută. Mulțumesc.
adăugat autor Brave, sursa
@ThumbsDp funcționează bine pentru mine, mulțumesc :)
adăugat autor Peter, sursa
Pentru cazul meu, numai clasele următoare au făcut javax-ul clasei clase. ** {;} -keep clasa com.sun. * {;} -keep class org.apache.harmony. * {*;}
adăugat autor orchidrudra, sursa
Funcționează perfect. Mulțumesc!
adăugat autor Razvan, sursa
Android dezvoltatori, România — Moldova
Android dezvoltatori, România — Moldova
27 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro iOS: @ro_ios Reguli: https://github.com/js-ro/it-telegram/blob/master/RULES.md