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.** {*;}
在我的应用程序中,我将电子邮件发送到某个特定地址,一切正常,但是当使用 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.** {*;}