Androidデバイスに存在する/インストールされているすべてのアプリケーションをリストする小さなアプリケーションを開発しています。しかし、コードを実行しようとすると、以下のエラーが発生します。
インストールエラー:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
このエラーを解決するのを手伝ってください。
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 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とソースをざっと見回す必要があるのは残念です。
IntentFilter.MalformedMimeTypeException
私が逃したことをしました。
私は同じ問題を抱えていますが、このようなプロセスを呼び出すと:
<service
android:name="com.dexode.tama.AppService"
android:process="screen" >
</service>
次のように変更した場合:
<service
android:name="com.dexode.tama.AppService"
android:process=":screen" >
</service>
すべてが機能し始めます。
などの任意の名前はandroid:name
、android:process
パッケージ名の形式でなければなりません:で始まるa..z
、と他の人とのコンバイン.
で終わりません、.
...
android:process="com.my_pack.services.MyServiceProcess"
(com.my_pack.servicesは私のサービスがあるパッケージです)そしてその後インストールエラーは表示されません。
ローカリゼーションを追加した後、同じ問題が発生しました
<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_name
engロケールを除くすべてのファイルから削除した後、すべてが再び機能しました
以下のコードのため、このエラーが発生しました
<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="*/*"
修正するように変更したとき。
マニフェストで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" />
次に、プロジェクトをクリーンアップして、アプリを再インストールします。
私の場合、次のような属性を使用してアイコンを参照していました。
<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 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" />
それが、より低いバージョンのデバイスでも機能するようにするために実行しなければならないすべての変更でした。
ターゲットは、<activity>
指定する必要があります前に<activity-alias>
。
私の場合、原因は<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" />
Applicationクラスを間違ったパッケージに入れると、このエラーに直面しました!
タグの構文規則に従っていない可能性があります。例えば:
<meta-data
android:name="preloaded_fonts"/>
このタグは不完全なため、このエラーが発生します。
私はここで答えるのが遅いことを知っていますが、私は奇妙な間違いを犯しているので、誰かを助ける場合は私の答えを投稿します、私の場合、誤ってメインランチャーアクティビティをエイリアスとして追加しました
<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」という単語を削除するだけで、アプリが正常に起動します。