繁体   English   中英

React Native 0.60-无法运行带有react-native run-android的应用程序:java.lang.NoClassDefFoundError

[英]React Native 0.60 - Unable to Run App with react-native run-android: java.lang.NoClassDefFoundError

在一个漫长的周末之前的周五晚,我在运行react-native应用程序时遇到了问题。 当前版本是0.60 (最新),并运行命令

react-native run-android

生成一个debug版本,该debug版本已成功安装在我连接的应用程序上,但在打开时崩溃并显示以下错误:

致命异常:主要
流程:com.myApp,PID:XXXX
java.lang.NoClassDefFoundError:无法解决以下问题:
Lcom / google / android / gms / common / internal / zzbq

仔细检查此隐秘错误会导致许多结果,表明MultiDex是罪魁祸首,以及如何处理此问题。 为了研究的缘故,我将链接一些线程:

Android 3.1.1-无法解决以下问题:Lcom / google / android / gms / common / internal / zzbq;

在路径:DexPathList上找不到类“ com.google.android.gms.common.internal.zzbq”
(链接到以前的结果)

解决方案之一,即如果名称包含12.0.1版的multidex ,则覆盖com.google.android.gms use version 可用于debug版本

android/build.gradle

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.google.android.gms'
            && !details.requested.name.contains('multidex') ) {
                details.useVersion "12.0.1"
            }
        }
    }
}

但是,这会导致production版本完全不同的问题:

找不到com.google.android.gms:play-services-vision-image-label:12.0.1。
找不到com.google.android.gms:play-services-clearcut:12.0.1
找不到com.google.android.gms:play-services-表型:12.0.1
找不到com.google.android.gms:play-services-stats:12.0.1

所有这些都说“ XXX:17.0.1必需”,所以我尝试了details.useVersion "17.0.1" ,但是导致了类似的问题:

找不到com.google.android.gms:play-services-location:17.0.1
找不到com.google.android.gms:play-services-base:17.0.1
找不到com.google.android.gms:play-services-basement:17.0.1
找不到com.google.android.gms:play-services-tasks:17.0.1

其中一些模块的版本为17.0.1 ,而其他模块的版本为17.0.217.0.0 ,因此严格use version XYZ不适用于release版本。

如果我删除此subProjects { ... }声明并尝试按照其他答案中的建议启用MultiDex

android/app/build.gradle

android {
    defaultConfig {
        ...
        multiDexEnabled true
    }
}
dependencies {
    ...
    implementation 'com.android.support:multidex:1.0.3'
}

这导致了同样的错误两种debugrelease版本,以及额外的谷歌搜索一点点揭露说MultiDex不需要SDK版本> 27.0.0 (看起来是使用28.0.0 / 28.0.3

我整天都在为此烦恼,没有取得任何进展。 有人看到过与React Native 0.60相关的问题吗?

注意:在我的项目中,有几个使用这些com.google.android.gms插件,即:

  • react-native-background-geolocation
    • implementation "com.google.android.gms:play-services-location:$playServicesLocationVersion"
  • react-native-camera
    • generalImplementation "com.google.android.gms:play-services-vision:$googlePlayServicesVisionVersion"
  • react-native-device-info
    • implementation "com.google.android.gms:play-services-gcm:${safeExtGet('googlePlayServicesVersion', '16.1.0')}"

解决方案是对Android .aab.apk文件使用新的包/构建过程,如React Native文档所示。 当前引发错误的过程如下:

cd android
./gradlew clean
cd ..
bundleAPK (`react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/`)
buildReleaseAPK (`cd ./android && ./gradlew assembleRelease && cd ..`
installReleaseAPKAlt (`adb install -r ./android/app/build/outputs/apk/release/app-release.apk`)

成功后,它将生成.apk文件并将其安装在设备上,类似于直接从Play商店下载/安装。 如上所述,构建过程中的各种错误阻止了这种情况。

React Native文档建议使用一组不同的命令来生成.aab文件,然后从该文件中生成.apk

cd android
./gradlew clean
./gradlew bundleRelease
cd .. && react-native run-android --variant=release

完整的详细信息可以在https://facebook.github.io/react-native/docs/signed-apk-android#generating-the-release-apk中找到。 自先前实施以来,已包含有关生成Signed APK的信息。

使用这种方法,可以生成.aab.apk文件并将其安装在设备上,但是由于缺少ic_launcher_rounded出现了另一个问题。 有关详细信息,请参见Release Bundle / Build缺少React Native 0.60-ic_launcher_round 允许时将问题标记为已关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM