Proguard 移除 com.sun.mail.imap.IMAPProvider

Proguard removes com.sun.mail.imap.IMAPProvider

在我的应用程序中,我将电子邮件发送到某个特定地址,一切正常,但是当使用 ProGuard 进行混淆、压缩等时,它失败了

我试过添加一些 ProGuard 规则,但没有用

那是我的 ProGuard

-keepclassmembernames class com.sun.mail.imap
2019-08-08 14:29:26.811 11724-12675/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5
    Process: com.redegrow.besttaxi, PID: 11724
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask.done(AsyncTask.java:354)
        ...
     Caused by: java.util.ServiceConfigurationError: e.b.r: Provider com.sun.mail.imap.IMAPProvider not found
        at java.util.ServiceLoader.fail(ServiceLoader.java:233)
        at java.util.ServiceLoader.access0(ServiceLoader.java:183)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:373)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
        at java.util.ServiceLoader.next(ServiceLoader.java:494)
     ...
     Caused by: java.lang.ClassNotFoundException: com.sun.mail.imap.IMAPProvider
     ...
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sun.mail.imap.IMAPProvider" on path: DexPathList[[zip file "/data/app/com.redegrow.besttaxi-_Kl-yVNRgbmmwzLXuKKmWQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.redegrow.besttaxi-_Kl-yVNRgbmmwzLXuKKmWQ==/lib/arm64, /system/lib64, /vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
       ...

对 class 使用 keepclassmembernames 告诉 ProGuard 不要混淆 class 成员,但对 class 本身没有影响。所以 ProGuard 完成了它的工作并更改了 class 名称。

因此,如果您想防止 ProGuard 混淆 class 名称,您应该改用 keepnames

为了防止混淆和缩小(在不使用的情况下将被删除),如果您只想针对 class 成员和 keep 以 class 本身及其成员为目标。

好吧,我找到了解决方案。 不是很好,但至少可以用

-keep class com.sun.mail.imap.IMAPProvider
-keep class com.sun.mail.imap.IMAPSSLProvider
-keep class com.sun.mail.smtp.** {*;}