ActivityNotFoundException: невозможно найти явный класс активности

Я задавал много подобных вопросов на SO, но ни один из них не предложил решение, которое мне помогло. Стоит отметить, что это произошло внезапно во время отладки, сразу после того, как мне удалось запустить эту активность (в том же сеансе отладки). Я ничего существенного не менял, поэтому понятия не имею, как у меня возникла эта проблема.

Я получаю сообщение об ошибке, когда пытаюсь начать новое действие:

Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);

Сообщение об ошибке:

android.content.ActivityNotFoundException: невозможно найти явный класс активности {com.xxx/com.xxx.MainActivity}; Вы объявили эту активность в своем AndroidManifest.xml?

Оба действия объявлены в одном пакете com.xxx. Манифест (удален ненужный код):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.xxx">

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

    <application
        android:name="misc.App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:icon">
        <activity
            android:name=".SplashActivity"
            android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:label=""
            android:theme="@style/Theme.AppCompat.NoActionBar" />
    </application>
</manifest>

Я пробовал такие вещи, как указание явного пути как в манифесте, так и при создании Intent, но это не помогло, как и очистка проекта.

Есть идеи? Спасибо!

EDIT: Вот часть деятельности в структуре проекта:

Изображение


person Neria Nachum    schedule 20.12.2016    source источник
comment
Что касается вашего кода, все выглядит правильно, включен ли Instant Run в вашей Android Studio developer.android.com/studio/run/index.html#instant-run? У меня были проблемы, которые трудно объяснить, вызванные Instant Run. Я бы отключил его и выполнил чистую сборку, чтобы посмотреть, решит ли это проблему.   -  person Bobbake4    schedule 20.12.2016
comment
у вас есть другая библиотека, импортированная в ваш проект, которая имеет свой собственный файл манифеста?   -  person Amit Upadhyay    schedule 20.12.2016
comment
@ Bobbake4 Изначально он был отключен. Я действительно пытался включить его, а затем снова отключить, но безрезультатно.   -  person Neria Nachum    schedule 20.12.2016
comment
Можете ли вы добавить скриншот того, как ваша структура папок выглядит в студии Android под Android View... обязательно покажите MainActivity... также не должно ли это быть .misc.App вместо misc.App?   -  person Bmbariah    schedule 20.12.2016
comment
@AmitUpadhyay Да, но ни один из них не был добавлен в последнее время.   -  person Neria Nachum    schedule 20.12.2016
comment
@Bmbariah Добавлено. И нет, приложение работает как положено.   -  person Neria Nachum    schedule 20.12.2016


Ответы (1)


Я создал чистую копию MainActivity, продублировал xml и заменил все ссылки на старую активность, и она работает. Объявление в манифесте также идентично.

Я понятия не имею, почему возникла эта проблема, но глубокая проверка определенно не стоит того, поэтому этот обходной путь является наименее трудоемким решением.

EDIT: я снова столкнулся с этой проблемой и обнаружил настоящую проблему. Был фрагмент кода, который отключает вышеупомянутую активность, которая затем выдает ActivityNotFoundException, даже когда приложение закрывается и снова открывается. Я думаю, что очистка кеша также выявила бы ситуацию.

Во всяком случае, я добавил временный код в вызывающую активность, чтобы включить MainActivity, и это сработало:

PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, MainActivity.class),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Я, очевидно, удалил код отключения, который не имеет значения.

person Neria Nachum    schedule 21.12.2016