«Ошибка синтаксического анализа: возникла проблема при синтаксическом анализе пакета» при установке приложения Android.


105

У меня возникла эта ошибка при установке приложения android ( Parse Error : There is a problem parsing the package.). Я сделал следующие шаги.

  1. Я впервые установил приложение, и оно работает нормально.

  2. Я внес изменения в существующее приложение и изменил номер версии в файле манифеста.

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.openintents.samples.BasicOpenARDemo" android:versionCode="2" android:versionName="1.0.1">
  3. Затем я экспортирую приложение и завершаю процесс подписания кода. Для этого щелкните правой кнопкой мыши узел «Проект»> выберите «Экспорт». Там вы увидите мастера. Следуйте инструкциям и завершите подписание кода.

  4. Получил файл ARDemo.apk, потом изменил его имя на ARDemo1.apk

  5. Затем я отправил этот apk-файл на SD-карту мобильного телефона и начал установку. Я получил вышеуказанную ошибку.

Погуглил, мол что проблема с распаковкой файла манифеста.

Может ли кто-нибудь сказать мне, что со мной может быть не так?


вы должны поставить номер версии на три. пожалуйста, обратитесь к японскому руководству на сайте

Привет, Эйдер, Спасибо за твой ответ. Моя проблема уже исправлена. Моя ошибка "Я вручную изменил имя apk файла". Выше 2 - это код версии моего приложения, а не значение minsdk. Я установил значение minsdk как 3. Спасибо и С уважением, Рагхавендра К.
Рагху

4
просто подумал, почему переименование стало проблемой?
Майки

Привет, Майк, я изменил имя после экспорта. Вот почему это дает ошибку. Если мы укажем имя различия при экспорте, это не будет проблемой для меня ..
Raghu

1
Привет, Крю, изменение версии № не создало этой проблемы. Я переименовал файл apk после экспорта. Это создает эту проблему.
Raghu

Ответы:


50

Вы сказали, что при первой установке приложение работало нормально.

Единственная разница в описанных вами шагах между двумя версиями:

  1. Номер версии (предполагаю, что это ни в чем не участвовало)
  2. Код
  3. Имя файла .apk

Попробуйте переименовать файл ARDemo1.apk обратно в ARDemo.apk (обязательно сделайте резервную копию старой версии) и посмотрите, поможет ли это. Я предполагаю, что это как-то связано с названием apk.

Если он по-прежнему не работает, вы можете исключить имя файла apk как источник проблемы и начать исследование 2), перестроив старую версию и посмотреть, есть ли у вас такая же проблема снова. Если проблема не существует с перестроенной версией вашего старого кода, вы знаете, что это должно быть связано с вашим кодом.

Надеюсь, это тебя куда-то приведет.

Привет, Джозеф


Привет Джозеф, Ваше предположение верно. Переименовал apk файл на более ранний. Это работает ... Большое спасибо за вашу помощь ...
Рагху

Привет, у меня аналогичная проблема. Я загружаю приложение по веб-ссылке. Он отлично сидит на мобильной SDCard. Но когда я пытаюсь установить, появляется эта ошибка. Я не подписывал свое приложение, в основном я новичок в разработке приложений для Android. Любая помощь приветствуется :)
varunrao321

2
Я столкнулся с аналогичной проблемой, и дело было в минимальной версии SDK в файле .gradle. Подумайте об этом и о версии вашего устройства, и это будет полезно.
user2881604

Я, вы правы, проблема в имени apk файла ...!
Арсал Имам

Я переименовал файл apk, и parse errorон исчез, но при попытке его установки теперь он показывает мне, App not installedчто я использую зефир, и, возможно, это то же самое, что и проблема здесь stackoverflow.com/questions/33930223/…
natsumiyu

45

Установка может выдать указанную ошибку как минимум в следующих случаях:

  • Имя пакета изменяется после подписания : используйте точное имя подписанного пакета (вместо этого измените имя в манифесте)
  • Пакет компилируется на более высоком уровне API : исправьте уровень API в файле манифеста
  • Пакет выполняется с SD-карты : Запустите (установите) apk-файл из памяти телефона ИЛИ используйте команду adb для его установки

Я думаю, что есть и другие условия, при которых это может произойти. Например, см. Мой комментарий к ответу kansasian ниже о получении этого сообщения об ошибке при установке по электронной почте.
M Katz

Лучший ответ здесь. Для меня это было изменение имени пакета после его подписания. Большое спасибо.
Jannie Theunissen

Я предполагаю, что вам нужен рутированный телефон, чтобы иметь возможность установить его, adb installправильно?
abbood

Нет: рутирование не требуется - вам может потребоваться включить Неизвестные источники в настройках безопасности. (неподтвержденный)
jmu

Неизвестные источники И отладка по usb ... примечание: в windows 8 иногда он не распознает телефон в режиме MTP, только PTP ...
SparK

22

Я видел ошибку синтаксического анализа только тогда, когда версия Android на устройстве была ниже, чем версия, для которой было скомпилировано приложение. Например, если приложение скомпилировано для ОС Android v2.2, а на вашем устройстве установлена ​​только ОС Android v2.1, при попытке установить приложение вы получите ошибку синтаксического анализа.


Я был поражен этим некоторое время назад, потребовалось время, чтобы понять!
olafure 07

14

Причина в том, что apk не подписан. Как только apk будет подписан, проблема будет решена. http://ionicframework.com/docs/guide/publishing.html Воспользуйтесь ссылкой в ​​инструкциях, чтобы подписать apk.


Здесь та же проблема. После подписания apk все заработало как положено.
Dino Tw

3
Это было проблемой для меня со сборками Xamarin Android - сначала в диспетчере архива создается неподписанный APK. Затем вам нужно выбрать «Распространить», чтобы создать подписанный APK, который можно будет установить.
dodgy_coder

Добавление к тому , что написал dodgy_coder: для Xamarin.Android 7 или более или более ранних версий .
Veverke 01

13

Вместо того, чтобы снимать в темноте, выясните причину этой ошибки, установив ее через adb:

adb -s emulator-5555 install ~/path-to-your-apk/com.app.apk

Замените emulator-5555на имя вашего устройства. Вы можете получить список, используя:

adb devices

В случае неудачи он укажет причину. Общие причины и их исправления:

  1. INSTALL_PARSE_FAILED_NO_CERTIFICATES: Ссылка
  2. INSTALL_FAILED_UPDATE_INCOMPATIBLE: Ссылка

Что мне делать, если это удалось?
Джейкоб Санчес

1
Это мне очень помогло. Спасибо!
Tgo1014

7

Проверьте, поддерживает ли ваше устройство версию, указанную в minSdkVersion в AndroidManifest.xml. Если нет, укажите более низкую версию и попробуйте еще раз


6

Если вы компилируете и экспортируете файл apk в SDK версии 2.1, он не будет работать ни с одной версией Android ниже вашего экспорта SDK «2.1». Программное обеспечение Android имеет прямую совместимость, а не обратную совместимость. Например, если вы программируете с помощью пакета android NDK (надстройка ann для android SDK), который позволяет разрабатывать в семействе C / C ++, он совместим только с Android 2.3, версия Android 2.2 и ниже поддерживает только сборки java. Таким образом вы получите ошибку «Проблема при синтаксическом анализе пакета».


3

Другая возможность заключается в том, что вы сохранили apk-файл в папке PRIVATE приложения, а затем попытались установить (запустив намерение из вашего кода). в этом случае, когда вы запускаете намерение, вы получаете ошибку синтаксического анализа пакета. В этом случае возникшая ошибка связана с проблемами разрешения. Дело в том, что сохранение файла в личные папки не является хорошей практикой, однако, если вы действительно хотите это сделать, вы должны записать файл в MODE_WORL_READABLE при его загрузке. Учтите, что MODE_WORLD_READABLE устарел, и это решение не самое лучшее, поскольку оно имеет некоторые проблемы с безопасностью. Лучше всего сохранить файл во внешнем хранилище.


3

Я не повторяю здесь инструкций по вводу хранилища ключей, пароля и т. Д. Попробуйте

Сборка -> Создать подписанный APK -> [Вход] --- Далее ---> выберите ОБА

  • V1 (Подпись Jar)
  • V2 (полная подпись APK)

Не знаю почему, но, по крайней мере, в моей ситуации это сработало.


1
Работал у меня. По умолчанию это не проверялось в Android Studio MacOS.
vojta

2

У меня такая же ошибка (ошибка синтаксического анализа, существует проблема при синтаксическом анализе пакета) при попытке установить пакет .apk из электронной почты. Мне удалось обойти проблему, установив сторонний установщик пакетов ApKatcher:

http://www.addictivetips.com/mobile/install-android-apps-from-gmail/

ApKatcher - не единственное решение. Мой коллега решил проблему, установив Astro File Manager.

Вы можете найти оба приложения в Android Marketplace.


Чтобы добавить сюда еще одну точку данных, я также получал эту ошибку при установке по электронной почте, но она установилась нормально, когда я использовал шнур и adb для установки того же пакета. К сожалению, я пытался установить через почту Yahoo, поэтому не думаю, что ApKatcher может помочь.
M Katz

1

Аналогичная проблема с использованием этого «заимствованного» и немного измененного кода:

                Intent intent = new Intent(Intent.ACTION_VIEW);
                File newApk = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "myapp.apk");
                intent.setDataAndType(Uri.fromFile(newApk), "application/vnd.android.package-archive");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                result = true;

Необходимо было изменить создание файла на это (запятая вместо плюса в конструкторе файлов отсутствовала '/' после каталога загрузки):

                    File newApk = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "myapp.apk");

1

В моем файле манифеста была неверная пара тегов.

<meta-data>
</meta-data>

В основном попал, когда я скопировал плохой meta-dataобразец кода из файла pdf payu. Дерьмо.


1

Одна из причин может заключаться в том, что имя вашего действия не определено в манифесте.

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

приведенный выше код создавал ту же проблему со мной


1

Другая проблема, вызывающая эту ошибку, может быть связана с установкой APK из ограниченной точки монтирования SD-карты /mnt/media_rw/MicroSD.

Используйте неограниченную точку монтирования /Removable/MicroSD.


1

И, чтобы помочь возможным новым читателям, другой причиной могут быть ошибки в файле манифеста. Я ошибся android:serviceкак android.serviceи столкнулся с той же ошибкой ...


1

Как упоминалось @Veneet Reddy, установите его через ADB.

Перейдите в ADT Bundle / sdk / platform-tools мимо вашего .apkфайла и запустите командную строку от имени администратора.

Затем запустите adb devicesкоманду, которая выведет список подключенных устройств или запущенных эмуляторов.

введите описание изображения здесь

Тогда беги adb -s yourDeviceID install yourApk.apk

введите описание изображения здесь

Примечание: удалите приложение, если вы уже установили его перед повторной установкой.


0

Для всех, у кого есть эта проблема, единственный раз, когда я когда-либо получал эту ошибку, был когда версия API в вашей конфигурации Android Build не соответствует тому, что находится на физическом устройстве.

Войдите в Eclipse, щелкните свой проект правой кнопкой мыши и перейдите в свойства. Выберите Android - КОТОРЫЙ ПРИВЕДЕТ К ЦЕЛИ СТРОИТЕЛЬСТВА ANDROID. Настройте цель в соответствии с устройством и посмотрите, решит ли это проблему.


0

У меня была эта проблема, даже когда я указал правильную версию minSDK и targetSDK. Моя проблема заключалась в том, что я использовал "android:theme="@android:style/Theme.NoTitleBar.Fullscreen"в пусковой установке на устройстве Jellybean. Когда я удалил этот атрибут, все заработало.


0

Как уже упоминалось в нескольких других ответах, могут возникнуть проблемы при установке с SD-карты. В моем случае я распространял свое приложение через вложение электронной почты, и обычно оно работало нормально. Просто откройте электронное письмо и загрузите вложение (оно, по-видимому, идет на SD-карту), снова щелкните по нему, и оно будет установлено.

Но однажды это не сработало, и оказалось, что это произошло из-за того, что у меня был телефон, подключенный к моему компьютеру разработки через USB, и это поместило SD-карту в другой режим или что-то в этом роде. Таким образом, решение заключалось в том, чтобы просто отключить телефон от ПК, затем снова отправить электронное письмо и снова загрузить вложение. Или переведите USB-соединение в режим «только зарядка», чтобы SD-карта не была «подключена» к ПК.


0

Вы также можете проверить журналы на устройстве, чтобы узнать, есть ли что-то простое, например проблема с разрешениями. Вы можете проверить журналы с adbхоста / отладочного компьютера:

adb logcat

Или, если у вас есть доступ к консоли (или при использовании Android-x86 получить консоль, набрав Alt+ F1), вы можете проверить журналы с помощью logcatкоманды:

logcat

0

У меня была такая же проблема с использованием файла apk, экспортированного из android‌ Tools > Export. Вместо этого я использовал файл apk в папке bin, и он сработал!

Файл PS apk в папке bin создается после первого запуска приложения в eclipse.


0

используйте его внутри build.gradle (Модуль: приложение)

 minSdkVersion 14
    targetSdkVersion 28

Вы должны объяснить, почему минимальные версии 14 и 28 нацелены на. Также проверьте свое форматирование;)
m02ph3u5

0

У меня была эта проблема, которую Parse Error : There is a problem parsing the package. я тестировал на Android-8. У меня такой же apk с такой же подписью. Все было так же без номера версии и названия версии. Приложение устанавливалось, когда я устанавливал его вручную, но эта ошибка возникла, когда я загружал и устанавливал обновления программно. Тогда я нашел причину своей проблемы.

Была возможность проверить canRequestPackageInstalls (). Когда этот метод возвращает true, приложение устанавливается успешно. В моем случае он всегда возвращал false.

Поэтому сначала я проверяю это, а затем позволяю пользователю загружать и устанавливать обновления.

В onCreate ()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            if (!packageManager.canRequestPackageInstalls()) {
                    startActivityForResult(
                        Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES).setData(
                            Uri.parse(String.format("package:%s", packageName))
                        ), requestCodeqInstallPackage
                    )
                } else {
                    canInstallPackage = true
                }

        }

В onActivityResult ()

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            if (requestCode == requestCodeqInstallPackage && resultCode == Activity.RESULT_OK) {
                if (packageManager.canRequestPackageInstalls()) {
                    canInstallPackage = true
                }
            } else {
                canInstallPackage = false
                Toast.makeText(mContext, "Auto update feature will not work", Toast.LENGTH_LONG)
                    .show()
            }
    }

Затем, когда необходимо установить обновление, тогда -

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
   if(canInstallPackage){
      doInstallAppProcess()
   }else{
        // generate error message
   }
}

Надеюсь, это кому-то поможет.


0

В моем случае я подписал только подпись V2 (начиная с Android 7), но попытался установить на 5 и 6. Добавление V1 во время генерации / подписи ARK устранило проблему.

Увидеть разницу между версиями подписи - V1 (подпись Jar) и V2 (полная подпись APK) при создании подписанного APK в Android Studio? .


-1

Я получаю такое же сообщение об ошибке «Ошибка синтаксического анализа: существует проблема при синтаксическом анализе пакета» с моими подписанными APK-файлами, как и с другими, но я подозреваю, что это могло быть вызвано разными причинами.

Чтобы проверить это, я сделал следующее:

Установка Windows 8.1 Eclipse ADT Build: v22.6.2-1085508

Я создал типичное новое приложение Helloworld, принимающее все значения по умолчанию.

Я успешно запустил приложение на эмуляторе и живом устройстве.

Затем я загрузил и установил apk на свое живое устройство и успешно запустил его.

Он создал apk в папке bin размером 782 КБ.

Затем я экспортировал приложение Helloworld в ту же папку bin, подписав приложение из моего хранилища ключей, которое в прошлом успешно использовалось для продвижения в Google Play.

Он создал APK размером 385 КБ (заменив оригинальный apk).

Я загрузил apk на свое устройство, и когда я пошел его устанавливать, я получил сообщение об ошибке «Ошибка синтаксического анализа: существует проблема при синтаксическом анализе пакета» (это тот же пакет, который загружен и установлен в неэкспортированной форме).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.