Ошибка Android: dalvik.system.BaseDexClassLoader.findClass - PullRequest
0 голосов
/ 31 декабря 2018

В настоящее время в моем производственном приложении я замечаю эту ошибку:

java.lang.RuntimeException: 
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:2648)
  at android.app.ActivityThread.access$1700 (ActivityThread.java:166)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1359)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:136)
  at android.app.ActivityThread.main (ActivityThread.java:5584)
  at java.lang.reflect.Method.invokeNative (Native Method)
  at java.lang.reflect.Method.invoke (Method.java:515)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1268)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1084)
  at dalvik.system.NativeStart.main (Native Method)

и обнаружил, что это из-за конфликтующих библиотек.Я использую около 7, и все они необходимы для правильной работы приложения.Я сделал ./gradlew app:dependencies и увидел кучу конфликтов (в основном android.support, а также google-services), и теперь мне нужно разрешить их с помощью тега exclude.

Мой вопрос заключается в том, как правильно установитьправильные версии?Нужно ли заставлять всех библиотек переходить на самую маленькую версию определенной библиотеки или я просто заставляю их всех переходить на последнюю версию?

Извините за вопрос noob Я довольно новичок в управлении библиотеками в Android.

РЕДАКТИРОВАТЬ: больше трассировки стека

Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:497)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:457)
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:2643)

Также аналогичная ошибка , но с другой трассировкой стека.

app / build.gradle :

project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"

def enableSeparateBuildPerCPUArchitecture = false

def enableProguardInReleaseBuilds = false

android {
compileSdkVersion 28
buildToolsVersion "28.0.2"

    defaultConfig {
        applicationId "com.lisdoworker"
        minSdkVersion 18
        targetSdkVersion 28
        versionCode 15
        versionName "1.1"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
        manifestPlaceholders = [
            tipsiStripeRedirectScheme: "example"
        ]
        multiDexEnabled true
    }
    signingConfigs {
        release {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
    }
    // 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
            }
        }
    }
    dexOptions {
        jumboMode true
    }
}

dependencies {
    // react-native-firebase
    implementation project(':react-native-firebase')

    implementation "com.google.firebase:firebase-core:16.0.4"
    implementation "com.google.firebase:firebase-messaging:17.3.4"
    implementation 'me.leolin:ShortcutBadger:1.1.21@aar'

    implementation(project(':react-native-google-places')){
        exclude group: 'com.google.android.gms', module: 'play-services-base'
        exclude group: 'com.google.android.gms', module: 'play-services-places'
        exclude group: 'com.google.android.gms', module: 'play-services-location'
    }

    implementation 'com.google.android.gms:play-services-base:16.+'
    implementation 'com.google.android.gms:play-services-places:16.+'
    implementation 'com.google.android.gms:play-services-location:16.+'
    implementation 'com.google.android.gms:play-services-wallet:16.+'
    implementation 'com.google.android.gms:play-services-identity:16.+'

    implementation project(':tipsi-stripe')
    implementation project(':react-native-linear-gradient')
    implementation project(':react-native-fast-image')

    implementation project(':react-native-vector-icons')
    implementation project(':react-native-image-picker')
    implementation project(':react-native-fetch-blob')
    implementation project(':react-native-fbsdk')

    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.android.support:appcompat-v7:27.1.0"

    implementation "com.facebook.react:react-native:+"  // From node_modules
}

// 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'
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

1 Ответ

0 голосов
/ 31 декабря 2018

из-за minSdkVersion 18 вы должны добавить зависимость к com.android.support:multidex:1.0.3 для правильной Dalvik поддержки виртуальной машины.

* Manifest.xml также должен иметь ссылку на класс Application.

и ответить на актуальный вопрос;сначала удалите эту строку:

com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

, затем обновите buildToolsVersion до 28.0.3 и избавьтесь от этих 16.+ номеров версий.

статические номера версий приводят к довольно воспроизводимымрезультаты, по сравнению с обозначением +.подобно этому, необходимо вручную обновить эти номера версий, но, по крайней мере, один знает, какой номер версии был обновлен и какую версию необходимо возвращать в случае проблем (это стоит усилий).

com.android.support:appcompat-v7:27.1.0 также может быть обновлено до 28.0.0.

, после этого Android Studio должна подчеркнуть некоторые зависимости красным цветом, предоставляя подсказку, которую com.google.android.gms и com.android.support может потребоваться исключить - или добавить.например.support-v4 является распространенным кандидатом на исключение, но его нужно добавить в соответствующую версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...