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
- Android IntentService no puede instanciar clase; Sin constructor vacío
- Android BroadcastReceiver sin filtros intencionales
- Android PhoneGap intento de filtro, el navegador de volver a ejecutar la aplicación?
- Android Lanzamiento o presentación de otra aplicación a través de Intent
- Pestañas personalizadas de Chrome y filtro de intenciones
<?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 ?!
- ¿Cómo comprobar si una intención puede ser manejada de alguna actividad?
- Permiso de dispositivo USB y filtro de intenciones Android
- No se puede recibir la intención de difusión de UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED
- Intento de archivo de exploración android con extensión definida
- Redireccionamiento de HTML a un protocolo personalizado solo cuando se admite la aplicación de Android compatible
- Cómo corregir Advertencia de pelusa de SMS BroadcastReceiver sin protección
- ¿Es posible iniciar una aplicación cuando se escanea una etiqueta NFC?
- Filtro de intenciones para exploradores de archivos comunes
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:
- Cerrar Studio.
- Eliminar .idea / workspace.xml
- 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.
- Adición de mapa de bits de marca de agua en video en android: MediaMuxer de 4.3 o ffmpeg
- Cómo obtener un selector de elementos ListView android para usar state_checked