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)
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.
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.
Full Android logcat logs: https://pastebin.com/vPs614jj
Flutter pubspec (name and description intentionally omitted):
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:
<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 output (XCode shouldn't matter):
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)
Hi @radi-cho
Please try solutions from this https://stackoverflow.com/questions/43435658/didnt-find-class-on-path-dexpathlist
Make sure you are using classpath 'com.android.tools.build:gradle:3.5.0'
and migrate to https://flutter.dev/docs/development/androidx-migration, if you have androix, run it again it would migrate if something is left to migrate
def multidex_version = "2.0.1"
implementation "androidx.multidex:multidex:$multidex_version"
This doens't seem to be related to Flutter itself, if the probem persist, it could be project files issue, create a new project with multidex from start and move your code
Thank you
waiting for customer response
The Flutter team cannot make further progress on this issue until the original reporter responds
labels
Jul 6, 2020
Thanks for the response :)
My findings as well suggest this is not 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.
Closing this as the issue is not consistently persistent and reproducible.
If I have additional findings or question will reopen when needed, so we are helpful to the whole Android/Flutter community :)
waiting for customer response
The Flutter team cannot make further progress on this issue until the original reporter responds
label
Jul 6, 2020
JoeCiou, geisterfurz007, shreyash-jain, KumarLakshmanan, TNelen, zanesc, Jesperpaulsen, Fethi-Hamdani, Mann05, varunmurthy, and 10 more reacted with thumbs up emoji
ranahyder87, Berkant35, gianmarcocalbi, and IAmBotmaker reacted with hooray emoji
gianmarcocalbi reacted with rocket emoji
All reactions