インストールエラー:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


93

Androidデバイスに存在する/インストールされているすべてのアプリケーションをリストする小さなアプリケーションを開発しています。しかし、コードを実行しようとすると、以下のエラーが発生します。

インストールエラー:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

このエラーを解決するのを手伝ってください。


1
manifest.xmlファイルには、このエラーコードを引き起こす可能性のある多くのエラーがあります。以下のPackageParser.javaエラーリストの回答を参照してください。
Ribo

1
あなたは答えを受け入れませんでしたか?
shieldgenerator7

あなたはあなたの答えを得るでしょう。このリンクに従い stackoverflow.com/questions/16015033/...を
Sritam Jagadev

明確な回答については、このリンクを確認してください
Vishnuvathsan 2015年

プロジェクトに異なるパッケージとクラスがある場合。パッケージ名を大文字から小文字に変更します。パッケージ名は小文字で始める必要があります
Waheed Akhtar

回答:


79

このエラーには別の理由が考えられます。属性

android:taskAffinity="string" 

次のように、常にドットで始める必要があります。

android:taskAffinity=".string" 

3
問題は解決しましたが、この情報はドキュメントのどこにありますか?DOTについては何もここにありません:developer.android.com/guide/topics/manifest/...
ベトカルダス

68

アクティビティ名の先頭には「。」を付ける必要があります マニフェストファイル内。


マニフェストでは、パッケージ属性をパッケージで宣言したので、アクティビティを作成するときに「。」を入れます。パッケージ名の前に、「com.example.test.Activity_Name」、「。Activity_Name」などのアクティビティの完全な名前を入力することもできます
Amt87

42

このようにパッケージ名に大文字が含まれていたため、このエラーが発生していました

Com.Example.packagename

それを次のように変更した後

com.example.packagename

解決しました


これは私の問題を解決しました。私のアクティビティクラスはアクティビティと呼ばれるパッケージの下にあり、このエラーが表示される前にマニフェストに追加しました。アクティビティパッケージ名をアクティビティに変更すると解決しました。ありがとう
alicanbatur 2013年

2
パッケージ名には大文字を使用できますが、パッケージ名の最初の文字を大文字にすることはできません。したがって、「myActivity」= OKですが、「MyActivity」= Not OK
Gene

29

INSTALL_PARSE_FAILED_MANIFEST_MALFORMEDエラーコードは、manifest.xmlファイルで多数のエラーを検出すると、PackageParser.javaによって返されます。

エラーを特定するには、logcatを調べます( 'adb install foo.apk'コマンドを実行した場合)。私が遭遇した問題では、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

上記の4行目では、PackageParserがmanifest.xmlファイルの214行目「<provider>に権限属性が含まれていない」というメッセージが表示されていることがわかります。そのエラーコードを返すPackageParserのすべてのケースの以下のリストを参照してください。(PackageParserは、PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMEDエラーコードを生成する唯一のクラスです)

私の場合、「<provider> does not include sources attribute」というメッセージは、parseApplicationによって呼び出されるparseProvider関数のPackagerParser.javaの2490行で生成されます。


frameworks / base / core / java / android / content / pm / PackageParser.javaの4.1.1バージョンから、PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMEDは、これらのメソッドのこれらの行で参照されます。ソースコードの行番号の後に、logcatに出力されるメッセージである引用符付き文字列が続く場合。行番号の後に、エラーコードが返される原因となったコードであるJava式が続く場合、その関数を調査して、エラーメッセージが返される原因を確認する必要があります。いくつかのケースでは、エラーの原因を特定のメソッド呼び出しに特定できませんでした。

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

何が問題の原因であるかを理解するために、logcatとソースをざっと見回す必要があるのは残念です。


1
特定のソリューションを提供することに加えて、一般的な問題を解決する方法を理解するのを助けてくれてありがとう。
Vinay W

1
この例外には複数の理由があります。これが最も論理的な答えです。
Meghal Shah、2015

1
ありがとう-私の場合、私はIntentFilter.MalformedMimeTypeException私が逃したことをしました。
CzarMatt 2016年

これは正解です。logcatはどの程度役に立ちますか?
Krishnabhadra 2016年

10

マニフェストファイルでアクティビティ名を確認してください

またはメインアクティビティ/クラスのパッケージ名

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

10

私は同じ問題を抱えていますが、このようなプロセスを呼び出すと:

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

次のように変更した場合:

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

すべてが機能し始めます。


2
「:」を追加することで、コードのセマンティクスを変更しました。2番目のケースでは、アプリケーションはそのアプリケーションでのみ使用可能なサービスの新しいプロセスを作成します。developer.android.com/guide/topics/manifest/…。代わりに、「画面」という単語だけでなく、完全なパッケージ名を指定することでエラーを修正できます。
shshnk

10

私は前に同じ問題に遭遇しました、彼らはアンドロイドのドキュメントでプレフィックスとして「:」を使用しないandroid:process場合は小文字を使用するべきだと言っていましたが、彼らは決してそれを言っていなかったので、それはプロセスのようなパッケージであるべきです名前などcom.company.app.services.MyService


1
私も同じ問題を抱えていました。彼らは、「:」を使用しない場合のパッケージ名を含める必要があることについて言及しているはずです
shshnk

8

などの任意の名前はandroid:nameandroid:processパッケージ名の形式でなければなりません:で始まるa..z、と他の人とのコンバイン.で終わりません、....


@IgorG。申し訳ありませんが、私は私のポイントを失った:-(しかし、新しいSDKは(そのフィールドを削除し、ここで)。

1
ありがとうございました。私はそのような方法でプロセスを呼び出しました:android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.servicesは私のサービスがあるパッケージです)そしてその後インストールエラーは表示されません。
マクシムドミトリエフ2013

8

私の問題は、私が書いたことでした(通知-対_):

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

活動中。これも問題の原因である可能性があります。



3

ローカリゼーションを追加した後、同じ問題が発生しました

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

文字列@string/version_nameが、新しく追加されたローカライズされた文字列ファイルの1つに誤って渡されました(新しいファイルにのみ表示されます)。すべてのローカリゼーションをチェックし、@string/version_nameengロケールを除くすべてのファイルから削除した後、すべてが再び機能しました


3

Androidデバイスのログを読んで、このエラーを診断してください。問題を説明する「W / PackageParser」行が必要です。


3
<activity/>

前に定義する必要があります

<activity-alias/>

これをもう一度賛成できればいいのに。2番目にこの回答が
役に立ち

3

以下のコードのため、このエラーが発生しました

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

このエラーandroid:mimeType="*"android:mimeType="*/*"修正するように変更したとき。


3

アクティビティ作成の名前フォルダーは小文字にする必要があります。アクティビティフォルダー名には大文字を使用しないでください...常に小文字を使用することをお勧めします。


3

これには多くの理由が考えられますが、私にとっては、パッケージ名を小文字に変更することで解決しました(パッケージ名は、Activitiesで解決されました)。


2

マニフェストでmultidexを使用している場合は、値またはリソースを追加する必要があります。お気に入り..

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

または

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

次に、プロジェクトをクリーンアップして、アプリを再インストールします。


2

私の場合、次のような属性を使用してアイコンを参照していました。

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

ドローアブルの代わりに:

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

この属性をいくつかの場所で使用していますが、マニフェストでは機能しないようです。


まさに私の場合。ユーザーの好みに応じて色を変える必要があります。残念ながら、android:resourceは属性を受け入れません...
Elyakim Levi

2

新しいアプリケーションを作成し、Android Pieをターゲットにします。すべてが順調に機能していて、最近、私のアプリケーションがAndroid Naughtおよびそれ以下のバージョンのAndroid OSにインストールされないことがわかりました。

インストール中にエラーメッセージが表示される

インストールはメッセージINSTALL_PARSE_FAILED_MANIFEST_MALFORMEDで失敗しました。

だから私が行った修正は次のとおりであり、それらはすべてAndroidManifest.xmlファイルでのみ実行する必要があります。

活動、サービス、レシーバーなど

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

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

マニフェスト権限の場合

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

それが、より低いバージョンのデバイスでも機能するようにするために実行しなければならないすべての変更でした。


Xamarinでは、アクティビティ名属性のAndroidが修正されました。それが私の仕事です
Sovary


1

マニフェストがラベルなどについて参照する可能性があるres / values / stringsなど、不正な形式のファイルがIDEで強調表示されていない可能性があります。


1

私の場合、原因は<activity-alias>にandroid:name属性がないことでした。<activity-alias>には必須ですが、既存のクラスを指定することはできません。面白いことは-プロジェクトは問題なくコンパイルされます。


1

私の問題は次のとおりでした:

私は次の方法で権限を指定していましたが、機能しませんでした。

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

次のように変更したところ、問題なく動作しました。

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

1

以下の行があるため、このエラーが発生していました。

android:protectionLevel="developer"

に変更した後

android:protectionLevel="signature"

問題は解決しました


1

この問題に取り組んだ後、マニフェスト(使用しているライブラリのマニフェスト)で文字列リソース値(別名@ string /)として使用されているすべての値は、ローカリゼーションのstrings.xmlの一部として許可されていないことがわかりました。例:@ string / app_nameを使用するマニフェストファイルの場合、string / app_nameの定義はデフォルト値/strings.xmlでのみ許可され、ローカリゼーション用に提供する代替のstring.xmlファイルでは許可されません。お役に立てば幸いです。


1

まったく同じエラーが発生しました。パッケージ/アプリケーション名に大文字が含まれていなかったため、プロジェクトをクリーンアップしましたが、他の解決策も役に立ちませんでした。結局、私は新しいプロジェクトを作成し、自分のものを1つずつ新しいものにコピーし、問題がポップアップするかどうかを確認します。結局、冗長性のない、エラーのない素敵なプロジェクトができました。場合によっては、このエラーの原因を見つけるのが難しいため、別のアプローチを取る方が簡単です。

これが誰かに役立つことを願っています!


1

Applicationクラスを間違ったパッケージに入れると、このエラーに直面しました!




1

私はここで答えるのが遅いことを知っていますが、私は奇妙な間違いを犯しているので、誰かを助ける場合は私の答えを投稿します、私の場合、誤ってメインランチャーアクティビティをエイリアスとして追加しました

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

アプリを実行しようとするとエラーが発生します

APKのインストール中のエラー

失敗[INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

アクティビティ登録から「-alias」という単語を削除するだけで、アプリが正常に起動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.