web-dev-qa-db-ja.com

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

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

インストールエラー:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

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

83
S.P

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

66

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

Android:taskAffinity="string" 

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

Android:taskAffinity=".string" 
64
Andy

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

Com.Example.packagename

私はそれを次のようなものに変更した後

com.example.packagename

解決されました

39
Samuel

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 authority 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とソースを調べなければならないのは残念です。

27
Ribo

マニフェストファイルでアクティビティ名を確認します

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

<activity Android:name="MainActivity"></activity>
9
Diptendu

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

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

に変更するとき:

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

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

9
Dawid Drozd

Android docs で同じ問題に遭遇しました。「:」を使用しない場合、 Android:processの接頭辞は小文字を使用する必要がありますが、彼らはそれを言ったことがないので、それはcom.company.app.services.MyServiceのようなプロセス名のようなパッケージでなければなりません

8
4gus71n

Android:nameAndroid:processなどの名前は、パッケージ名の形式にする必要があります。a..zで始まり、.で他と結合し、.で終わらない...

7
user942821

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

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

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

7
Ymabob

ローカライズを追加した後、同じ問題が発生します

<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つに誤って渡されました(新しいファイルにのみ出現しました)。すべてのローカライズを確認し、engロケールを除くすべてのファイルから@string/version_nameを削除した後、すべてが再び機能しました

2
vir us

同じエラーが発生しました!空の許可タグがあり、それが問題の原因でした!

2
bhumika singh
<activity/>

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

<activity-alias/>
2
Ajvo

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

<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="*/*"に変更すると、このエラーが修正されました。

2
Ke Di

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

2
Dan Fabulich

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

1
Khan

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

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

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

1
M.Sameer

<activity-alias>ターゲット<activity>を指定する必要がありますbeforeエイリアス。

1
Eugen Pechanec

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

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

OR

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

その後、プロジェクトをクリーンアップし、アプリを再インストールします。

1
Sam

つかいます Android:resource in <meta-data> の代わりに Android:srcおよびAndroid:srcCompat

0
Bibin Johny

ここで答えるのが遅いのは知っていますが、奇妙な間違いをするので、誰かを助ければ答えを投稿してください。

   <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" Wordを削除し、アプリを正常に起動しました。

0
Ajay Pandya

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

0
Gena Batsyan

私はまったく同じエラーがありました。パッケージ/アプリケーション名に大文字が含まれていなかったため、プロジェクトをクリーンアップしたり、他のソリューションも役に立たなかった。結局私は新しいプロジェクトを作成し、私のものを一歩一歩新しいものにコピーして、問題がポップアップするかどうかを確認します。結局のところ、冗長性のない素敵でエラーのないプロジェクトがありました。このエラーの原因を見つけるのが難しい場合があるため、別のアプローチをとる方が簡単です。

これが誰かの助けになることを願っています!

0
Mehran Zamani

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

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

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

新しいアプリケーションを作成し、ターゲットをAndroid Pieにします。すべてがうまく機能していたので、最近、アプリケーションがAndroid Naught以前のバージョン of 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" />

それはすべて、以前のバージョンのデバイスでも動作させるために実行しなければならなかった変更です。

0
Harpreet

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

0
Ozzz

タグの構文規則に従っていない可能性があります。例えば:

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

このタグは不完全であり、このエラーが発生します。

アプリマニフェストの概要

0
gadolf

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

Android:protectionLevel="developer"

に変更した後

Android:protectionLevel="signature"

問題が解決しました

0
Swalih

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

0
farhad.kargaran

奇形であるがIDEで強調表示されていない他のファイルが存在する可能性があります。たとえば、ラベルのようなものについてマニフェストが参照するかもしれないres/values/stringsです。

0
m_cheung