Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

462
Views
Error de Android Studio: "Falló la fusión del manifiesto: aplicaciones dirigidas a Android 12"

He actualizado la versión de mi emulador y la versión SDK de Android a Android S ( Android 12 ). Después de la actualización, no puedo ejecutar el proyecto. No puedo ejecutar un Hello, World! project (proyecto vacío), pero también puedo compilar Gradle, pero no puedo ejecutar el proyecto. Siempre recibí el error:

Fusión de manifiesto fallida: las aplicaciones destinadas a Android 12 y versiones posteriores deben especificar un valor explícito para android: exported cuando el componente correspondiente tiene un filtro de intenciones definido. Consulte https://developer.android.com/guide/topics/manifest/activity-element#exported para obtener más detalles.

¿Cómo puedo arreglarlo?

Aquí hay una captura de pantalla:

Esta es una captura de pantalla.

¿Cómo puedo resolver este problema cuando uso el SDK de Android 12?

Esta pregunta es sobre el problema después de aplicar la solución a esto, y es diferente a esta pregunta. Además, esta pregunta es más antigua que esta .

over 4 years ago · Santiago Trujillo
11 answers
Answer question

0

También tuve que agregar android:exported="true" a todos mis receiver declarados en el manifiesto. Así que tuve algo como esto:

 <receiver android:name=".alarms.AlarmReScheduler" android:exported="true"> <intent-filter> <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <action android:name="android.intent.action.PACKAGE_REPLACED" /> <!-- For HTC devices --> <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" /> </intent-filter> </receiver>

No creo que debas agregar android:exported="true" a todo. Solo debe agregar eso cuando esos receptores de transmisión deban ser visibles para el sistema operativo Android. Los filtros de intención en ese código significan que quería que el sistema operativo Android activara mi aplicación de Android y realizara una operación.

android.intent.action.BOOT_COMPLETED es un muy buen ejemplo porque el sistema operativo Android envía transmisiones a todas las aplicaciones instaladas en el dispositivo. Entonces, técnicamente, significaría que cualquier receptor de transmisión que tenga un filtro de intenciones con acciones siempre debe declarar android:exported="true" .

over 4 years ago · Santiago Trujillo Report

0

Es posible que su pregunta se haya marcado como duplicada debido a esta publicación: la fusión de manifiesto falló al apuntar a Android 12 , aunque la suya se publicó una semana antes. Ahora no veo la bandera.

Para aclarar otra respuesta , tenga en cuenta que android:exported debe establecerse como verdadero para su actividad principal, o no se iniciará a pesar de un mensaje alentador de "Lanzamiento exitoso" de Android Studio ya que ninguna otra aplicación, o incluso el propio sistema Android, puede iniciar eso.

 <activity android:name=".MainActivity" android:exported="true"

Para otras actividades con intenciones enterradas en sus manifiestos combinados, esto normalmente se establecería en falso.

over 4 years ago · Santiago Trujillo Report

0

En su manifiesto, agregue android:exported="true" o android:exported="false" en su atributo de actividad de inicio predeterminado.

¡Hecho! Está bien para ejecutar sus aplicaciones en Android 12 .

 <manifest ... > <activity android:name=".ui.dashboard.DashboardActivity" android:screenOrientation="portrait" android:exported="true" android:theme="@style/AppTheme.Launcher"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </manifest>

Establezca el valor exportado de Android de acuerdo con sus requisitos.

Si el receptor de difusión puede recibir mensajes de fuentes ajenas al sistema fuera de su aplicación: "verdadero" si puede y "falso" si no. Si es "falso", los únicos mensajes que puede recibir el receptor de transmisión son los enviados por el sistema, los componentes de la misma aplicación o las aplicaciones con la misma ID de usuario.

Si no se especifica, el valor predeterminado depende de si el receptor de transmisión contiene filtros de intención. Si el receptor contiene al menos un filtro de intenciones, el valor predeterminado es "verdadero". De lo contrario, el valor predeterminado es "falso".

Este atributo no es la única forma de limitar la exposición externa de un receptor de transmisión. También puede usar el permiso para limitar las entidades externas que pueden enviar mensajes (consulte el atributo de permiso).

De la documentación de Android

over 4 years ago · Santiago Trujillo Report

0

Me encontré con el mismo problema después de apuntar a Android 12 en mi proyecto.

El problema era que el proyecto era bastante grande, con varios archivos AndroidManifest.xml y faltaba android:exported en muchos lugares.

Terminé creando una tarea de Gradle para completar los atributos android:exported que faltan automáticamente para mí.

Aquí está el enlace .

over 4 years ago · Santiago Trujillo Report

0

Esto ayudará a los usuarios de 2021.

En uno de sus dos archivos build.gradle, debería poder encontrar la línea targetSDK 31. Cámbiela a 30 y luego realice una sincronización de gradle (aparecerá una pequeña barra sobre la ventana de código principal donde puede hacer clic en "Sincronizar ahora") y usted debe ser bueno para ir.

over 4 years ago · Santiago Trujillo Report

0

Debe especificar android:exported="false" o android:exported="true"

Manifiesto:

 <activity android:name=".MainActivity" android:exported="true" android:theme="@style/Theme.MyApplication.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

como se menciona en el documento :

Si su aplicación tiene como objetivo Android 12 y contiene actividades, servicios o receptores de transmisión que usan filtros de intención, debe declarar explícitamente el atributo exportado android: para estos componentes de la aplicación.

Advertencia : si una actividad, servicio o receptor de transmisión usa filtros de intención y no tiene un valor declarado explícitamente para android: exportado, su aplicación no se puede instalar en un dispositivo que ejecuta Android 12.

También verifique cuándo usar verdadero/falso para el valor 'android: exportado'.

over 4 years ago · Santiago Trujillo Report

0

Actualice la versión de androidTestImplementation 'androidx.test.ext:junit:1.1.1' a la última versión como: - androidTestImplementation 'androidx.test.ext:junit:1.1.3' desde el nivel de la aplicación build.gradle .

over 4 years ago · Santiago Trujillo Report

0

Si no encontró en su manifiesto el lugar donde hay una actividad sin la etiqueta "android: exported = false", entonces es probable que esté en sus dependencias... para determinar dónde exactamente, primero baje de categoría "compileSdkVersion" a 30 y "targetSdkVersion" a 30 para que se compile.

 android { compileSdkVersion("android-S") buildToolsVersion "30.0.3" defaultConfig { ... minSdkVersion 23 targetSdkVersion("S") ... }

Después de eso, en la ventana principal manifest.xml hay una pestaña con "manifiesto fusionado". Allí puede inspeccionar qué actividad exactamente no tenía el atributo "android: exported = false".

En mi caso fue por herramientas de terceros:

build.gradle (: aplicación):

 debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' //and debugImplementation "com.github.markzhai:blockcanary-android:1.5.0" releaseImplementation "com.github.markzhai:blockcanary-no-op:1.5.0"

Además, para los servicios tuve que agregar el atributo:

 <service android:name=".autofillservice.MyAutofillService" android:exported="true" android:permission="android.permission.BIND_AUTOFILL">

y

 <service android:name="com.demo.myApp.my_access.MyAccessService" android:enabled="true" android:exported="true" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

Como mi problema estaba en una dependencia de terceros y no se actualizará pronto, simplemente agregué una declaración de <actividad> con el indicador android:exported="true" y exported="false" donde era necesario para anular la declaración inicial , también como necesito esta dependencia en Debug, solo agregué un nuevo archivo AndroidManifest.xml en src/debug:

Para fuga_canario:

 <?xml version="1.0" encoding="UTF-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application> <activity android:name="leakcanary.internal.activity.LeakActivity" android:exported="true" android:icon="@mipmap/leak_canary_icon" android:label="@string/leak_canary_display_activity_label" android:taskAffinity="com.squareup.leakcanary.${applicationId}" android:theme="@style/leak_canary_LeakCanary.Base"> <intent-filter android:label="@string/leak_canary_import_hprof_file"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="file" /> <data android:scheme="content" /> <data android:mimeType="*/*" /> <data android:host="*" /> <data android:pathPattern=".*\\.hprof" /> <data android:pathPattern=".*\\..*\\.hprof" /> <data android:pathPattern=".*\\..*\\..*\\.hprof" /> <data android:pathPattern=".*\\..*\\..*\\..*\\.hprof" /> <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.hprof" /> <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.hprof" /> <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\..*\\.hprof" /> </intent-filter> </activity> <activity android:name="leakcanary.internal.RequestStoragePermissionActivity" android:excludeFromRecents="true" android:exported="false" android:icon="@mipmap/leak_canary_icon" android:label="@string/leak_canary_storage_permission_activity_label" android:taskAffinity="com.squareup.leakcanary.${applicationId}" android:theme="@style/leak_canary_Theme.Transparent" /> <receiver android:name="leakcanary.internal.NotificationReceiver" android:exported="false" /> </application> </manifest>

También podría usar el atributo tools:node="merge" y declarar android:exported=true|false como sugirió amablemente LeoFarage .

over 4 years ago · Santiago Trujillo Report

0

Recibí este error incluso cuando agregué android:exported="true" en todas las actividades, receptores, etc. Lo que funcionó para mí fue cambiar compileSdkVersion y targetSdkVersion a 30.

over 4 years ago · Santiago Trujillo Report

0

Ingrese la descripción de la imagen aquí

En su actividad de inicio, declare "android: exportado":

 <activity android:name=".MainActivity" android:exported = "false"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

Si es verdadero "android: exportado = verdadero", significa que la actividad es accesible para cualquier aplicación y puede iniciarse por su nombre de clase exacto.

Si es falso "android: exportado = falso", significa que la actividad solo puede ser iniciada por los componentes de la misma aplicación con la misma ID de usuario o componentes del sistema privilegiados.

Para más detalles consulta aquí .

over 4 years ago · Santiago Trujillo Report

0

Para aplicaciones destinadas a Android 12

Cambie targetSdkVersion de su aplicación a S (32 o 31) para habilitar el nuevo comportamiento.

Luego especifique el atributo android:exorted="" en Manifest, ya sea verdadero o falso, depende de la actividad

Para actividades de Laucher como Splash o MainActivity, use android:exported="true" y para el resto de actividades, use android:exported="false"

P.ej:

 //it's **true** for laucher Activity <activity android:name=".SplashActivity" android:exported="true" /> //it's **false** for rest Activities <activity android:name=".MainActivity" android:exported="false" />
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!