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

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

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(); } 

Чтобы начать другое действие, я использую параметр string для конструктора 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> ?  <?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> 

Это работает безупречно, пока я не переименую имя пакета. Я переименовываю имя пакета в манифесте с помощью рефакторинга, и среда 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. Есть идеи? Может ли это быть в Фильтре во 2-й деятельности в манифесте ?!

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

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

Это ошибка в Android Studio. Исправить это:

  1. Закрыть Студия.
  2. Удалить .idea / workspace.xml
  3. Студия запуска.

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

Запуск Activity – com.path1.pathOLD/com.path1.path2.SplashActivity.

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

EDIT: измененный файл манифеста,

 <?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> ? <?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> 

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

 1. Go to ~/.gradle/ and delete caches folder rm -r caches 2. "Sync project with Gradle files" icon on Android Studio 3. Run project 

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

В этом примере это означало бы изменение этого:

 <activity android:name=".SplashActivity" 

К этому:

 <activity android:name="com.path1.path2.SplashActivity" 

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

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

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

У меня также была эта проблема и, в частности, при переключении ароматов. Итак, для меня это решило отключить Instant Run в android. Я хотел бы включить некоторые важные моменты в этом вопросе –

  • Убедитесь, что ваш манифест в порядке.
  • Максимальное время очистки проекта и его восстановление решают проблему.
  • Отключите мгновенный запуск в студии Android версии 2.1.
  • Удалите приложение и переустановите его.