Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SwipeRefreshLayout error on a react-native app after androidx migration

Just migrated my app to androidx and cannot work out this error. I receive it just at the end of npx react-native run-android execution which breaks the app. The error looks like this:

java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/swiperefreshlayout/widget/SwipeRefreshLayout;
        at com.facebook.react.shell.MainReactPackage.createViewManagers(MainReactPackage.java:351)
        at com.facebook.react.ReactInstanceManager.getOrCreateViewManagers(ReactInstanceManager.java:756)
        at com.facebook.react.CoreModulesPackage.createUIManager(CoreModulesPackage.java:170)
        at com.facebook.react.CoreModulesPackage.access$200(CoreModulesPackage.java:53)
        at com.facebook.react.CoreModulesPackage$7.get(CoreModulesPackage.java:128)
        at com.facebook.react.CoreModulesPackage$7.get(CoreModulesPackage.java:125)
        at com.facebook.react.NativeModuleRegistryBuilder.processPackage(NativeModuleRegistryBuilder.java:61)
        at com.facebook.react.ReactInstanceManager.processPackage(ReactInstanceManager.java:1173)
        at com.facebook.react.ReactInstanceManager.processPackages(ReactInstanceManager.java:1143)
        at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:1085)
        at com.facebook.react.ReactInstanceManager.access$900(ReactInstanceManager.java:117)
        at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:916)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.swiperefreshlayout.widget.SwipeRefreshLayout" on path: DexPathList[[zip file "/data/app/com.app-Of8EHYbtm9-YItGtnh8O9Q==/base.apk"],nativeLibraryDirectories=[/data/app/com.app-Of8EHYbtm9-YItGtnh8O9Q==/lib/x86, /data/app/com.app-Of8EHYbtm9-YItGtnh8O9Q==/base.apk!/lib/x86, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
...

I've tried things like cleaning, rebuilding, played with version of dependencies, but cannot overcome this one.

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'

    defaultConfig {
        applicationId "app-name"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 2097177
        versionName "2.0"
        multiDexEnabled true

        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    signingConfigs {
        release {
            if (project.hasProperty("my-release-key.keystore")) {
                storeFile file("my-release-key.keystore")
                storePassword "quince"
                keyAlias "quince"
                keyPassword "quince"
            }
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }
    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
            def versionCodes = ["armeabi-v7a": 1, "x86": 2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

ext {
    buildToolsVersion = "28.0.3"
    minSdkVersion = 16
    compileSdkVersion = 28
    targetSdkVersion = 28
    supportLibVersion = "28.0.0"
    googlePlayServicesVersion = "16.0.0"
    googlePlayServicesVisionVersion = "17.0.2"
}


dependencies {
    implementation project(':react-native-billing')
//    def supportLibVersion = project.hasProperty('supportLibVersion') ? project.supportLibVersion : DEFAULT_SUPPORT_LIB_VERSION
//    def googlePlayServicesVersion = project.hasProperty('googlePlayServicesVersion') ? project.googlePlayServicesVersion : DEFAULT_GOOGLE_PLAY_SERVICES_VERSION
//    def firebaseVersion = project.hasProperty('firebaseVersion') ? project.firebaseVersion : DEFAULT_FIREBASE_MESSAGING_VERSION

    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "androidx.annotation:annotation:1.1.0"
    //implementation "io.branch.sdk.android:library:3.0.0"
    implementation project(':react-native-image-picker')
    implementation project(':react-native-branch')
    implementation project(':react-native-push-notification')
    implementation project(':react-native-vector-icons')
    implementation project(':react-native-linear-gradient')
    implementation project(':react-native-wheel-picker')
    implementation project(':react-native-svg')
    implementation 'androidx.multidex:multidex:2.0.1'
    implementation 'androidx.appcompat:appcompat:1.1.0-beta01'//26.1.0

    implementation 'com.google.firebase:firebase-core:17.0.0'
    implementation 'com.google.firebase:firebase-messaging:19.0.0'
    implementation "com.facebook.react:react-native:+"  // From node_module

    implementation "com.google.android.gms:play-services-base:16.0.1"
}

// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

apply plugin: 'com.google.gms.google-services'

Here's my build.gradle file. I really don't know what to do here. The swipe refresh worked fine up untill the androidx migration.

I'd greatly appreciate any helpful information or advice.

like image 438
preslavpa Avatar asked Jul 05 '19 11:07

preslavpa


Video Answer


1 Answers

I found a solution. Problem is related to react-native-screens.

Add the following two lines to dependencies section in android/app/build.gradle.

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha03'

https://github.com/kmagiera/react-native-screens#usage-with-react-navigation-without-expo

CR: https://github.com/react-navigation/react-navigation/issues/6267#issuecomment-528883756

like image 68
xang Ultimate Avatar answered Oct 07 '22 00:10

xang Ultimate