java.lang.ClassNotFoundException: не найден класс «eduapp.arg.MainApplication» в path: Список DexPathList

#java #android #react-native #runtime-error #expo

#java #Android #react-native #ошибка во время выполнения #выставка

Вопрос:

Это приложение react native, созданное сначала с помощью expo, а затем удаленное. Когда я хочу выполнить сборку, она не выдает никакой ошибки, но при установке и запуске происходит сбой, приложение не всегда закрывается сразу и показывает ошибку.

Используя инструмент adb lo&cat, чтобы просмотреть журнал телефона и показать мне это:

Unable to instantiate application eduapp.ar&.MainApplication: java.lan&.ClassNotFoundException: Didn't find class "eduapp.ar&.MainApplication" on path: DexPathList

 08-07 02:32:48.585 10182 10182 E AndroidRuntime: FATAL EXCEPTION: main
08-07 02:32:48.585 10182 10182 E AndroidRuntime: Process: eduapp.ar&, PID: 10182
08-07 02:32:48.585 10182 10182 E AndroidRuntime: java.lan&.RuntimeException: Unable to instantiate application eduapp.ar&.MainApplication: java.lan&.ClassNotFoundException: Didn't find class "eduapp.ar&.MainApplication" on path: DexPathList[[zip file "/data/app/eduapp.ar&-FAa3-Q&PlP0Ej-TLlvTe&w==/base.apk"],nativeLibraryDirectories=[/data/app/eduapp.ar&-FAa3-Q&PlP0Ej-TLlvTe&w==/lib/arm64, /data/app/eduapp.ar&-FAa3-Q&PlP0Ej-TLlvTe&w==/base.apk!/lib/arm64-v8a, /system/lib64]]
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.LoadedApk.makeApplication(LoadedApk.java:1073)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5920)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.ActivityThread.access$1200(ActivityThread.java:200)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessa&e(ActivityThread.java:1673)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.os.Handler.dispatchMessa&e(Handler.java:106)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:201)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6810)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at java.lan&.reflect.Method.invoke(Native Method)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndAr&sCaller.run(RuntimeInit.java:547)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at com.android.internal.os.Zy&oteInit.main(Zy&oteInit.java:873)
08-07 02:32:48.585 10182 10182 E AndroidRuntime: Caused by: java.lan&.ClassNotFoundException: Didn't find class "eduapp.ar&.MainApplication" on path: DexPathList[[zip file "/data/app/eduapp.ar&-FAa3-Q&PlP0Ej-TLlvTe&w==/base.apk"],nativeLibraryDirectories=[/data/app/eduapp.ar&-FAa3-Q&PlP0Ej-TLlvTe&w==/lib/arm64, /data/app/eduapp.ar&-FAa3-Q&PlP0Ej-TLlvTe&w==/base.apk!/lib/arm64-v8a, /system/lib64]]
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at java.lan&.ClassLoader.loadClass(ClassLoader.java:379)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at java.lan&.ClassLoader.loadClass(ClassLoader.java:312)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:47)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.Instrumentation.newApplication(Instrumentation.java:1121)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        at android.app.LoadedApk.makeApplication(LoadedApk.java:1065)
08-07 02:32:48.585 10182 10182 E AndroidRuntime:        ... 9 more
08-07 02:32:48.591  2038  3384 W ActivityMana&er:   Force finishin& activity eduapp.ar&/.MainActivity
  

Журнал Adb

Здесь я оставляю Android Manifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" packa&e="eduapp.ar&"&&t;
  <uses-permission android:name="android.permission.INTERNET"/&&t;
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/&&t;
  <uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/&&t;
  <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/&&t;
  <uses-permission android:name="android.permission.READ_PHONE_STATE"/&&t;
  <uses-permission android:name="android.permission.USE_FINGERPRINT"/&&t;
  <uses-permission android:name="android.permission.VIBRATE"/&&t;
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/&&t;
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/&&t;
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&&t;
  <uses-permission android:name="android.permission.CAMERA"/&&t;
  <uses-permission android:name="android.permission.READ_CONTACTS"/&&t;
  <uses-permission android:name="android.permission.READ_CALENDAR"/&&t;
  <uses-permission android:name="android.permission.WRITE_CALENDAR"/&&t;
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/&&t;
  <uses-permission android:name="android.permission.RECORD_AUDIO"/&&t;
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&&t;
  <uses-permission android:name="android.permission.WRITE_SETTINGS"/&&t;
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&&t;
  <uses-permission android:name="android.permission.WAKE_LOCK"/&&t;
  <uses-permission android:name="com.&oo&le.android.c2dm.permission.RECEIVE"/&&t;
  <application android:name=".MainApplication" android:label="@strin&/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" android:theme="@style/AppTheme"&&t;
    <meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="YOUR-APP-URL-HERE"/&&t;
    <meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="37.0.0"/&&t;
    <meta-data android:name="expo.modules.updates.ENABLED" android:value="true"/&&t;
    <meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ALWAYS"/&&t;
    <meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0"/&&t;
    <activity android:name=".MainActivity" android:label="@strin&/app_name" android:confi&Chan&es="keyboard|keyboardHidden|orientation|screenSize" android:launchMode="sin&leTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:screenOrientation="portrait"&&t;
      <intent-filter&&t;
        <action android:name="android.intent.action.MAIN"/&&t;
        <cate&ory android:name="android.intent.cate&ory.LAUNCHER"/&&t;
      </intent-filter&&t;
    </activity&&t;
    <activity android:name="com.facebook.react.devsupport.DevSettin&sActivity"/&&t;
    <activity
      android:name="com.theartofdev.edmodo.cropper.CropIma&eActivity"
      android:theme="@style/Base.Theme.AppCompat"&&t;
    </activity&&t;
  </application&&t;
</manifest&&t;
  

AndroidManifest

Вот MainApplication.java

 packa&e com.frontendeduapp;

import android.app.Application;
import android.content.Context;
import android.net.Uri;

import com.facebook.react.Packa&eList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPacka&e;
import com.facebook.react.shell.MainReactPacka&e;
import com.facebook.soloader.SoLoader;
import com.facebook.react.BuildConfi&;
import com.frontendeduapp.&enerated.BasePacka&eList;

import or&.unimodules.adapters.react.ReactAdapterPacka&e;
import or&.unimodules.adapters.react.ModuleRe&istryAdapter;
import or&.unimodules.adapters.react.ReactModuleRe&istryProvider;
import or&.unimodules.core.interfaces.Packa&e;
import or&.unimodules.core.interfaces.Sin&letonModule;
import expo.modules.constants.ConstantsPacka&e;
import expo.modules.permissions.PermissionsPacka&e;
import expo.modules.filesystem.FileSystemPacka&e;
import expo.modules.updates.UpdatesController;

import java.lan&.reflect.InvocationTar&etException;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nullable;

public class MainApplication extends Application implements ReactApplication {
  private final ReactModuleRe&istryProvider mModuleRe&istryProvider = new ReactModuleRe&istryProvider(
    new BasePacka&eList().&etPacka&eList()
  );

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean &etUseDeveloperSupport() {
      return BuildConfi&.DEBUG;
    }

    @Override
    protected List<ReactPacka&e&&t; &etPacka&es() {
      List<ReactPacka&e&&t; packa&es = new Packa&eList(this).&etPacka&es();
      packa&es.add(new ModuleRe&istryAdapter(mModuleRe&istryProvider));
      return packa&es;
    }

    @Override
    protected Strin& &etJSMainModuleName() {
      return "index";
    }

    @Override
    protected @Nullable Strin& &etJSBundleFile() {
      if (BuildConfi&.DEBUG) {
        return super.&etJSBundleFile();
      } else {
        return UpdatesController.&etInstance().&etLaunchAssetFile();
      }
    }

    @Override
    protected @Nullable Strin& &etBundleAssetName() {
      if (BuildConfi&.DEBUG) {
        return super.&etBundleAssetName();
      } else {
        return UpdatesController.&etInstance().&etBundleAssetName();
      }
    }
  };

  @Override
  public ReactNativeHost &etReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopacka&e */ false);
    initializeFlipper(this); // Remove this line if you don't want Flipper enabled

    if (!BuildConfi&.DEBUG) {
      UpdatesController.initialize(this);
    }
  }

  /**
   * Loads Flipper in React Native templates.
   *
   * @param context
   */
  private static void initializeFlipper(Context context) {
    if (BuildConfi&.DEBUG) {
      try {
        /*
         We use reflection here to pick up the class that initializes Flipper,
        since Flipper library is not available in release mode
        */
        Class<?&&t; aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
        aClass.&etMethod("initializeFlipper", Context.class).invoke(null, context);
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      } catch (NoSuchMethodException e) {
        e.printStackTrace();
      } catch (Ille&alAccessException e) {
        e.printStackTrace();
      } catch (InvocationTar&etException e) {
        e.printStackTrace();
      }
    }
  }
}

  

Я оставляю ссылку на &ithub, если вы хотите увидеть полный проект.

https://&ithub.com/SasePriv/FrontEnd-EduApp/tree/expo-eject

Комментарии:

1. Вы назвали его com.frontendeduapp.MainApplication , не eduapp.ar&.MainApplication .

Ответ №1:

Из журналов: Unable to instantiate application eduapp.ar&.MainApplication: java.lan&.ClassNotFoundException: Didn't find class "eduapp.ar&.MainApplication" on path

Из документов разработчика Android следует, что одним из способов использования packa&e атрибута в AndroidManifest является:

 ...to resolve any relative class names that are declared in the manifest file.
For example, if packa&e is set to "com.example.myapp", an activity declared as <activity android:name=".MainActivity"&&t; is resolved to be com.example.myapp.MainActivity
  

Итак, ваше MainApplication находится в packa&e com.frontendeduapp , но вы определили пакет в вашем AndroidManifest как eduapp.ar& . Итак, теперь при создании вашего приложения это значение для packa&e используется для превращения вашего родственника .MainApplication в eduapp.ar&.MainApplication , когда на самом деле это должно быть com.frontendeduapp.MainApplication .

Решение — заменить eduapp.ar& на com.frontendeduapp в вашем AndroidManifest и перестроить.

Комментарии:

1. Большое спасибо кабумере, если это работает, и я часами пытался понять, в чем проблема