Androidデバイスに存在/インストールされているすべてのアプリケーションをリストする小さなアプリケーションを開発しています。しかし、コードを実行しようとすると、以下のエラーが表示されます。
インストールエラー:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
誰でもこのエラーを解決するのを手伝ってください。
アクティビティ名の前には「。」を付ける必要がありますマニフェストファイル内。
このエラーには別の理由が考えられます。属性
Android:taskAffinity="string"
次のように、常にドットで始まる必要があります。
Android:taskAffinity=".string"
このエラーは、パッケージ名に次のように大文字が含まれていたために発生していました。
Com.Example.packagename
私はそれを次のようなものに変更した後
com.example.packagename
解決されました
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とソースを調べなければならないのは残念です。
マニフェストファイルでアクティビティ名を確認します
またはメインアクティビティ/クラスのパッケージ名
<activity Android:name="MainActivity"></activity>
私は同じ問題を抱えていますが、このようなプロセスを呼び出すと:
<service
Android:name="com.dexode.tama.AppService"
Android:process="screen" >
</service>
に変更するとき:
<service
Android:name="com.dexode.tama.AppService"
Android:process=":screen" >
</service>
すべてが機能し始めます。
Android docs で同じ問題に遭遇しました。「:」を使用しない場合、 Android:process
の接頭辞は小文字を使用する必要がありますが、彼らはそれを言ったことがないので、それはcom.company.app.services.MyService
のようなプロセス名のようなパッケージでなければなりません
Android:name
、Android:process
などの名前は、パッケージ名の形式にする必要があります。a..z
で始まり、.
で他と結合し、.
で終わらない...
私の問題は、私が書いたということでした(注意-対_):
<meta_data ... />
<!-- instead of -->
<meta-data ... />
活動中。これも問題の原因である可能性があります。
ローカライズを追加した後、同じ問題が発生します
<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
を削除した後、すべてが再び機能しました
同じエラーが発生しました!空の許可タグがあり、それが問題の原因でした!
<activity/>
前に定義する必要があります
<activity-alias/>
以下のコードのため、このエラーが発生しました
<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="*/*"
に変更すると、このエラーが修正されました。
Androidデバイスログを読んでこのエラーを診断してください。問題を説明する「W/PackageParser」行が必要です。
アクティビティ作成名フォルダは小文字である必要があります。アクティビティフォルダ名に大文字を使用しないでください....常に小文字を使用することをお勧めします。
私の場合、次のような属性を使用してアイコンを参照していました。
<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" />
私はこの属性をいくつかの場所で使用していますが、マニフェストでは機能しないようです。
<activity-alias>
ターゲット<activity>
を指定する必要がありますbeforeエイリアス。
マニフェストで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" />
その後、プロジェクトをクリーンアップし、アプリを再インストールします。
つかいます Android:resource
in <meta-data>
の代わりに Android:src
およびAndroid:srcCompat
ここで答えるのが遅いのは知っていますが、奇妙な間違いをするので、誰かを助ければ答えを投稿してください。
<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を削除し、アプリを正常に起動しました。
私の場合、原因は<activity-alias>にAndroid:name属性がないことです。 <activity-alias>には必須ですが、既存のクラスに名前を付けることはできません。面白いのは、プロジェクトが問題なくコンパイルされることです。
私はまったく同じエラーがありました。パッケージ/アプリケーション名に大文字が含まれていなかったため、プロジェクトをクリーンアップしたり、他のソリューションも役に立たなかった。結局私は新しいプロジェクトを作成し、私のものを一歩一歩新しいものにコピーして、問題がポップアップするかどうかを確認します。結局のところ、冗長性のない素敵でエラーのないプロジェクトがありました。このエラーの原因を見つけるのが難しい場合があるため、別のアプローチをとる方が簡単です。
これが誰かの助けになることを願っています!
私の問題は次のとおりでした。
次の方法で権限を指定していましたが、機能していませんでした。
<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" />
新しいアプリケーションを作成し、ターゲットを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" />
それはすべて、以前のバージョンのデバイスでも動作させるために実行しなければならなかった変更です。
この問題に苦労した後、(使用しているライブラリの)マニフェストで文字列リソース値(別名@ string /)として使用されるすべての値は、ローカライズのstring.xmlの一部として許可されないことがわかりました。例:@ string/app_nameを使用してマニフェストファイルを作成する場合、string/app_nameの定義はデフォルト値/strings.xmlでのみ許可され、ローカライズに提供する代替string.xmlファイルでは許可されません。それがお役に立てば幸いです。
タグの構文規則に従っていない可能性があります。例えば:
<meta-data
Android:name="preloaded_fonts"/>
このタグは不完全であり、このエラーが発生します。
以下の行があるため、このエラーが発生していました。
Android:protectionLevel="developer"
に変更した後
Android:protectionLevel="signature"
問題が解決しました
Applicationクラスを間違ったパッケージに入れると、このエラーに直面しました!
奇形であるがIDEで強調表示されていない他のファイルが存在する可能性があります。たとえば、ラベルのようなものについてマニフェストが参照するかもしれないres/values/stringsです。