Errore di installazione: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


93

Sto sviluppando una piccola applicazione che elenca tutte le applicazioni presenti / installate sul dispositivo Android. Ma ricevo l'errore seguente mentre cerco di eseguire il codice.

Errore di installazione: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Per favore qualcuno può aiutarmi a risolvere questo errore.


1
Ci sono molti errori nel file manifest.xml che possono causare questo codice di errore, vedi la risposta dell'elenco degli errori PackageParser.java di seguito.
Ribo

1
Non hai accettato una risposta?
shieldgenerator7

Seguite questo link potrete ottenere la vostra risposta stackoverflow.com/questions/16015033/...
Sritam Jagadev

Controlla questo link per una risposta chiara
Vishnuvathsan

Se hai diversi pacchetti e classi nel tuo progetto Cambia il nome del pacchetto da lettere maiuscole a lettere minuscole Il nome del pacchetto dovrebbe iniziare con lettere minuscole
Waheed Akhtar

Risposte:


79

Potrebbe esserci un altro motivo per questo errore. L'attributo

android:taskAffinity="string" 

Dovrebbe sempre iniziare con un punto, come:

android:taskAffinity=".string" 

4
Problema risolto per me, ma dove posso trovare queste informazioni nella documentazione? non c'è niente su un DOT qui: developer.android.com/guide/topics/manifest/…
Beto Caldas

68

Il nome dell'attività deve essere preceduto da "." nel tuo file manifest.


in Manifest hai dichiarato l'attributo del pacchetto con pacchetto, quindi quando crei un'attività metti "." per essere preceduto dal nome del pacchetto, puoi anche digitare il nome completo dell'attività come: "com.example.test.Activity_Name" o ".Activity_Name"
Amt87

42

Ho riscontrato questo errore perché avevo lettere maiuscole nel nome del mio pacchetto come questo

Com.Example.packagename

dopo averlo cambiato in qualcosa di simile

com.example.packagename

è stato risolto


questo ha risolto il mio problema. La mia classe di attività si trovava in un pacchetto chiamato Attività e l'ho aggiunto al manifesto prima che comparisse questo errore. quando ho cambiato il nome del pacchetto Attività in attività, è stato risolto. Grazie
alicanbatur

2
Penso che tu possa avere lettere maiuscole nel nome del pacchetto, tuttavia, la prima lettera nel nome del pacchetto non può essere una lettera maiuscola. Quindi "myActivity" = OK ma "MyActivity" = Not OK
Gene

29

Il codice di errore INSTALL_PARSE_FAILED_MANIFEST_MALFORMED viene restituito da PackageParser.java quando rileva uno qualsiasi di un gran numero di errori nel file manifest.xml.

Per isolare l'errore, guarda in logcat (quando esegui il comando 'adb install foo.apk'). Nel problema che ho riscontrato, logcat conteneva:

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

Nella quarta riga sopra, puoi vedere che PackageParser si lamenta del fatto che la riga # 214 del file manifest.xml "<provider> non include l'attributo delle autorità" . Vedere l'elenco seguente di tutti i casi in PackageParser che restituiscono quel codice di errore. (PackageParser è l'unica classe che produce il codice di errore PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)

Nel mio caso il messaggio "<provider> non include authority attribute" è prodotto dalla riga 2490 di PackagerParser.java nella funzione parseProvider chiamata da parseApplication.


Dalla versione 4.1.1 di frameworks / base / core / java / android / content / pm / PackageParser.java, PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED è referenziato su queste righe in questi metodi. Se il numero di riga del codice sorgente è seguito da una stringa tra virgolette, questo è il messaggio stampato in logcat. se il numero di riga è seguito da un'espressione Java che è il codice che ha causato la restituzione del codice di errore, è necessario esaminare quella funzione per vedere cosa ha causato la restituzione del messaggio di errore. In un paio di casi non sono riuscito a isolare la causa dell'errore a una specifica chiamata al metodo.

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

È deplorevole che tu debba dare un'occhiata a logcat e alla fonte per capire cosa causa un problema.


1
grazie per averci aiutato a capire come risolvere il problema generale oltre a dare una soluzione specifica.
Vinay W

1
Ci sono molte ragioni per questa eccezione. Questa è la risposta più logica.
Meghal Shah

1
Grazie - nel mio caso ne avevo uno IntentFilter.MalformedMimeTypeExceptionche mi mancava.
ZarMatt

Questa è di gran lunga la risposta corretta. Quanto è utile logcat?
Krishnabhadra

10

Controlla il nome dell'attività nel file manifest

o il nome del pacchetto nell'attività / classe principale

<activity android:name="MainActivity"></activity>

10

Ho lo stesso problema ma quando chiamo un processo in questo modo:

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

Quando cambio a:

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

Tutto inizia a funzionare.


2
Aggiungendo ":" hai cambiato la semantica del codice. Nel secondo caso l'applicazione creerà un nuovo processo per il servizio disponibile solo per quell'applicazione. developer.android.com/guide/topics/manifest/… . Invece l'errore può essere corretto menzionando il nome completo del pacchetto invece della sola parola "schermo".
shshnk

10

Mi sono imbattuto nello stesso problema tempo fa, nei documenti di Android hanno detto che se non usi ":" come prefisso android:processdovresti usare una lettera minuscola, ma non l'hanno mai detto, quindi dovrebbe essere un pacchetto come processo nome, comecom.company.app.services.MyService


1
Anche io ho avuto lo stesso problema. Avrebbero dovuto menzionare la necessità di includere il nome del pacchetto per quando non si utilizza ':'
shshnk

8

Qualsiasi nome come android:name, android:processdovrebbe essere nella forma del nome del pacchetto: inizia con a..z, si combina con altri con ., non finisce con ....


@IgorG. Scusa ho perso il mio punto :-( Ma il nuovo SDK ha rimosso quel campo ( qui ).

1
Grazie. Ho chiamato un processo in questo modo: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services è il pacchetto in cui si trova il mio servizio) e l'errore di installazione non verrà visualizzato dopo.
Maksim Dmitriev

8

Il mio problema era che avevo scritto (Notare il - vs. _):

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

sotto un'attività. Questa potrebbe essere anche la causa del tuo problema.


3

Hai lo stesso errore! aveva un tag di autorizzazione vuoto e questo stava causando il problema!


Per favore aggiungi qualche dettaglio in più alla tua risposta
kolossus

3

Mi imbatto nello stesso problema dopo aver aggiunto le localizzazioni

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

La stringa @string/version_namepassata accidentalmente in uno dei nuovi file di stringa localizzati aggiunti (appariva solo nei nuovi file). Dopo aver controllato tutte le localizzazioni e aver rimosso @string/version_nametutti i file eccetto eng locale, tutto ha funzionato di nuovo


3

Leggi i log del tuo dispositivo Android per diagnosticare questo errore. Aspettatevi una riga "W / PackageParser" che spieghi il problema.


3
<activity/>

deve essere definito PRIMA

<activity-alias/>

Vorrei poter votare di nuovo questo. La seconda volta che questa risposta mi ha aiutato
cottonBallPaws

3

Ho avuto questo errore perché il codice qui sotto

<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 sono passato android:mimeType="*"a android:mimeType="*/*"correggere questo errore.


3

La cartella del nome dell'attività creata deve contenere lettere minuscole, non utilizzare lettere maiuscole per il nome della cartella attività .... è sempre meglio usare lettere minuscole.


3

questo può essere per molte ragioni, ma per me è stato risolto cambiando il nome del pacchetto con il nome minuscolo (il nome del pacchetto era Attività, risolto con attività).


2

Se stai usando multidex in manifest, allora dovrebbe essere aggiunto con valore o risorsa. Piace..

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

quindi pulire il progetto e reinstallare l'app.


2

Nel mio caso mi riferivo a un'icona utilizzando un attributo come questo:

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

invece del disegnabile:

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

Sto usando questo attributo in diversi posti ma sembra che non funzioni in manifest.


Esattamente il mio caso. Ho bisogno che sia di un colore diverso a seconda delle preferenze dell'utente. Purtroppo, Android: la risorsa non accetta attributi ...
Elyakim Levi

2

Creo una nuova applicazione e la indirizzo ad Android Pie . Tutto funzionava bene e bene, poi ultimamente ho scoperto che la mia applicazione non si installa su Android Naught e versioni precedenti del sistema operativo Android.

Durante l'installazione, vedo un messaggio di errore

Installazione non riuscita con messaggio INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.

Quindi quali correzioni ho apportato sono le seguenti e devono essere eseguite AndroidManifest.xmlsolo in file.

Per attività, servizio, ricevente e tutto

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

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

Per autorizzazioni Manifest

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

Erano tutti i cambiamenti che dovevo eseguire per farlo funzionare anche per i dispositivi di versione inferiore.


In Xamarin Android corretto sull'attributo Nome attività. Questo è un lavoro per me
Sovary


1

Potrebbero esserci altri file che non sono corretti ma non sono evidenziati nell'IDE, ad esempio i res / values ​​/ strings a cui il manifest può fare riferimento per cose come le etichette.


1

Nel mio caso la causa era l'assenza dell'attributo android: name in <activity-alias>. È obbligatorio per <activity-alias> sebbene non debba nominare una classe esistente. La cosa divertente è che il progetto si compila senza problemi.


1

Il mio problema era il seguente:

Stavo specificando le mie autorizzazioni nel modo seguente e non funzionava.

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

Funzionava bene quando l'ho cambiato come segue:

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

1

Ho riscontrato questo errore perché avevo la riga sottostante.

android:protectionLevel="developer"

Dopo averlo cambiato in

android:protectionLevel="signature"

il problema è stato risolto


1

Dopo aver lottato con questo problema, ho scoperto che tutti i valori che vengono utilizzati come valore di risorsa stringa (aka @ string /) nei manifesti (delle librerie che stai utilizzando anche tu), non possono far parte di strings.xml delle localizzazioni . Esempio: se il file manifesti utilizza @ string / app_name, la definizione di stringa / app_name è consentita solo nei valori predefiniti / strings.xml e non nel file string.xml alternativo fornito per le localizzazioni. Spero che aiuti..


1

Ho avuto lo stesso errore. Non avevo caratteri maiuscoli nel nome del mio pacchetto / applicazione e pulire il progetto e anche altre soluzioni non mi hanno aiutato. dopotutto ho creato un nuovo progetto e copiato le mie cose in quello nuovo passo dopo passo e controllo se il problema si presenta. dopo tutto ho avuto un bel progetto privo di errori senza alcuna ridondanza. a volte è difficile trovare l'origine di questo errore, quindi è più facile adottare un altro approccio.

spero che questo aiuti qualcuno!


1

Ho riscontrato questo errore quando ho inserito la classe Application in un pacchetto sbagliato!



1

Utilizzare android:resourcein <meta-data>invece di android:srceandroid:srcCompat


1

So che è tardi per rispondere qui ma faccio uno strano errore, quindi pubblica la mia risposta se aiuta qualcuno, Nel mio caso per errore ho aggiunto l'attività di avvio principale come 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>

Quindi, quando provo a eseguire la mia app, viene visualizzato un errore

Errore durante l'installazione dell'APK

Errore [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Ho appena rimosso la parola "-alias" dalla registrazione dell'attività e la mia app viene avviata correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.