Error de instalación: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

93

Estoy desarrollando una pequeña aplicación que enumera todas las aplicaciones presentes / instaladas en el dispositivo Android. Pero recibo el siguiente error mientras intento ejecutar el código.

Error de instalación: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Por favor, ¿alguien puede ayudarme a solucionar este error?

SP
fuente
1
Hay muchos errores en el archivo manifest.xml que pueden causar este código de error, consulte la respuesta de la lista de errores PackageParser.java a continuación.
Ribo
1
¿No aceptó una respuesta?
shieldgenerator7
Siga este enlace. Obtendrá su respuesta stackoverflow.com/questions/16015033/…
Sritam Jagadev
Consulte este enlace para obtener una respuesta clara
Vishnuvathsan
Si tiene diferentes paquetes y clases en su proyecto, cambie el nombre del paquete de letras mayúsculas a letras minúsculas. El nombre del paquete debe comenzar con letras minúsculas
Waheed Akhtar

Respuestas:

79

Podría haber otra razón para este error. El atributo

android:taskAffinity="string" 

Siempre debe comenzar con un punto, como:

android:taskAffinity=".string" 
Andy
fuente
4
Problema resuelto para mí pero, ¿dónde puedo encontrar esta información en la documentación? no hay nada sobre un DOT aquí: developer.android.com/guide/topics/manifest/…
Beto Caldas
68

El nombre de la actividad debe tener el prefijo "." en su archivo de manifiesto.

suresha Chilukuri
fuente
en Manifiesto, declaró el atributo del paquete con el paquete, por lo que cuando crea la actividad, coloca "." para ir precedido por el nombre del paquete, también puede escribir el nombre completo de la actividad como: "com.example.test.Activity_Name", o ".Activity_Name"
Amt87
42

Tenía este error porque tenía letras mayúsculas en el nombre de mi paquete como este

Com.Example.packagename

después de haberlo cambiado a algo como

com.example.packagename

fue resuelto

Samuel
fuente
esto resolvió mi problema. Mi clase de actividad estaba en un paquete que se llamaba Actividades y la agregué para manifestar antes de que apareciera este error. cuando cambié el nombre del paquete de Actividades a actividades, se resolvió. Gracias
alicanbatur
2
Creo que puede tener letras mayúsculas en el nombre del paquete, sin embargo, la primera letra del nombre del paquete no puede ser mayúscula. Entonces "myActivity" = OK pero "MyActivity" = No OK
Gene
29

PackageParser.java devuelve el código de error INSTALL_PARSE_FAILED_MANIFEST_MALFORMED cuando detecta alguno de un gran número de errores en el archivo manifest.xml.

Para aislar el error, busque en logcat (cuando haga el comando 'adb install foo.apk'). En el problema que encontré, logcat contenía:

W/ActivityManager(  360): No content provider found for permission revoke: file:///data/local/tmp/foo.apk
D/Finsky  (32707): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 6
D/Finsky  (32707): [1] WorkerTask.onPreExecute: Verification Requested for id = 6,   data=file:///data/local/tmp/foo.apk flags=112 fromVerificationActivity=false
W/PackageParser(32707): /data/local/tmp/foo.apk (at Binary XML file line #214): <provider> does not include authorities attribute
D/Finsky  (32707): [716] PackageVerificationService.getPackageInfo: Cannot read archive for file:///data/local/tmp/foo.apk in request id=6
D/Finsky  (32707): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 6
W/ActivityManager(  360): No content provider found for permission revoke: file:///data/local/tmp/foo.apk
I/PackageManager(  360): Copying native libraries to /data/app-lib/vmdl1205566381
W/PackageParser(  360): /data/app/vmdl1205566381.tmp (at Binary XML file line #214): <provider> does not include authorities attribute

En la cuarta línea anterior, puede ver que PackageParser se queja de que la línea # 214 del archivo manifest.xml "<proveedor> no incluye el atributo de autoridades" . Consulte la lista a continuación de todos los casos en PackageParser que devuelve ese código de error. (PackageParser es la única clase que produce el código de error PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)

En mi caso, el mensaje "<provider> no incluye atributo de autoridades" es producido por la línea 2490 de PackagerParser.java en la función parseProvider llamada por parseApplication.


Desde la versión 4.1.1 de frameworks / base / core / java / android / content / pm / PackageParser.java, se hace referencia a PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED en estas líneas en estos métodos. Si el número de línea del código fuente va seguido de una cadena entre comillas, ese es el mensaje impreso en logcat. si el número de línea va seguido de una expresión de Java que es el código que provocó que se devolviera ese código de error, esa función debe investigarse para ver qué provocó que se devolviera el mensaje de error. En un par de casos, no pude aislar la causa del error en una llamada a un método específico.

in parsePackage:
  536:  (only used in 'core apps' with no 'pkg')
  973:  "<manifest> has more than one <application>"
  1275: "Bad element under <manifest>: "      --if RIGID_PARSER

in parsePermissionGroup:
  1464: !parsePackageItemInfo(owner, perm.info, outError,
    "<permission-group>", sa,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_name,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_label,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_icon,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_logo)
  1482: !parseAllMetaData(res, parser, attrs, "<permission-group>", perm,
    outError)

in parsePermission:
  1506: !parsePackageItemInfo(owner, perm.info, outError,
    "<permission>", sa,
    com.android.internal.R.styleable.AndroidManifestPermission_name,
    com.android.internal.R.styleable.AndroidManifestPermission_label,
    com.android.internal.R.styleable.AndroidManifestPermission_icon,
    com.android.internal.R.styleable.AndroidManifestPermission_logo)
  1530: "<permission> does not specify protectionLevel"
  1541: "<permission>  protectionLevel specifies a flag but is not based on signature type"
  1548: !parseAllMetaData(res, parser, attrs, "<permission>", perm, outError)

in parsePersmissionTree:
  1572: !parsePackageItemInfo(owner, perm.info, outError,
    "<permission-tree>", sa,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_name,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_label,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_icon,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_logo)
  1585: "<permission-tree> name has less than three segments: "+perm.info.name
  1595: !parseAllMetaData(res, parser, attrs, "<permission-tree>", perm, outError)

in parseInstrumentation:
  1625: new Instrumentation(mParseInstrumentationArgs, new InstrumentationInfo())
  1648: "<instrumentation> does not specify targetPackage"
  1654: !parseAllMetaData(res, parser, attrs, "<instrumentation>", a, outError)

in parseApplication:
  1678: buildClassName(pkgName, name, outError) == null
  1851: (Set by various other functions)
  1869: parseActivity(owner, res, parser, attrs, flags, outError, false, hardwareAccelerated) == null
  1878: parseActivity(owner, res, parser, attrs, flags, outError, true, false) == null
  1887: parseService(owner, res, parser, attrs, flags, outError) == null
  1896: parseProvider(owner, res, parser, attrs, flags, outError) == null
    2484: "Heavy-weight applications can not have providers in main process"
    2890: "<provider> does not incude authorities attribute"
  1905: parseActivityAlias(owner, res, parser, attrs, flags, outError) == null
  1917: parseMetaData(res, parser, attrs, owner.mAppMetaData, outError) == null
  1969: "Bad element under <application>: "+tagName

Es lamentable que tenga que hurgar en logcat y la fuente para descubrir qué causa un problema.

Ribo
fuente
1
gracias por ayudarnos a entender cómo solucionar el problema general además de dar una solución específica.
Vinay W
1
Hay múltiples razones para esta excepción. Esta es la respuesta más lógica.
Meghal Shah
1
Gracias, en mi caso tuve una IntentFilter.MalformedMimeTypeExceptionque me perdí.
CzarMatt
Esta es la respuesta correcta de lejos. ¿Qué tan útil es logcat?
Krishnabhadra
10

Verifique el nombre de su actividad en el archivo de manifiesto

o el nombre del paquete en la actividad / clase principal

<activity android:name="MainActivity"></activity>
Diptendu
fuente
10

Tengo el mismo problema, pero cuando llamo a un proceso como este:

<service
    android:name="com.dexode.tama.AppService"
    android:process="screen" >
</service>

Cuando cambio a:

<service
    android:name="com.dexode.tama.AppService"
    android:process=":screen" >
</service>

Todo empieza a funcionar.

Dawid Drozd
fuente
2
Al agregar el ':' cambió la semántica del código. En el segundo caso, la aplicación creará un nuevo proceso para el servicio que está disponible solo para esa aplicación. developer.android.com/guide/topics/manifest/… . En cambio, el error se puede solucionar mencionando el nombre completo del paquete en lugar de solo la palabra "pantalla".
shshnk
10

Me encontré con el mismo problema hace un tiempo, en los documentos de Android dijeron que si no usas ":" como prefijo en android:process, debes usar una letra minúscula, pero nunca dijeron eso, entonces debería ser un proceso similar a un paquete nombre, comocom.company.app.services.MyService

4gus71n
fuente
1
Incluso yo tuve el mismo problema. Deberían haber mencionado que necesitamos incluir el nombre del paquete cuando no se use ':'
shshnk
8

Cualquier nombre como android:name, android:processdebe estar en forma de nombre de paquete: comienza con a..z, combina con otros con ., no termina con ....


fuente
@IgorG. Lo siento, perdí mi punto :-( Pero el nuevo SDK eliminó ese campo ( aquí ).
1
Gracias. Llamé a un proceso de esta manera: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services es el paquete donde está mi servicio) y el error de instalación no aparecerá después de eso.
Maksim Dmitriev
8

Mi problema fue que había escrito (observe el - frente al _):

<meta_data ... /> 
<!-- instead of -->
<meta-data ... />

bajo una actividad. Esta también podría ser la causa de su problema.

Ymabob
fuente
3

¡Tengo el mismo error! tenía la etiqueta de permiso vacía y eso estaba causando el problema.

bhumika singh
fuente
Agregue más detalles a su respuesta
kolossus
3

Me encuentro con el mismo problema después de agregar localizaciones

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.package"
    android:versionCode="10"
    android:versionName="@string/version_name" >

La cadena @string/version_namepasó accidentalmente a uno de los nuevos archivos de cadenas localizados agregados (apareció solo en los archivos nuevos). Después de verificar todas las localizaciones y eliminar @string/version_namede todos los archivos, excepto la configuración regional de eng, todo funcionó nuevamente

virus
fuente
3

Lea los registros de su dispositivo Android para diagnosticar este error. Espere una línea "W / PackageParser" que explique el problema.

Dan Fabulich
fuente
3
<activity/>

debe definirse ANTES

<activity-alias/>
Ajvo
fuente
Ojalá pudiera votar esto nuevamente. Segunda vez que esta respuesta me ha ayudado
cottonBallPaws
3

Tuve este error porque el siguiente código

<intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*" android:host="*" android:scheme="content" />
            </intent-filter>

Cuando cambié android:mimeType="*"para android:mimeType="*/*"corregir este error.

Ke Di
fuente
3

La carpeta de nombre de la actividad creada debe ser minúscula. No use letras mayúsculas para el nombre de la carpeta de actividad ... siempre es mejor usar letras minúsculas.

Kan
fuente
3

esto puede deberse a muchas razones, pero para mí se resolvió cambiando el nombre del paquete con el nombre en minúsculas (el nombre del paquete era Actividades, resuelto con actividades).

Alex
fuente
2

Si está utilizando multidex en el manifiesto, debe agregarse valor o recurso. Me gusta..

<meta-data android:name="android.support.multidex.MultiDexApplication"
android:value="@string/yourValue" />

O

<meta-data android:name="android.support.multidex.MultiDexApplication"
android:resource="@string/yourValue" />

luego limpie el proyecto y reinstale la aplicación.

Sam
fuente
2

En mi caso, me refería a un ícono que usa un atributo como este:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="?attr/ic_notify" />

en lugar del dibujable:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_notify" />

Estoy usando este atributo en varios lugares, pero parece que no funciona en el manifiesto.

M.Sameer
fuente
Exactamente mi caso. Necesito que sea de un color diferente según las preferencias del usuario. Lamentablemente, android: el recurso no acepta atributos ...
Elyakim Levi
2

Creo una nueva aplicación y la apunto a Android Pie . Todo estaba funcionando bien y bien, últimamente descubrí que mi aplicación no se instala en Android Naught y en la versión inferior del sistema operativo Android.

Durante la instalación, veo un mensaje de error

La instalación falló con el mensaje INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.

Entonces, las correcciones que hice son las siguientes y todas deben hacerse AndroidManifest.xmlsolo en el archivo.

Para actividad, servicio, receptor y todo

Instead of:
    android:name=".service.MyService"

Used: 
    android:name="com.complete.appicationID.service.MyService"

Para permisos de manifiesto

Instead of: 
     <uses-permission android:name="{applicationId}.permission.MAPS_RECEIVE" />
     <permission
         android:name="{applicationId}.permission.MAPS_RECEIVE"
         android:protectionLevel="signature" />

Used:
     <uses-permission android:name="com.complete.appicationID.permission.MAPS_RECEIVE" />
     <permission
         android:name="com.complete.appicationID.permission.MAPS_RECEIVE"
         android:protectionLevel="signature" />

Esos fueron todos los cambios que tuve que realizar para que funcionara también en dispositivos de versiones inferiores.

Harpreet
fuente
En Xamarin, Android se corrigió en el atributo Nombre de actividad. Eso es trabajo para mí
Sovary
2

Objetivo <activity>necesita ser especificada antes de la <activity-alias>.

Eugen Pechanec
fuente
1

Puede haber otros archivos con formato incorrecto pero que no están resaltados en el IDE, por ejemplo, res / valores / cadenas a las que el manifiesto puede hacer referencia para cosas como etiquetas.

m_cheung
fuente
1

En mi caso, la causa fue la ausencia del atributo android: name en <activity-alias>. Es obligatorio para <activity-alias> aunque no debe nombrar una clase existente. Lo curioso es que el proyecto se compila sin problemas.

Gena Batsyan
fuente
1

Mi problema fue el siguiente:

Estaba especificando mis permisos de la siguiente manera y no funcionaba.

<permission android:name="android.permission.INTERNET">
    <meta-data />
</permission>
<permission android:name="android.permission.ACCESS_NETWORK_STATE">
    <meta-data />
</permission>

Funcionaba bien cuando lo cambié para que fuera el siguiente:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
shahensha
fuente
1

Tenía este error porque tenía la línea a continuación.

android:protectionLevel="developer"

Después de que lo cambie a

android:protectionLevel="signature"

el problema fue resuelto

Swalih
fuente
1

Después de luchar con este problema, descubrí que todos los valores que se usan como un valor de recurso de cadena (también conocido como @ string /) en los manifiestos (de las bibliotecas que está usando también), no pueden ser parte de strings.xml de localizaciones. . Ejemplo: si su archivo de manifiestos usa @ string / app_name, la definición de string / app_name solo se permite en sus valores predeterminados / strings.xml y no en el archivo alternativo string.xml que usted proporciona para las localizaciones. Espero que eso ayude..

Ozzz
fuente
1

Tuve el mismo error. No tenía caracteres en mayúsculas en el nombre de mi paquete / aplicación y limpiar el proyecto y otras soluciones tampoco me ayudaron. después de todo, creé un nuevo proyecto y copié mis cosas en el nuevo paso a paso y verifiqué si aparece el problema. después de todo, tenía un proyecto agradable y libre de errores sin redundancia. a veces es difícil encontrar el origen de este error, por lo que es más fácil adoptar otro enfoque.

¡Espero que esto ayude a alguien!

Mehran Zamani
fuente
1

¡Me enfrenté a este error cuando puse la clase de aplicación en un paquete incorrecto!

farhad.kargaran
fuente
1

Usar android:resourceen en <meta-data>lugar de android:srcyandroid:srcCompat

Bibin Johny
fuente
1

Sé que es tarde para responder aquí, pero cometo un error extraño, así que publique mi respuesta si ayuda a alguien.En mi caso, por error, agregué la actividad del iniciador principal como alias

   <activity-alias
        android:name=".activities.SplashActivity"
        android:targetActivity=".activities.SplashActivity">

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

Entonces, cuando intento ejecutar mi aplicación, aparece un error

Error al instalar APK

Error [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Simplemente elimino la palabra "-alias" del registro de actividad y mi aplicación se inicia correctamente.

Ajay Pandya
fuente