Android Studio VerifyError отклоняет класс text_plain из JavaMail API

Я разрабатываю приложение, которое позволяет пользователю связаться со мной, отправив электронное письмо (пользователь вводит только сообщение, электронные письма отправителя и получателя являются моими). Я пытаюсь реализовать это с помощью gmail, используя API JavaMail. Однако я продолжаю получать эту ошибку в строке Transport.send(mimeMessage).

Вот сообщения об ошибках:

Причина: java.lang.VerifyError: отклонение класса com.sun.mail.handlers.text_plain, который пытается создать подтип ошибочного класса com.sun.mail.handlers.handler_base (объявление 'com.sun.mail.handlers.text_plain ' появляется в /data/app/~~T_TRkO9R_v9j4iEdr4K9Yg==/com.example.compusec-dPeAL8DtGJvU45dJpt8xxA==/base.apk)

Вызвано: java.lang.VerifyError: Верификатор отклонил класс com.sun.mail.handlers.handler_base: java.awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors() не удалось проверить: java. awt.datatransfer.DataFlavor[] com.sun.mail.handlers.handler_base.getTransferDataFlavors(): [0x4] не удается разрешить возвращенный тип «Неразрешенная ссылка: java.awt.datatransfer.DataFlavor[]» или «Ссылка: javax. активация.ActivationDataFlavor[]' (объявление 'com.sun.mail.handlers.handler_base' появляется в /data/app/~~T_TRkO9R_v9j4iEdr4K9Yg==/com.example.compusec-dPeAL8DtGJvU45dJpt8xxA==/base.apk)

Вот мой код:

    protected Void doInBackground(Void... voids) {
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.socketFactory.port", "465");
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.port", "465");

        session = javax.mail.Session.getInstance(properties, new javax.mail.Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication(){
                return new PasswordAuthentication("[email protected]","senderpass");
            }
        });

        session.setDebug(true);

        MimeMessage mimeMessage = new MimeMessage(session);
        try {
            mimeMessage.setFrom(new InternetAddress("[email protected]"));
            mimeMessage.addRecipients(Message.RecipientType.TO, String.valueOf(new InternetAddress(email)));
            mimeMessage.setSubject(subject);
            mimeMessage.setText(message);
            Transport.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

        return null;
    }

И сценарий градиента:

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    packagingOptions {
        pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
    }

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

repositories {
    jcenter()
    maven {
        url "https://maven.java.net/content/groups/public/"
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    compile 'com.sun.mail:android-mail:1.6.2'
    compile 'com.sun.mail:android-activation:1.6.2'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}


person Maitha B    schedule 02.11.2020    source источник
comment
Я сообщил об этом как об ошибке в Google. Вот ссылка issuetracker.google.com/issues/172544275 Перейдите по ссылке и пометьте проблема - это сообщит Google, что вы пострадали от нее, и, надеюсь, она будет решена быстрее.   -  person gbotha    schedule 05.11.2020
comment
@gbotha Помечено. Надеюсь, это скоро разрешится.   -  person Maitha B    schedule 06.11.2020


Ответы (2)


У меня такая же проблема. Что я могу вам сказать, так это то, что если вы ориентируетесь на Android 10 и ниже (SDK 29 или ниже), все работает нормально. Я использую его в течение многих лет. Однако, как только я нацеливаюсь на Android 11 (SDK 30), я получаю эту ошибку. Я предполагаю, что зависимости com.sun.mail необходимо обновить. Я использую последнюю версию 1.6.5 и все еще не работает. Поэтому я предлагаю пока ориентироваться на SDK 29 и посмотреть, поможет ли это.

person gbotha    schedule 05.11.2020
comment
К счастью, я ориентируюсь на Android 10, и снижение SDK до 29 сработало отлично! Большое спасибо :) - person Maitha B; 06.11.2020
comment
Я отправил сообщение об ошибке Android 2 дня назад и разговаривал с Google. Они говорят, что это ожидаемое поведение для Android 11, и что-то нужно изменить в нашем коде, но пока не слишком ясно, что делать. Вы можете увидеть сообщение об ошибке, представленное здесь issuetracker.google.com/issues/172544275, и пометить его. чтобы показать, что вы пострадали, а также добавить свои собственные комментарии. - person gbotha; 07.11.2020

Используйте это в build.gradle:

android {
    ...
    packagingOptions {
        exclude 'META-INF/NOTICE.md'
        exclude 'META-INF/LICENSE.md'
    }
}

dependencies {
    implementation 'com.sun.mail:android-mail:1.6.6'
    implementation 'com.sun.mail:android-activation:1.6.6'
    ...
}

упоминание нескольких последних комментариев к этой проблеме

person radda    schedule 28.07.2021