关于这方面的文件非常差.我知道可以通过在项目的rot目录中手动编辑"default.properties"来启用ProGuard.所有的设置都放在同一个地方的"proguard.cfg"文件中,但我想知道正在使用哪个版本的ProGuard(我使用的是Eclise Indigo).我还希望能够在发布时将其升级到最新版本.但我找不到任何关于如何做的参考.
首先,我已经提到过类似的帖子,Android,javamail和proguard
提到的解决方案是在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.** {*;}
Run Code Online (Sandbox Code Playgroud)
乍一看,这似乎是有效的,因为它编译时没有任何警告.但是,它无法读取消息内容,只是跳过它.我尝试过以下方法:
经过几个小时的挫折之后,我发现这似乎有用了:
-dontobfuscate
-dontshrink
-keepdirectories
-keeppackagenames javax.mail.**
-keeppackagenames javax.activation.**
-keeppackagenames …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码在我的Android应用程序中发送电子邮件:
m_properties = new Properties();
m_properties.put("mail.smtp.host", "smtp.gmail.com");
m_properties.put("mail.smtp.socketFactory.port", "465");
m_properties.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
m_properties.put("mail.smtp.auth", "true");
m_properties.put("mail.smtp.port", "465");
m_Session = Session.getDefaultInstance(m_properties,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,
passWord);
}
});
m_simpleMessage = new MimeMessage(m_Session);
m_fromAddress = new InternetAddress(userName);
m_toAddress = new InternetAddress(eRecipient);
m_simpleMessage.setFrom(m_fromAddress);
m_simpleMessage.setRecipient(RecipientType.TO, m_toAddress);
m_simpleMessage.setSubject(eSubject);
m_simpleMessage.setContent(eBody, "text/plain");
Transport.send(m_simpleMessage);
Run Code Online (Sandbox Code Playgroud)
它工作得非常好,直到我混淆了我的代码.然后电子邮件无法发送,抛出错误:javax.mail.nosuchproviderexception smtp
我在proguard.cfg中尝试了各种设置,例如:-keep class javax.mail.**{*; }
但没有任何作用.如果我关闭混淆,它再次正常工作.
有什么想法会发生这种情况吗?
提前致谢.
编辑:我的Proguard配置文件
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-verbose
-libraryjars "C:\Program Files\Android\android-sdk\platforms\android-15\android.jar"
-libraryjars "C:\Documents and Settingslibs\commons-io-2.4.jar"
-libraryjars "C:\Documents and Settings\libs\mail.jar"
-libraryjars "C:\Documents and Settingslibs\activation.jar" …Run Code Online (Sandbox Code Playgroud)