Flutter在启动时崩溃:在路径DexPathList上找不到类.MainActivity [英] Flutter crashes on startup: Didn't find class .MainActivity on path DexPathList

查看:131
本文介绍了Flutter在启动时崩溃:在路径DexPathList上找不到类.MainActivity的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Flutter上启用了Android的MultiDex构建器,遇到了一个非常棘手的问题.我的应用程序正常运行,但是添加 video_player 程序包后,它在启动时便崩溃了:

I'm using Flutter with the MultiDex builder enabled for Android and encountered a pretty tricky issue. My app was running without any exceptions but when the video_player package was added it just crashed on startup:

FATAL EXCEPTION: main
Process: com.rsg.anygoal, PID: 5883
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.rsg.anygoal/com.rsg.anygoal.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.rsg.anygoal.MainActivity" on path: DexPathList[[zip file "/data/app/com.rsg.anygoal-tCKWlQXJD-iwdHtVRl0qqA==/base.apk"],nativeLibraryDirectories=[/data/app/com.rsg.anygoal-tCKWlQXJD-iwdHtVRl0qqA==/lib/x86, /data/app/com.rsg.anygoal-tCKWlQXJD-iwdHtVRl0qqA==/base.apk!/lib/x86, /system/lib, /vendor/lib]]
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2679)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.rsg.anygoal.MainActivity" on path: DexPathList[[zip file "/data/app/com.rsg.anygoal-tCKWlQXJD-iwdHtVRl0qqA==/base.apk"],nativeLibraryDirectories=[/data/app/com.rsg.anygoal-tCKWlQXJD-iwdHtVRl0qqA==/lib/x86, /data/app/com.rsg.anygoal-tCKWlQXJD-iwdHtVRl0qqA==/base.apk!/lib/x86, /system/lib, /vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1174)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

后来在调查此问题时,我尝试禁用MultiDex并似乎解决了该问题,但是随后添加了其他Flutter程序包又再次破坏了该应用程序,因此我确定它不是严格由multiDex引起的,并重新启用了它.

Later while investigating the issue I tried to disable MultiDex and that seemingly fixed it, but then adding additional flutter package broke the app again, so I decided it's not strictly caused by multiDex and re-enabled it.

我在论坛中发现的另一种修复尝试是将.MainActivity" 重命名为确切的类路径"com.* ... *.MainActivity" ,但是那也没有帮助.

Another fix attempt I found in forums was to rename ".MainActivity" to the exact class path "com.*...*.MainActivity" but that did not help either.

希望有人会建议对此进行修复!留下了我在调查期间收集的更多日志和代码段,其中可能包括一些对您有用的线索.

Hopefully someone will suggest a possible fix to this! Leaving a few more logs and code snippets I collected during my investigation, which may include clues helpful to you.

完整的Android logcat日志: https://pastebin.com/vPs614jj

Flutter pubspec(故意省略名称和描述):

version: 1.0.6+16
environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2
  intl: ^0.15.8
  firebase_core: ^0.4.3+1
  firebase_admob: ^0.9.0+10
  firebase_analytics: ^5.0.9
  firebase_auth: ^0.15.3
  firebase_crashlytics: ^0.1.2+4
  firebase_performance: ^0.3.1+5
  firebase_remote_config: ^0.3.0+1
  firebase_messaging: ^6.0.9
  firebase_dynamic_links: ^0.5.0+9
  cloud_firestore: ^0.13.0+1
  cloud_functions: ^0.4.1+6
  google_sign_in: ^4.1.1
  provider: ^4.0.1
  data_connection_checker: ^0.3.4
  shared_preferences: ^0.5.6
  flutter_markdown: ^0.3.2
  url_launcher: ^5.4.1
  barcode_scan: ^1.0.0
  qr_flutter: ^3.2.0
  share: ^0.6.3+5
  video_player: ^0.10.11+2

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  fonts:
    - family: Raleway
      fonts:
        - asset: fonts/Raleway-Regular.ttf
  uses-material-design: true

Android清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="$APP_DOMAIN">
    <application android:name="io.flutter.app.FlutterApplication" android:label="$APP_NAME" android:icon="@mipmap/ic_launcher">
        <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
            <meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="FLUTTER_NOTIFICATION_CLICK" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="$APP_ADS_ID"/>
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/notification_icon" />
    </application>

    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

MainActivity.java:

import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);
  }
}

Flutter Doctor输出(XCode无关紧要):

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.17.5, on Mac OS X 10.15.4 19E287, locale en-BG)
 
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[!] Xcode - develop for iOS and macOS
    ✗ Xcode installation is incomplete; a full installation is necessary for iOS development.
      Download at: https://developer.apple.com/xcode/download/
      Or install Xcode via the App Store.
      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
        sudo xcodebuild -runFirstLaunch
[✓] Android Studio (version 3.5)
[✓] VS Code (version 1.46.1)
[✓] Connected device (1 available)

推荐答案

我的发现表明,这不是Flutter本身的问题,而是在特定的Flutter软件包安装之后发生的.升级Gradle和AndroidX库之后,崩溃消失了,然后在添加了Flutter软件包之后又重新出现了.然后我再次清理了android项目中的( build-> clean ) android项目,并再次对其进行了修复.因此,这可能是由于我的环境中存在某些Gradle混乱而造成的,并且可能只是它不时以正确的方式来编译某些类.

My findings suggest this is not an issue with Flutter itself, but occurs after particular Flutter package installations. After upgrading Gradle and the AndroidX libraries, the crash disappeared and then re-appeared after another Flutter package addition. Then I cleaned (build->clean in the IDE) the android project again and it was fixed once again. So it may be due to some Gradle confusions in my environment and probably it just doesn't compile some classes the right way from time to time.

这篇关于Flutter在启动时崩溃:在路径DexPathList上找不到类.MainActivity的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆