Cambiar nombre y error del paquete "La clase de actividad no existe"

Tengo una actividad de salpicaduras que inicia otra actividad como esta

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

Para iniciar otra actividad, utilizo el parámetro string para el constructor Intent . La clase correspondiente se empareja con la cadena splash como ésta

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

Esto funciona perfectamente hasta que renombre el nombre del paquete. Renombrar el nombre del paquete en el manifiesto mediante la refactorización y el IDE cambia el nombre de todas las demás clases en consecuencia. Pero cuando quiero iniciar el proyecto recién renombrado, me enfrento a un error

 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. 

Parece que la aplicación intenta iniciar la actividad de Splash utilizando la OLDpath/NEWpath.Splash y el error está allí, pero no puedo encontrar por qué está utilizando dicha ruta.

Yo uso IntelliJ IDE. ¿Algunas ideas? ¿Podría estar en el Filtro en la 2 ª actividad en el Manifiesto ?!

El error fue en IntelliJ IDEA después de todo. Al crear un proyecto, la Configuración comprueba la función Iniciar automáticamente e imprime el nombre de la clase predeterminada. Cuando cambia el nombre del paquete, la refactorización no cambia la cadena de configuración que sigue apuntando al nombre de clase antiguo. Ése es porqué no había error del tiempo de la compilación, pero error del tiempo de ejecución.

Sería genial si pudieran solucionar este problema en este IDE impresionante como este tipo de errores son muy difíciles de rastrear (esto tomó 4 meses para darse cuenta de dónde estaba el error).

Es un error en Android Studio. Arreglarlo:

  1. Cerrar Studio.
  2. Eliminar .idea / workspace.xml
  3. Lanzamiento Studio.

¿Notó esta diferencia (para el nombre del paquete en el manifiesto),

La Actividad de Lanzamiento es com.path1.pathOLD/com.path1.path2.SplashActivity.

Cambiar el paquete en el archivo de manifiesto .. utilice este manifiesto modificado y déjame saber lo que sucede ..

EDIT: archivo de manifiesto modificado,

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

En mi caso seguí todas las respuestas de aquí, pero también tuve que limpiar la caché. He seguido estos pasos:

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

He tenido el mismo mensaje de error en Eclipse / ADT (normalmente cuando dos personas están trabajando en el mismo proyecto usando IDEs diferentes) y lo arreglaron agregando el nombre del paquete al comienzo del nombre de la actividad (y todas las demás actividades, receptores , Servicios, etc.) en AndroidManifest.xml .

En este ejemplo, eso significaría cambiar esto:

 <activity android:name=".SplashActivity" 

A esto:

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

Tuve este problema y fue debido a un problema en el archivo de manifiesto. Asegúrese de que su archivo de manifiesto no tiene ningún problema.

Tenía el mismo problema. Después de probar todo en este hilo, resultó ser la ejecución instantánea de Android Studio.

Desactivar esto arregló el problema de inmediato, al igual que eliminar todo bajo .android / build-cache (de la compilación específica si puede encontrarlo). La razón es que la ejecución instantánea parece usar una versión en caché de la aplicación que ni siquiera se elimina durante una limpieza / reconstrucción regular.

También tuve este problema y específicamente al cambiar sabores. Así que lo que lo solucionó para mí es la desactivación de ejecución instantánea en android. Me gustaría incluir algunos puntos importantes con respecto a esto:

  • Asegúrese de que su manifiesto está bien.
  • El tiempo máximo de limpieza del proyecto y su reconstrucción resolverá el problema.
  • Inhabilite la ejecución instantánea en el estudio de Android 2.1.
  • Desinstale la aplicación y vuelva a instalarla.
  • ¿Cuántas etiquetas de esquema y host pueden estar bajo el intento de filtro en android manifiesto?
  • ¿Cuál es el propósito de "android.intent.category.DEFAULT"?
  • Manejo de URL específicas con filtros de intenciones en Xamarin Mono para Android
  • ¿Cómo registrar el intentfilter personalizado para transmitir el receptor en el archivo de manifiesto?
  • Cómo compartir imagen + texto juntos usando ACTION_SEND en android?
  • Android nfc intent-filter para mostrar mi aplicación cuando nfc descubre una etiqueta
  • IntentFilter en NFC - Xamarin - C #
  • Android Intent lanzamiento desde el navegador
  • ¿Cómo puedo iniciar la actividad PRINCIPAL con la ayuda de <intento-filtro>?
  • El receptor de Broadcast de Android no se ejecuta en la aplicación
  • BroadcastReceiver intentando devolver el resultado durante una transmisión no ordenada - PACKAGE_ADDED en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.