Получение Неудачного разрешения: Lcom/google/zxing/RGBLuminanceSource; при реализации ААР

Я создаю AAR, в котором реализована библиотека Zxing. Когда я пытаюсь использовать этот AAR в другом приложении, он дает java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/zxing/RGBLuminanceSource; в следующем методе.

public static String decodeQRImage(Bitmap bMap) {
    String value = null;

    int[] intArray = new int[bMap.getWidth() * bMap.getHeight()];
    bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight());
    LuminanceSource source = new RGBLuminanceSource(bMap.getWidth(), bMap.getHeight(), intArray);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

    Reader reader = new QRCodeReader();
    try {
        Result result = reader.decode(bitmap);
        value = result.getText();
    } catch (NotFoundException e) {
        e.printStackTrace();
        value = e.getMessage();
    } catch (ChecksumException e) {
        e.printStackTrace();
        value = e.getMessage();
    } catch (FormatException e) {
        value = e.getMessage();
        e.printStackTrace();
    }
    return value;
}

и когда я использую вышеуказанный метод непосредственно в приложении, не реализуя его в AAR, он работает отлично

Ниже приведены зависимости, используемые в AAR.

    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    implementation 'com.kaopiz:kprogresshud:1.2.0'
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
    implementation 'com.github.f0ris.sweetalert:library:1.5.1'
    implementation 'com.google.android.gms:play-services-vision:18.0.0'
    implementation 'com.scottyab:rootbeer-lib:0.0.7'
    implementation 'com.google.firebase:firebase-analytics:17.2.0'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
    implementation "androidx.versionedparcelable:versionedparcelable:1.1.0"

    implementation 'com.google.android.play:core:1.6.3'
    implementation 'org.jsoup:jsoup:1.11.3'

и ниже приведены зависимости, используемые в приложении

    implementation project(":ziplibrary-debug")
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'

person Dheeraj Pandey    schedule 10.07.2020    source источник
comment
Покажите список ваших зависимостей AAR и приложения, которое вы создаете.   -  person Jenea Vranceanu    schedule 10.07.2020
comment
Я использовал зависимость Zxing в AAR, но не в приложении. Обязательно ли добавлять зависимость Zxing также в приложение? если да, то мне придется добавить все остальные зависимости в приложение   -  person Dheeraj Pandey    schedule 10.07.2020


Ответы (1)


AAR создается только с вашим кодом. Никакие зависимости не попадают в AAR по умолчанию. Вот вариант как включить зависимости в AAR.

Кроме того, может быть полезно узнать о транзитивных зависимостях: транзитивные зависимости не разрешены для библиотеки aar с использованием gradle

Обновлять

Чтобы решить проблему с META-INF файлами, вы можете использовать Gradle packagingOptions. Внутри вашего файла build.gradle найдите блок android и вставьте следующее:

android {
    ...

    packagingOptions {
        exclude 'META-INF/retrofit.kotlin_module'
    }
}
person Jenea Vranceanu    schedule 10.07.2020
comment
Спасибо, я добавил все зависимости с помощью задачи, и это сработало. Но если кто-то использует мой AAR и добавит в свое приложение ту же зависимость, которую я добавил в свой AAR, тогда сборка завершится ошибкой с этим сообщением - More than one file was found with OS independent path 'META-INF/retrofit.kotlin_module' - person Dheeraj Pandey; 13.07.2020