Ответ 1
Название действия должно иметь префикс ".". в файле манифеста.
Я разрабатываю небольшое приложение, в котором перечислены все приложения, присутствующие/установленные на устройстве Android. Но я получаю ошибку ниже, пока я пытаюсь запустить код.
Ошибка установки: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
Пожалуйста, помогите мне разобраться с этой ошибкой.
Название действия должно иметь префикс ".". в файле манифеста.
У этой ошибки может быть другая причина. Атрибут
android:taskAffinity="string"
Всегда следует начинать с точки, например:
android:taskAffinity=".string"
У меня была эта ошибка, потому что у меня были заглавные буквы в имени моего пакета, подобном этому
Com.Example.packagename
после того, как я изменил его на что-то вроде
Com.Example.packagename
было решено
Код ошибки INSTALL_PARSE_FAILED_MANIFEST_MALFORMED возвращается PackageParser.java когда он обнаруживает любое из большого количества ошибок в файле manifest.xml.
Чтобы изолировать ошибку, посмотрите в 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
В четвертой строке выше вы можете видеть, что PackageParser жалуется, что строка # 214 файла manifest.xml "< поставщик > не включает атрибут полномочий. См. Список ниже всех случаев в PackageParser, который возвращает этот код ошибки. (PackageParser - единственный класс, который создает код ошибки PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED)
В моем случае сообщение "<provider> не включает атрибут полномочий" создается по линии 2490 PackagerParser.java в функции parseProvider, вызванной parseApplication.
В версии 4.1.1 frameworks/base/core/java/android/content/pm/PackageParser.java в этих строках этих методов упоминается 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
случайно перешла в один из новых добавленных локализованных строковых файлов (она появилась только в новых файлах).
После проверки всех локализаций и удаления @string/version_name
из каждого файла, кроме русского языка, все снова работало
Прочтите свои журналы устройств Android, чтобы диагностировать эту ошибку. Ожидайте строку "W/PackageParser", объясняющую проблему.
<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="*/*"
, исправил эту ошибку.
Если вы используете 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" />
затем очистите проект и переустановите приложение.
<activity-alias>
target <activity>
должен быть указан перед псевдонимом.
В моем случае я имел в виду значок с атрибутом, подобным этому:
<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" />
Я использую этот атрибут в нескольких местах, но кажется, что он не работает в манифесте.
активность, созданная папкой имен, должна быть маленькими буквами. Не используйте заглавные буквы для имени папки активности... всегда лучше использовать маленькие буквы.
Могут быть другие файлы, которые были искажены, но не выделены в среде IDE, например res/values /string, которые манифест может ссылаться на такие вещи, как метки.
В моем случае причиной было отсутствие атрибута android: name в < псевдоним активности > . Это необходимо для < псевдоним активности, хотя он не должен называть существующий класс. Забавно - проект компилируется без проблем.
Моя проблема была следующей:
Я указывал свои права следующим образом и не работал.
<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:protectionLevel="developer"
После того, как я изменил его на
android:protectionLevel="signature"
проблема решена
После борьбы с этой проблемой я узнал, что все значения, которые используются как значение строкового ресурса (aka @string/) в манифесте (из библиотек, которые вы используете), не могут быть частью строк. xml локализации. Пример: если файл манифеста с использованием @string/app_name, определение string/app_name разрешено только в ваших значениях по умолчанию /strings.xml, а не в альтернативном файле string.xml, который вы предоставляете для локализации. Надеюсь, это поможет...
У меня была такая же ошибка. у меня не было символа верхнего регистра в моем названии пакета/приложения и очистка проекта, а другие решения также не помогли мне. ведь я создал новый проект и копировал свои материалы на новый шаг за шагом и проверял, всплывает ли проблема. в конце концов, у меня был хороший проект без ошибок без избыточности. иногда трудно найти источник этой ошибки, поэтому легче принять другой подход.
Надеюсь, это поможет кому-то!
Я столкнулся с этой ошибкой, когда я поместил класс Application в неправильный пакет!
Возможно, вы не следовали правилам синтаксиса тега. например:
<meta-data
android:name="preloaded_fonts"/>
Этот тег является неполным и вызывает эту ошибку.
Используйте android:resource
в <meta-data>
вместо android:src
и android:srcCompat
Я знаю, что уже поздно отвечать здесь, но я делаю странную ошибку, поэтому опубликуйте свой ответ, если он кому-то поможет, В моем случае по ошибке я добавил активность Main launcher в качестве псевдонима
<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" из регистрации активности, и мое приложение успешно запускается.
Я создаю новое приложение и нацеливаю его на Android Pie. Все работало хорошо и хорошо, тогда в последнее время я обнаружил, что мое приложение не устанавливается на Android Naught и ниже версии ОС Android.
При установке я вижу сообщение об ошибке
Installation failed with message 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" />
Это были все изменения, которые я должен был выполнить, чтобы заставить его работать и на устройствах с более низкой версией.