Палец вверх 22
Перевод
Перевод

Переименование пакета и ошибка «Класс активности не существует»

У меня есть всплеск активности, которая запускает другой вид деятельности

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        final Thread splashThread = new Thread() {
            @Override
            public void run() {
                try {
                    int wait = 0;
                    while (_isActive && (_splashTime > wait)) { 
                        sleep(100);

                        if (_isActive) {
                            wait += 100;
                        }
                    }
                } catch (InterruptedException e) {
                    Log.d(TAG, e.getMessage());

                } finally {
                    startActivity(new Intent("com.path1.path2.SomeActivity"));
                    finish();
                }
            }
        };
        splashThread.start();
    }

Чтобы начать другое занятие, я использую строковый параметр для конструктора Intent . Соответствующий класс связан со строкой-заставкой, как это

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.path1.path2"
          android:versionCode="2"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4"/>

    <!--permissions-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <application android:label="@string/app_name" android:icon="@drawable/icon">
        <activity android:name=".SplashActivity"
                  android:label="@string/app_name"
                >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".SomeActivity"
                  android:label="@string/app_name"
                >
            <intent-filter>
                <action android:name="com.path1.path2.SomeActivity"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity android:name=".OtherActivity" android:label="@string/app_name"
                />

        <!--services-->
        <service android:name=".AlarmService"/>

    </application>
</manifest>

Это работает безупречно, пока я не переименую имя пакета. Я переименовываю имя пакета в Manifest с помощью рефакторинга, и IDE соответственно переименовывает все остальные классы. Но когда я хочу начать заново переименованный проект, я сталкиваюсь с ошибкой

Launching application: com.path1.pathOLD/com.path1.path2.SplashActivity.
DEVICE SHELL COMMAND: am start -n "com.path1.pathOLD/com.path1.path2.SplashActivity"
Starting: Intent { cmp=com.path1.pathOLD/com.path1.path2.SplashActivity }
Error type 3
Error: Activity class {com.path1.pathOLD/com.path1.path2.SplashActivity} does not exist.

Кажется, что приложение пытается запустить действие Splash, используя OLDpath/NEWpath.Splash и ошибка есть, но я не могу найти, почему оно использует такой путь.

Я использую IntelliJ IDE. Есть идеи? Может ли это быть в фильтре во втором упражнении в манифесте ?!

android intellij-idea android-intent intentfilter
задан sandalone 18 нояб. 2011 г., 13:20:44
источник

10 ответов

Палец вверх 33
Перевод
Перевод

Это ошибка в Android Studio. Починить это:

  1. Закрыть студию.
  2. Удалить .idea / workspace.xml
  3. Запустить студию.
ответ дан sasha_trn 5 окт. 2014 г., 18:58:46
источник
Решение 30
Перевод
Перевод

В конце концов, ошибка была в IntelliJ IDEA. Когда вы создаете проект, Конфигурация автоматически проверяет функцию запуска и печатает имя класса по умолчанию. Когда вы изменяете имя пакета, рефакторинг не изменяет строку конфигурации, которая все еще указывает на старое имя класса. Вот почему произошла не ошибка времени компиляции, а ошибка времени выполнения.

Было бы замечательно, если бы они могли исправить эту проблему в этой замечательной IDE, так как ошибки такого рода очень трудно отследить (на это ушло 4 месяца, чтобы понять, где была ошибка).

ответ дан sandalone 21 нояб. 2011 г., 12:30:29
источник
Палец вверх 4
Перевод
Перевод

Вы заметили эту разницу (для имени пакета в манифесте),

Активность запуска: com.path1.pathOLD/com.path1.path2.SplashActivity.

Измените пакет в файле манифеста .. используйте этот модифицированный манифест и дайте мне знать, что произойдет ..

РЕДАКТИРОВАТЬ: модифицированный файл манифеста,

<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.path1.path2"
      android:versionCode="2"
      android:versionName="1.0">
<uses-sdk android:minSdkVersion="4"/>

<!--permissions-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<application android:label="@string/app_name" android:icon="@drawable/icon">
    <activity android:name=".SplashActivity"
              android:label="@string/app_name"
            >
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity android:name=".SomeActivity"
              android:label="@string/app_name"
            >
        <intent-filter>
           <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    <activity android:name=".OtherActivity" android:label="@string/app_name"
            />

    <!--services-->
    <service android:name=".AlarmService"/>

</application>

ответ дан user370305 18 нояб. 2011 г., 13:24:22
источник
Палец вверх 3
Перевод
Перевод

В моем случае я следил за всеми ответами отсюда, но также я должен был очистить кеш. Я следовал за этими шагами:

1. Go to ~/.gradle/ and delete caches folder
   rm -r caches
2. "Sync project with Gradle files" icon on Android Studio
3.  Run project
ответ дан Jorge Casariego 16 авг. 2015 г., 2:57:18
источник
Палец вверх 0
Перевод
Перевод

У меня было одно и то же сообщение об ошибке в Eclipse / ADT (обычно, когда два человека работают над одним проектом с использованием разных IDE), и я исправил его, добавив имя пакета в начало имени действия (и всех других действий, получателей). Услуги и т. Д.) В AndroidManifest.xml .

В этом примере это будет означать изменение этого:

<activity android:name=".SplashActivity"

К этому:

<activity android:name="com.path1.path2.SplashActivity"
ответ дан Josh 14 июл. 2014 г., 21:50:09
источник
Палец вверх 0
Перевод
Перевод

У меня была эта проблема, и это было из-за проблемы в файле манифеста. Убедитесь, что у вашего файла манифеста нет проблем.

ответ дан Hesam 22 июл. 2014 г., 13:39:56
источник
Палец вверх 0
Перевод
Перевод

Была такая же проблема. Попробовав все в этой теме, он оказался мгновенным запуском Android Studio.

Отключение этого исправило проблему сразу же, как и удаление всего в .android / build-cache (конкретной сборки, если вы можете ее найти). Причина заключается в том, что для мгновенного запуска используется кэшированная версия приложения, которая даже не удаляется во время обычной очистки / восстановления.

ответ дан tom808 27 янв. 2017 г., 17:32:42
источник
Палец вверх 0
Перевод
Перевод

У меня тоже была эта проблема и конкретно при переключении вкусов. Так что для меня это решило отключение Instant Run в Android. Я хотел бы включить несколько важных моментов, касающихся этого

  • Убедитесь, что ваш манифест в порядке.
  • Максимальное время очистки проекта и его восстановления решит проблему.
  • Отключить мгновенный запуск в андроид студии выше 2.1.
  • Удалите приложение и переустановите его.
ответ дан Arpan Sharma 15 мар. 2017 г., 12:47:15
источник
Палец вверх 0
Перевод
Перевод

Убедитесь, что ваше имя пакета в Gradle, Manifest. Зайдите в Настройки модуля -> Ароматы -> Идентификатор приложения -> (название вашего пакета)

ответ дан Cloy 28 авг. 2017 г., 8:44:41
источник
Палец вверх 0
Перевод
Перевод

File -> Invalidate caches/Restart может исправить этот тип ошибок

ответ дан ArjunA 14 дек. 2018 г., 5:44:09
источник