0

I am building an AAR in which i have Zxing library implemented. When i try to use this AAR in another application it gives java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/zxing/RGBLuminanceSource; in following method

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;
}

and when i use above method directly in application without implementing it in AAR it runs perfectly

Following are the dependencies used in 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'

and following are the dependencies used in application

    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'
  • Show the list of your dependencies of AAR and of the application you build. – Jenea Vranceanu Jul 10 '20 at 08:37
  • I have used Zxing dependency in AAR but not in application. Is that compulsory to add Zxing dependency also in application? if yes then i will have to add all other dependencies in application – Dheeraj Pandey Jul 10 '20 at 11:02

1 Answers1

1

AAR is built with your code only. No dependencies end up in AAR by default. Here is an option on how to include dependencies into AAR.

Also, it may be helpful to know about transitive dependencies: Transitive dependencies not resolved for aar library using gradle

Update

To fix the issue with META-INF files you can use Gradle packagingOptions. Inside of your build.gradle file find android block and insert the following:

android {
    ...

    packagingOptions {
        exclude 'META-INF/retrofit.kotlin_module'
    }
}
Jenea Vranceanu
  • 4,530
  • 2
  • 18
  • 34
  • Thanks, I added all dependencies using task and it worked. But if someone uses my AAR and adds same dependency in his application as i added in my AAR then build failed with this message- ```More than one file was found with OS independent path 'META-INF/retrofit.kotlin_module'``` – Dheeraj Pandey Jul 13 '20 at 07:25