Installationsfehler: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?

93

Ich entwickle eine kleine Anwendung, die alle auf dem Android-Gerät vorhandenen / installierten Anwendungen auflistet. Aber ich erhalte die folgende Fehlermeldung, während ich versuche, den Code auszuführen.

Installationsfehler: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

Bitte kann mir jemand helfen, diesen Fehler zu beheben.

SP
quelle
1
Es gibt viele Fehler in der Datei manifest.xml, die diesen Fehlercode verursachen können (siehe Antwort auf die PackageParser.java-Fehlerliste unten).
Ribo
1
Sie haben keine Antwort akzeptiert?
Schildgenerator7
Folgen Sie diesem Link Sie erhalten Ihre Antwort stackoverflow.com/questions/16015033/…
Sritam Jagadev
Überprüfen Sie diesen Link für eine klare Antwort
Vishnuvathsan
Wenn Sie verschiedene Pakete und Klassen in Ihrem Projekt haben. Ändern Sie den Paketnamen von Großbuchstaben in Kleinbuchstaben. Der Paketname sollte mit Kleinbuchstaben beginnen
Waheed Akhtar

Antworten:

79

Es könnte einen anderen Grund für diesen Fehler geben. Das Attribut

android:taskAffinity="string" 

Sollte immer mit einem Punkt beginnen, wie:

android:taskAffinity=".string" 
Andy
quelle
3
Problem für mich gelöst, aber wo finde ich diese Informationen in der Dokumentation? Es gibt nichts über einen Punkt hier: developer.android.com/guide/topics/manifest/…
Beto Caldas
68

Dem Aktivitätsnamen sollte "." Vorangestellt werden. in Ihrer Manifestdatei.

suresha Chilukuri
quelle
In Manifest haben Sie das Paketattribut mit package deklariert. Wenn Sie also eine Aktivität erstellen, geben Sie "." Vor dem Paketnamen können Sie auch den vollständigen Namen der Aktivität eingeben, z. B.: "com.example.test.Activity_Name" oder ".Activity_Name"
Amt87
42

Ich hatte diesen Fehler, weil ich so Großbuchstaben in meinem Paketnamen hatte

Com.Example.packagename

nachdem ich es in so etwas geändert hatte

com.example.packagename

es wurde gelöst

Samuel
quelle
Das hat mein Problem gelöst. Meine Aktivitätsklasse befand sich unter einem Paket namens Aktivitäten, und ich füge es dem Manifest hinzu, bevor dieser Fehler auftrat. Als ich den Namen des Aktivitätenpakets in Aktivitäten änderte, wurde es gelöst. Danke
Alicanbatur
2
Ich denke, Sie können Großbuchstaben im Paketnamen haben, aber der erste Buchstabe im Paketnamen kann kein Großbuchstabe sein. Also "myActivity" = OK, aber "MyActivity" = nicht OK
Gene
29

Der Fehlercode INSTALL_PARSE_FAILED_MANIFEST_MALFORMED wird von PackageParser.java zurückgegeben, wenn eine große Anzahl von Fehlern in der Datei manifest.xml erkannt wird.

Um den Fehler zu isolieren, schauen Sie in logcat nach (wenn Sie den Befehl 'adb install foo.apk' ausführen). In dem Problem, auf das ich gestoßen bin, enthielt logcat:

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

In der vierten Zeile oben sehen Sie, dass PackageParser sich darüber beschwert, dass Zeile 214 der Datei manifest.xml "<Anbieter> enthält kein Berechtigungsattribut" . In der folgenden Liste sind alle Fälle in PackageParser aufgeführt, die diesen Fehlercode zurückgeben. (PackageParser ist die einzige Klasse, die den Fehlercode PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED erzeugt.)

In meinem Fall wird die Nachricht "<Anbieter> enthält kein Berechtigungsattribut" in Zeile 2490 von PackagerParser.java in der von parseApplication aufgerufenen Funktion parseProvider erzeugt.


Ab der Version 4.1.1 von Frameworks / base / core / java / android / content / pm / PackageParser.java wird in diesen Methoden in diesen Zeilen auf PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED verwiesen. Wenn auf die Zeilennummer des Quellcodes eine Zeichenfolge in Anführungszeichen folgt, handelt es sich um die in logcat gedruckte Nachricht. Wenn auf die Zeilennummer ein Java-Ausdruck folgt, der der Code ist, der die Rückgabe dieses Fehlercodes verursacht hat, sollte diese Funktion untersucht werden, um festzustellen, warum die Fehlermeldung zurückgegeben wurde. In einigen Fällen konnte ich die Fehlerursache nicht auf einen bestimmten Methodenaufruf beschränken.

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 ist bedauerlich, dass Sie in logcat und der Quelle herumstöbern müssen, um herauszufinden, was ein Problem verursacht.

Ribo
quelle
1
Vielen Dank, dass Sie uns dabei helfen, das allgemeine Problem zu lösen und eine spezifische Lösung zu finden.
Vinay W
1
Für diese Ausnahme gibt es mehrere Gründe. Dies ist die logischste Antwort.
Meghal Shah
1
Danke - in meinem Fall hatte ich eine IntentFilter.MalformedMimeTypeException, die ich verpasst habe.
CzarMatt
Dies ist bei weitem die richtige Antwort. Wie nützlich ist Logcat?
Krishnabhadra
10

Überprüfen Sie Ihren Aktivitätsnamen in der Manifestdatei

oder der Paketname in der Hauptaktivität / Klasse

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

Ich habe das gleiche Problem, aber wenn ich den Prozess wie folgt aufrufe:

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

Wenn ich zu:

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

Alles beginnt zu funktionieren.

Dawid Drozd
quelle
2
Durch Hinzufügen des ':' haben Sie die Semantik des Codes geändert. Im zweiten Fall erstellt die Anwendung einen neuen Prozess für den Dienst, der nur für diese Anwendung verfügbar ist. developer.android.com/guide/topics/manifest/… . Stattdessen kann der Fehler behoben werden, indem der vollständige Paketname anstelle des Wortes "Bildschirm" angegeben wird.
Shshnk
10

Ich bin vor einiger Zeit auf dasselbe Problem gestoßen. In den Android- Dokumenten wurde gesagt, wenn Sie nicht ":" als Präfix verwenden android:process, sollten Sie einen Kleinbuchstaben verwenden, aber das haben sie nie gesagt, dann sollte es ein paketähnlicher Prozess sein Name, wiecom.company.app.services.MyService

4gus71n
quelle
1
Sogar ich hatte das gleiche Problem. Sie hätten erwähnen sollen, dass wir den Paketnamen
angeben
8

Jeder Name wie android:name, android:processsollte in Form von Paketnamen sein: beginnt mit a..z, kombiniert mit anderen mit ., am Ende nicht mit ....


quelle
@IgorG. Entschuldigung, ich habe meinen Punkt verloren :-( Aber das neue SDK hat dieses Feld entfernt ( hier ).
1
Danke dir. Ich habe einen Prozess folgendermaßen aufgerufen: android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services ist das Paket, in dem sich mein Dienst befindet) und der Installationsfehler wird danach nicht mehr angezeigt.
Maksim Dmitriev
8

Mein Problem war, dass ich geschrieben hatte (Beachten Sie das - vs. das _):

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

unter einer Aktivität. Dies könnte auch die Ursache für Ihr Problem sein.

Ymabob
quelle
3

Habe den gleichen Fehler! hatte ein leeres Berechtigungs-Tag und das verursachte das Problem!

Bhumika Singh
quelle
Bitte fügen Sie etwas mehr Details zu Ihrer Antwort hinzu
Koloss
3

Nach dem Hinzufügen von Lokalisierungen tritt das gleiche Problem auf

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

Die Zeichenfolge wurde @string/version_nameversehentlich in eine der neu hinzugefügten lokalisierten Zeichenfolgendateien übergeben (sie wurde nur in den neuen Dateien angezeigt). Nachdem alle Lokalisierungen überprüft und @string/version_nameaus jeder Datei mit Ausnahme des Gebietsschemas entfernt wurden, funktionierte alles wieder

Virus
quelle
3

Lesen Sie die Protokolle Ihres Android-Geräts, um diesen Fehler zu diagnostizieren. Erwarten Sie eine Zeile "W / PackageParser", in der das Problem erläutert wird.

Dan Fabulich
quelle
3
<activity/>

muss VOR definiert werden

<activity-alias/>
Ajvo
quelle
Ich wünschte, ich könnte dies wieder verbessern.
Zum
3

Ich hatte diesen Fehler, weil der Code unten

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

Als ich geändert habe, android:mimeType="*"um android:mimeType="*/*"diesen Fehler zu beheben.

Ke Di
quelle
3

Der von der Aktivität erstellte Namensordner muss aus Kleinbuchstaben bestehen. Verwenden Sie keine Großbuchstaben für den Namen des Aktivitätsordners. Es ist immer besser, Kleinbuchstaben zu verwenden.

Khan
quelle
3

Dies kann viele Gründe haben, aber für mich wurde es gelöst, indem der Name des Pakets durch einen Kleinbuchstaben geändert wurde (Paketname war Aktivitäten, gelöst mit Aktivitäten).

Alex
quelle
2

Wenn Sie Multidex im Manifest verwenden, sollte es mit Wert oder Ressource hinzugefügt werden. Mögen..

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

ODER

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

Bereinigen Sie dann das Projekt und installieren Sie die App neu.

Sam
quelle
2

In meinem Fall bezog ich mich auf ein Symbol mit einem Attribut wie dem folgenden:

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

anstelle des Drawable:

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

Ich verwende dieses Attribut an mehreren Stellen, aber es scheint nicht im Manifest zu funktionieren.

M.Sameer
quelle
Genau mein Fall. Ich brauche eine andere Farbe, abhängig von den Vorlieben des Benutzers. Leider akzeptiert Android: Ressource keine Attribute ...
Elyakim Levi
2

Ich erstelle eine neue Anwendung und ziele auf Android Pie ab . Alles hat gut und gut funktioniert. In letzter Zeit stellte ich fest, dass meine Anwendung nicht auf Android Naught und einer niedrigeren Version installiert werden kann von Android OS .

Während der Installation wird eine Fehlermeldung angezeigt

Die Installation ist mit der Nachricht INSTALL_PARSE_FAILED_MANIFEST_MALFORMED fehlgeschlagen.

Die von mir vorgenommenen Korrekturen lauten wie folgt und müssen alle nur in einer AndroidManifest.xmlDatei durchgeführt werden.

Für Aktivität, Service, Empfänger und alles

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

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

Für Manifest-Berechtigungen

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

Das waren alles Änderungen, die ich vornehmen musste, damit es auch für Geräte niedrigerer Versionen funktioniert.

Harpreet
quelle
In Xamarin android auf Aktivitätsname Attribut behoben. Das ist Arbeit für mich
Sovary
2

Das Ziel <activity>muss vor dem angegeben werden <activity-alias>.

Eugen Pechanec
quelle
1

Es kann andere Dateien geben, die fehlerhaft sind, aber in der IDE nicht hervorgehoben sind, z. B. die res / values ​​/ strings, auf die das Manifest möglicherweise für Beschriftungen verweist.

m_cheung
quelle
1

In meinem Fall war die Ursache das Fehlen des Attributs android: name in <Aktivitätsalias>. Es ist für <Aktivitätsalias> obligatorisch, darf jedoch keine vorhandene Klasse benennen. Lustige Sache ist - das Projekt kompiliert ohne Probleme.

Gena Batsyan
quelle
1

Mein Problem war wie folgt:

Ich habe meine Berechtigungen folgendermaßen angegeben und es hat nicht funktioniert.

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

Es hat gut funktioniert, als ich es wie folgt geändert habe:

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

Ich hatte diesen Fehler, weil ich die Zeile unten hatte.

android:protectionLevel="developer"

Nachdem ich es geändert habe

android:protectionLevel="signature"

Problem wurde gelöst

Swalih
quelle
1

Nachdem ich mit diesem Problem zu kämpfen hatte, stellte ich fest, dass alle Werte, die als String-Ressourcenwert (auch bekannt als @ string /) in den Manifesten (der Bibliotheken, die Sie ebenfalls verwenden) verwendet werden, nicht Teil der Datei strings.xml von Lokalisierungen sein dürfen . Beispiel: Wenn Ihre Manifest-Datei @ string / app_name verwendet, ist die Definition von string / app_name nur in Ihren Standardwerten / strings.xml und nicht in der alternativen string.xml-Datei zulässig, die Sie für Lokalisierungen bereitstellen. Ich hoffe das hilft..

Ozzz
quelle
1

Ich hatte den gleichen Fehler. Ich hatte kein Großbuchstaben in meinem Paket- / Anwendungsnamen und bereinigte das Projekt und andere Lösungen halfen mir auch nicht weiter. Immerhin habe ich ein neues Projekt erstellt und meine Sachen Schritt für Schritt in das neue kopiert und überprüft, ob das Problem auftaucht. Immerhin hatte ich ein schönes und fehlerfreies Projekt ohne Redundanz. Manchmal ist es schwierig, die Ursache für diesen Fehler zu finden, sodass es einfacher ist, einen anderen Ansatz zu wählen.

Ich hoffe das hilft jemandem!

Mehran Zamani
quelle
1

Ich bin auf diesen Fehler gestoßen, als ich die Anwendungsklasse in ein falsches Paket gesteckt habe!

farhad.kargaran
quelle
1

Sie haben wahrscheinlich die Syntaxregeln eines Tags nicht befolgt. beispielsweise:

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

Dieses Tag ist unvollständig und verursacht diesen Fehler.

App Manifest Übersicht

Gadolf
quelle
1

Verwenden Sie android:resourcein <meta-data>anstelle von android:srcundandroid:srcCompat

Bibin Johny
quelle
1

Ich weiß, dass es spät ist, hier zu antworten, aber ich mache einen seltsamen Fehler, also poste meine Antwort, wenn es jemandem hilft. In meinem Fall habe ich versehentlich die Hauptstartaktivität als Alias ​​hinzugefügt

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

Wenn ich also versuche, meine App auszuführen, wird ein Fehler angezeigt

Fehler bei der Installation von APK

Fehler [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

Ich entferne einfach das Wort "-alias" aus der Aktivitätsregistrierung und meine App wird erfolgreich gestartet.

Ajay Pandya
quelle