Erro de instalação: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

93

Estou desenvolvendo um pequeno aplicativo que lista todos os aplicativos presentes / instalados no dispositivo android. Mas estou recebendo o erro abaixo enquanto tento executar o código.

Erro de instalação: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Por favor, qualquer um pode me ajudar a resolver esse erro.

SP
fonte
1
Existem muitos erros no arquivo manifest.xml que podem causar esse código de erro, consulte a resposta da lista de erros PackageParser.java abaixo.
Ribo
1
Você não aceitou uma resposta?
shieldgenerator7
Siga este link Você receberá sua resposta stackoverflow.com/questions/16015033/…
Sritam Jagadev
Verifique este link para uma resposta clara
Vishnuvathsan
Se você tiver diferentes pacotes e classes em seu projeto. Altere o nome do pacote de letras maiúsculas para minúsculas.O nome do pacote deve começar com letras minúsculas
Waheed Akhtar

Respostas:

79

Pode haver outro motivo para esse erro. O atributo

android:taskAffinity="string" 

Deve sempre começar com um ponto, como:

android:taskAffinity=".string" 
Andy
fonte
4
Problema resolvido para mim, mas onde posso encontrar esta informação na documentação? não há nada sobre um DOT aqui: developer.android.com/guide/topics/manifest/…
Beto Caldas
68

O nome da atividade deve ser prefixado com "." em seu arquivo de manifesto.

Suresha Chilukuri
fonte
em Manifest você declarou o atributo de pacote com pacote, portanto, ao criar a atividade, você coloca "." precedido pelo nome do pacote, você também pode digitar o nome completo da atividade como: "com.example.test.Activity_Name" ou ".Activity_Name"
Amt87
42

Eu estava tendo este erro porque tinha letras maiúsculas no nome do meu pacote como este

Com.Example.packagename

depois que eu mudei para algo como

com.example.packagename

foi resolvido

Samuel
fonte
isso resolveu meu problema. Minha classe de atividades estava em um pacote chamado Activities e eu adicionei ao manifesto antes que esse erro aparecesse. quando mudei o nome do pacote Activities para Activities, ele resolveu. Obrigado
alicanbatur
2
Acho que você pode ter letras maiúsculas no nome do pacote, no entanto, a 1ª letra do nome do pacote não pode ser uma letra maiúscula. Portanto, "myActivity" = OK, mas "MyActivity" = Não está OK
Gene
29

O código de erro INSTALL_PARSE_FAILED_MANIFEST_MALFORMED é retornado por PackageParser.java quando ele detecta qualquer um de um grande número de erros no arquivo manifest.xml.

Para isolar o erro, procure no logcat (ao executar o comando 'adb install foo.apk'). No problema que encontrei, o logcat continha:

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

Na quarta linha acima, você pode ver que PackageParser reclama que a linha # 214 do arquivo manifest.xml "<provider> não inclui o atributo de autoridades" . Veja a lista abaixo de todos os casos em PackageParser que retornam esse código de erro. (PackageParser é a única classe que produz o código de erro PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)

No meu caso, a mensagem "<provider> não inclui atributo de autoridades" é produzida pela linha 2490 de PackagerParser.java na função parseProvider chamada por parseApplication.


A partir da versão 4.1.1 de frameworks / base / core / java / android / content / pm / PackageParser.java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED é referenciado nessas linhas nesses métodos. Se o número da linha do código-fonte for seguido por uma string entre aspas, essa é a mensagem impressa no logcat. se o número da linha for seguido por uma expressão Java que é o código que causou o retorno desse código de erro, essa função deve ser investigada para ver o que causou o retorno da mensagem de erro. Em alguns casos, não consegui isolar a causa do erro para uma chamada de método específica.

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

É lamentável que você tenha que vasculhar o logcat e a fonte para descobrir o que causa o problema.

Ribo
fonte
1
obrigado por nos ajudar a entender como resolver o problema geral, além de dar uma solução específica.
Vinay W,
1
Existem vários motivos para esta exceção. Esta é a resposta mais lógica.
Meghal Shah
1
Obrigado - no meu caso tive um IntentFilter.MalformedMimeTypeExceptionque perdi.
CzarMatt
Esta é a resposta correta de longe. Quão útil é o logcat?
Krishnabhadra,
10

Verifique o nome da sua atividade no arquivo de manifesto

ou o nome do pacote na atividade principal / aula

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

Eu tenho o mesmo problema, mas quando ligo um processo assim:

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

Quando eu mudo para:

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

Tudo começa a funcionar.

Dawid Drozd
fonte
2
Ao adicionar ':', você alterou a semântica do código. No segundo caso, o aplicativo criará um novo processo para o serviço que está disponível apenas para aquele aplicativo. developer.android.com/guide/topics/manifest/… . Em vez disso, o erro pode ser corrigido mencionando o nome completo do pacote em vez de apenas a palavra 'tela'.
shshnk de
10

Eu tive o mesmo problema há um tempo atrás, nos documentos do Android eles disseram que se você não usar ":" como prefixo, android:processvocê deve usar uma letra minúscula, mas eles nunca disseram isso, então deve ser um processo semelhante a um pacote nome, gostocom.company.app.services.MyService

4gus71n
fonte
1
Até eu tive o mesmo problema. Eles deveriam ter mencionado que precisamos incluir o nome do pacote quando não estiver usando ':'
shshnk
8

Qualquer nome como android:name, android:processdeve estar na forma de nome de pacote: começa com a..z, combina com outros com ., não termina com ....


fonte
@IgorG. Desculpe, não entendi :-( mas o novo SDK removeu esse campo ( aqui ).
1
Obrigado. Chamei um processo da seguinte maneira: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services é o pacote onde está meu serviço) e o erro de instalação não aparecerá depois disso.
Maksim Dmitriev
8

Meu problema era que eu havia escrito (observe o - vs. o _):

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

sob uma atividade. Essa também pode ser a causa do seu problema.

Ymabob
fonte
3

Obteve o mesmo erro! tinha etiqueta de permissão vazia e isso estava causando o problema!

bhumika singh
fonte
Adicione mais detalhes à sua resposta
Kolossus
3

Tive o mesmo problema depois de adicionar localizações

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

A string @string/version_nameacidentalmente passou para um dos novos arquivos de string localizados adicionados (ela apareceu apenas nos novos arquivos). Depois de verificar todas as localizações e remover @string/version_namede todos os arquivos, exceto eng locale, tudo funcionou novamente

vírus
fonte
3

Leia os registros do seu dispositivo Android para diagnosticar esse erro. Espere uma linha "W / PackageParser" explicando o problema.

Dan Fabulich
fonte
3
<activity/>

deve ser definido ANTES

<activity-alias/>
Ajvo
fonte
Eu gostaria de poder votar a favor novamente. Segunda vez, essa resposta me ajudou
cottonBallPaws
3

Eu tive este erro porque o código abaixo

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

Quando mudei android:mimeType="*"para android:mimeType="*/*"consertar esse erro.

Ke Di
fonte
3

A pasta de nome da atividade criada deve ser em letras minúsculas. Não use letras maiúsculas para o nome da pasta de atividade .... é sempre melhor usar letras minúsculas.

Khan
fonte
3

isso pode ser por vários motivos, mas para mim foi resolvido alterando o nome do pacote com o nome em minúsculas (o nome do pacote era Activities, resolvido com atividades).

Alex
fonte
2

Se você estiver usando multidex no manifesto, ele deve ser adicionado com valor ou recurso. Gostar..

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

OU

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

em seguida, limpe o projeto e reinstale o aplicativo.

Sam
fonte
2

No meu caso, estava me referindo a um ícone usando um atributo como este:

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

em vez do drawable:

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

Estou usando esse atributo em vários lugares, mas parece que não funciona no manifesto.

M.Sameer
fonte
Exatamente meu caso. Preciso que tenha uma cor diferente, dependendo das preferências do usuário. Infelizmente, android: resource não aceita atributos ...
Elyakim Levi
2

Eu crio um novo aplicativo e o direciono para o Android Pie . Tudo estava funcionando bem e, ultimamente, descobri que meu aplicativo não instala no Android Naught e na versão inferior do sistema operacional Android.

Durante a instalação, vejo uma mensagem de falha

A instalação falhou com a mensagem INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.

Portanto, as correções que fiz são as seguintes e todas precisam ser feitas AndroidManifest.xmlapenas no arquivo.

Para atividade, serviço, receptor e todos

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

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

Para permissões de manifesto

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" />

Essas foram todas as mudanças que eu tive que realizar para que funcionasse para dispositivos de versão inferior também.

Harpreet
fonte
No Xamarin android corrigido no atributo Activity Name. Isso é trabalho para mim
Sovary
2

-Alvo <activity>precisa ser especificado antes de o <activity-alias>.

Eugen Pechanec
fonte
1

Pode haver outros arquivos malformados, mas não destacados no IDE, por exemplo, res / values ​​/ strings que o manifesto pode fazer referência para itens como rótulos.

m_cheung
fonte
1

No meu caso, a causa foi a ausência do atributo android: name em <activity-alias>. É obrigatório para <activity-alias> embora não deva nomear uma classe existente. O engraçado é que o projeto é compilado sem problemas.

Gena Batsyan
fonte
1

Meu problema era o seguinte:

Eu estava especificando minhas permissões da seguinte maneira e não estava funcionando.

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

Estava funcionando bem quando mudei para o seguinte:

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

Eu estava tendo esse erro porque tinha a linha abaixo.

android:protectionLevel="developer"

Depois de mudar para

android:protectionLevel="signature"

problema foi resolvido

Swalih
fonte
1

Depois de lutar com esse problema, descobri que todos os valores usados ​​como um valor de recurso de string (também conhecido como @ string /) nos manifestos (das bibliotecas que você está usando também) não podem fazer parte de strings.xml de localizações . Exemplo: se seu arquivo de manifestos usa @ string / app_name, a definição de string / app_name é permitida apenas em seus valores padrão / strings.xml e não no arquivo string.xml alternativo que você fornece para localizações. Espero que ajude ..

Ozzz
fonte
1

Eu tive o mesmo erro. Eu não tinha letras maiúsculas no nome do meu pacote / aplicativo e limpar o projeto e outras soluções também não me ajudaram. afinal criei novo projeto e copiei meu material para o novo passo a passo e verifiquei se o problema aparece. afinal eu tinha um projeto legal e sem erros, sem redundância. às vezes é difícil encontrar a origem desse erro, então é mais fácil adotar outra abordagem.

Espero que isso ajude alguém!

Mehran Zamani
fonte
1

Eu enfrentei esse erro quando coloquei a classe Application em um pacote errado!

farhad.kargaran
fonte
1

Você provavelmente não seguiu as regras de sintaxe de uma tag. por exemplo:

<meta-data
      android:name="preloaded_fonts"/>

Esta tag está incompleta e causa este erro.

Visão geral do manifesto do aplicativo

Gadolf
fonte
1

Use android:resourceem em <meta-data>vez de android:srceandroid:srcCompat

Bibin Johny
fonte
1

Sei que é tarde para responder aqui, mas cometi um erro estranho, então poste minha resposta se ajudar alguém. No meu caso, por engano, adicionei a atividade do 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>

Então, quando tento executar meu aplicativo, recebo um erro

Erro ao instalar o APK

Falha [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Acabei de remover a palavra "-alias" do registro de atividades e meu aplicativo foi iniciado com sucesso.

Ajay Pandya
fonte