java .lang.ClassCastException: androidx.multidex.MultiDexApplication не может быть приведено к com.facebook.react.ReactApplication - PullRequest
0 голосов
/ 31 марта 2020

Я создал приложение в React-Native, импортировал собственный сторонний компонент в Android. После импорта и исправления некоторых ошибок приложение очищается и собирается правильно, но при открытии происходит сбой, выдавая мне эту ошибку:

2020-03-31 08:44:14.296 12061-12061/com.smartsign E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.smartsign, PID: 12061
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.smartsign/com.smartsign.MainActivity}: java.lang.ClassCastException: androidx.multidex.MultiDexApplication cannot be cast to com.facebook.react.ReactApplication
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassCastException: androidx.multidex.MultiDexApplication cannot be cast to com.facebook.react.ReactApplication
        at com.facebook.react.ReactActivityDelegate.getReactNativeHost(ReactActivityDelegate.java:61)
        at com.facebook.react.ReactActivityDelegate.onCreate(ReactActivityDelegate.java:76)
        at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:44)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Я не могу понять, как исправить эту ошибку, несмотря на то, что искал везде

Unable to start activity ComponentInfo{com.smartsign/com.smartsign.MainActivity}: java.lang.ClassCastException: androidx.multidex.MultiDexApplication cannot be cast to com.facebook.react.ReactApplication

Это части кода, которые я изменил для импорта собственного компонента: 1) В файле верхнего уровня build.gradle в репозиториях блок в секции allproject :

jcenter()
mavenCentral()
maven { url 'https://haibison.bitbucket.io/maven-repos' }
maven { url 'https://mvnrepository.com/artifact/com.google.zxing' }
maven { url 'https://mvnrepository.com/artifact/org.jdom/jdom2' }
maven { url 'https://mvnrepository.com/artifact/jaxen/jaxen' }
maven { url 'https://mvnrepository.com/artifact/com.madgag.spongycastle/pkix' }
maven { url 'https://mvnrepository.com/artifact/org.onepf/openiab' }
maven { url 'https://mvnrepository.com/artifact/com.drewnoakes/metadata-extractor' }
maven { url 'https://mvnrepository.com/artifact/org.apache.commons/commons-lang3' }
maven { url 'http://repo.jenkins-ci.org/releases' }
maven { url 'https://maven.google.com' } //Gradle 3.x tools need to be retrieved from here as well
flatDir {
        dirs '../aar'
}

2) В файле на уровне приложения build.gradle в блоке defaultConfig :

multiDexEnabled true

3) В файле уровня приложения build.gradle в блоке debug в блоке buildTypes :

debuggable true
minifyEnabled true
proguardFiles '../proguard_dexguard_configs/proguard-android.txt', '../proguard_dexguard_configs/proguard-project.txt'

4) В файле уровня приложения build.gradle в блоке release в блоке buildTypes :

minifyEnabled true
shrinkResources true
proguardFiles '../proguard_dexguard_configs/proguard-android.txt', '../proguard_dexguard_configs/proguard-project.txt'

5) В файле App-build.gradle в блоке зависимостей :

ext.androidx_annotation = '1.1.0'
ext.androidx_appcompat = '1.1.0'
ext.androidx_cardview = '1.0.0'
ext.androidx_core = '1.1.0'
ext.androidx_fragment = '1.1.0'
ext.androidx_gridlayout = '1.0.0'
ext.androidx_legacy = '1.0.0'
ext.androidx_media = '1.1.0'
ext.androidx_preference = '1.1.0'
ext.androidx_recyclerview = '1.0.0'

ext.qr_libs_version = "3.3.0" 
ext.lockpattern_version = "10.0.0" 
ext.jdom_version = "2.0.6" 
ext.jaxen_version = "1.1.6" 
ext.spongy_version = "1.54.0.0" 
ext.openiab_version = "0.9.8.7" 
ext.metadataextractor_version = "2.9.1" 
ext.jcifs_version = "1.3.18-kohsuke-1" 
ext.commonslang_version = "3.5" 
ext.aboutlibraries_libs_version = "6.2.3" 

dependencies {
    api 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    api 'androidx.multidex:multidex:2.0.1'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.appcompat:appcompat:1.0.2'
    api (name:'SIGNificant4AndroidSDK', ext:'aar')
    api "haibison.android:lockpattern:$lockpattern_version" 
    api "androidx.annotation:annotation:$androidx_annotation" 
    api "androidx.core:core:$androidx_core" 
    api "androidx.legacy:legacy-support-core-utils:$androidx_legacy" 
    api "androidx.legacy:legacy-support-core-ui:$androidx_legacy" 
    api "androidx.media:media:$androidx_media" 
    api "androidx.fragment:fragment:$androidx_fragment" 
    api "androidx.appcompat:appcompat:$androidx_appcompat" 
    api "androidx.gridlayout:gridlayout:$androidx_gridlayout" 
    api "androidx.preference:preference:$androidx_preference" 
    api "androidx.recyclerview:recyclerview:$androidx_recyclerview" 
    api "androidx.cardview:cardview:$androidx_cardview" 
    api (name:'Sources_Custom_Support_Library_v4', ext:'aar')
    api (name:'SIGNificant4AndroidSDK_JniBitmapOperationsLibrary', ext:'aar')
    api (name:'SIGNificant4AndroidSDK_QRCodeScanner', ext:'aar')
    api ("com.google.zxing:core:$qr_libs_version")
    api ("com.google.zxing:android-core:$qr_libs_version")
    api ("com.google.zxing:android-integration:$qr_libs_version")
    api ("org.jdom:jdom2:$jdom_version") {transitive = true;}
    api ("jaxen:jaxen:$jaxen_version") {transitive = true;}
    api ("com.madgag.spongycastle:pkix:$spongy_version") {transitive = true;}
    api ("org.onepf:openiab:$openiab_version")
    api ("com.drewnoakes:metadata-extractor:$metadataextractor_version") {transitive = true;}
    api ("org.samba.jcifs:jcifs:$jcifs_version") {transitive = true;}
    api("com.mikepenz:aboutlibraries:$aboutlibraries_libs_version") { transitive = true; }
    api ("org.apache.commons:commons-lang3:$commonslang_version")
}

6) В Androi dManifest. xml в разделе :

<activity
            android:name="com.xyzmo.ui.DocumentImage" 
            android:alwaysRetainTaskState="true" 
            android:label="@string/significant_app_name" 
            android:launchMode="singleTask" 
            android:windowSoftInputMode="adjustResize" />
        <activity
            android:name="com.xyzmo.ui.CaptureSignature" 
            android:label="@string/significant_app_name" 
            android:windowSoftInputMode="adjustResize" />
        <activity
            android:name="com.xyzmo.ui.AndroidExplorer" 
            android:label="@string/explorer" 
            android:windowSoftInputMode="adjustResize" />
        <activity
            android:name="com.xyzmo.ui.MainSettingsActivity" 
            android:label="@string/title_activity_main_settings" 
            android:logo="@mipmap/icon">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY" 
                android:value="com.xyzmo.ui.DocumentImage" />
        </activity>

        <activity
            android:name="com.xyzmo.ui.SIGNificantLockpatternActivity" 
            android:theme="@style/Significant.Lockpattern.Theme" 
            tools:replace="android:theme" 
            android:label="@string/xyzmo_lockpattern_titlebar" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY" 
                android:value="com.xyzmo.ui.DocumentImage" />
        </activity>

        <activity
            android:name="com.xyzmo.kiosk.ui.AdvertisementActivity" 
            android:theme="@android:style/Theme.Holo.Dialog"></activity>

        <activity
        android:name="com.xyzmo.ui.AboutActivity" 
        android:theme="@style/SIGNificant_AboutTheme"></activity>

После этого я внес другие небольшие изменения, найденные в Интернете, для устранения некоторых проблем, таких как: В Сборка верхнего уровня .gradle от:

minSdkVersion = 16
compileSdkVersion = 28

до:

minSdkVersion = 21
compileSdkVersion = 29

In Уровень приложения build.gradle под android block i addd:

compileOptions {
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

configurations {
  cleanedAnnotations
  compile.exclude group: 'org.jetbrains' , module:'annotations'
}

In MainApplication. java Я изменил свой класс с:

public class MainApplication extends Application implements ReactApplication

на:

public class MainApplication extends MultiDexApplication implements ReactApplication

и я добавил внутрь

@Override
protected void attachBaseContext(Context base) {
  super.attachBaseContext(base);
  MultiDex.install(getBaseContext());
}

В gradle.properties я добавил:

android.enableR8=false

Я надеюсь, что перечислил все, чтобы вы поняли, как я могу решить эту проблему?

...