#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
Здесь я оставляю 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;
Вот 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, если вы хотите увидеть полный проект.
Комментарии:
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. Большое спасибо кабумере, если это работает, и я часами пытался понять, в чем проблема