【问题标题】:"Parse Error : There is a problem parsing the package" while installing Android application安装 Android 应用程序时出现“解析错误:解析包时出现问题”
【发布时间】:2009-09-29 13:01:38
【问题描述】:

我在安装 android 应用程序 (Parse Error : There is a problem parsing the package.) 时遇到此错误。我做了以下步骤。

  1. 我第一次安装应用程序,它运行良好。

  2. 我对现有应用程序进行了更改,并更改了 Manifest 文件中的版本号。

    <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卡并开始安装我得到了上述错误。

我用谷歌搜索,他们说解包清单文件有问题。

谁能告诉我我有什么问题?

【问题讨论】:

  • 你应该把版本号放在三个上。请参考wikiitude网站上的日文教程
  • 您好 Ejder,感谢您的回复。我的问题已经解决了。我的错误是“我手动更改了 apk 文件名”。上面 2 是我的应用程序版本代码而不是 minsdk 值。我将 minsdk 值设为 3。感谢和问候,Raghavendra K
  • 只是在想为什么重命名会成为问题?
  • 你好迈克,我在导出后改了名字。这就是它给出错误的原因。如果我们在导出时指定差异名称,那对我来说不是问题..
  • 您好 Cru,更改版本号不会产生此问题。导出后,我已重命名 apk 文件。它会产生这个问题。

标签: android


【解决方案1】:

您说第一次安装应用程序时它运行良好。

您在两个版本之间概述的步骤的唯一区别是:

  1. 版本号(我假设 这没有参与 破坏任何东西)
  2. 代码
  3. .apk 文件的名称

尝试将 ARDemo1.apk 文件重命名为 ARDemo.apk(确保备份旧版本),看看是否有帮助。我的猜测是它与 apk 的名称有关。

如果还是不行,那么你可以消除apk文件的名称作为问题的根源,并开始调查2)重建你的旧版本,看看你是否再次遇到同样的问题。如果旧代码的重建版本不存在问题,那么您知道这一定与您的代码有关。

我希望这能让你有所收获。

干杯, 约瑟夫

【讨论】:

  • 嗨约瑟夫,你的猜测是正确的。我将apk文件重命名为较早的文件。它有效......非常感谢你的帮助......
  • 您好,我遇到了类似的问题。我正在从 Web 链接下载应用程序。它完美地安装在移动 SDCard 上。但是当我尝试安装它时显示此错误。我没有签署我的应用程序,基本上我是 Android 应用程序开发的新手。任何形式的帮助表示赞赏:)
  • 我遇到了类似的问题,案例是 .gradle 文件中的最低 SDK 版本。考虑一下您的设备版本,这会有所帮助。
  • 是的,你说的没错,就是apk文件名的问题...!
  • 我重命名了 apk 文件,parse error 不见了,但是现在尝试安装它时,它告诉我App not installed 我正在使用棉花糖设备,可能与问题相同这里stackoverflow.com/questions/33930223/…
【解决方案2】:

安装至少在以下情况下会给出指定的错误:

  • 签名后更改包的名称:使用与签名包完全相同的名称(而不是在 Manifest 中调整名称)
  • 在更高的 API 级别上编译包:更正 Manifest 文件中的 API 级别
  • 从 SD 卡执行包:从手机内存中运行(安装)apk 文件或使用 adb 命令安装它

【讨论】:

  • 我认为还有其他条件可以做到这一点。例如,请参阅下面关于从电子邮件安装时收到此错误消息的 kansasian 回答的评论。
  • 最佳答案在这里。对我来说,它是在签名后更改包裹的名称。非常感谢。
  • 我假设您需要有一个 root 手机才能使用adb install 安装它,对吧?
  • 不:不需要生根 - 不过,您可能需要从安全设置中启用未知来源。 (未确认)
  • 未知来源和 USB 调试...注意:在 Windows 8 中,有时它无法识别 MTP 模式下的手机,只能识别 PTP...
【解决方案3】:

我只在设备上的 android 版本低于编译应用程序的版本时才看到解析错误。例如,如果该应用是针对 android OS v2.2 编译的,而您的设备只有 android OS v2.1,那么当您尝试安装该应用时会出现解析错误。

【讨论】:

  • 我前一阵子被这个问题击中了,花了很长时间才弄清楚!
【解决方案4】:

不要在黑暗中拍摄,而是通过adb安装它来获取此错误的原因:

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

emulator-5555 替换为您的设备名称。您可以使用以下方式获取列表:

adb devices

如果失败,它会给出一个理由。常见原因及其解决方法:

  1. INSTALL_PARSE_FAILED_NO_CERTIFICATES: Reference
  2. INSTALL_FAILED_UPDATE_INCOMPATIBLE: Reference

【讨论】:

  • 成功了怎么办?
  • 这对我帮助很大。谢谢!
【解决方案5】:

原因是 apk 没有签名。 签署 apk 后,问题将得到解决。 http://ionicframework.com/docs/guide/publishing.html 请使用说明中的链接来签署 apk。

【讨论】:

  • 这里有同样的问题。签署 apk 后,它按预期工作。
  • 这对我来说是 Xamarin Android 版本的一个问题 - 它首先在存档管理器中创建一个未签名的 APK。然后,您必须选择“分发”来创建可以安装的签名 APK。
  • 添加到 dodgy_coder 写的内容:Xamarin.Android 7 or greaterearlier versions
【解决方案6】:

如果您在 SDK 版本 2.1 下编译和导出您的 apk 文件,它将不适用于低于您的 SDK 导出“2.1”的任何 android 版本。 Android 软件是向前兼容而不是向后兼容。例如,如果您正在使用允许在 C/C++ 系列中开发的 android NDK(android SDK 的附加组件)包进行编程,则它仅与 android 2.3 兼容,android 2.2 及以下版本仅支持 java 构建。因此,您将收到“解析包时出现问题”错误。

【讨论】:

    【解决方案7】:

    检查您的设备是否支持您在 AndroidManifest.xml 的 minSdkVersion 中指定的版本。如果不指定低版本重试

    【讨论】:

      【解决方案8】:

      我不会重复此处指示输入密钥库、密码等的内容。 试试看

      Build -> Generate Signed APK -> [ Input ] ---Next---> select BOTH

      • V1(Jar 签名)
      • V2(完整的 APK 签名)

      我不知道为什么,但至少它在我的情况下有效。

      【讨论】:

      • 为我工作。 Android Studio MacOS 中默认没有勾选。
      • 对于 7.0 之前的旧 Android 版本,我遇到了同样的问题。但我只使用了 V2(完整的 APK 签名)。这对于较新的 Android 版本来说已经足够了。当您提供 7.0 之前的版本时,您还必须使用 V1(Jar 签名)!
      【解决方案9】:

      另一种可能性是您已将 apk 文件保存到应用程序 PRIVATE 文件夹中,然后尝试安装(通过从您的代码启动意图)。在这种情况下,当您启动意图时,您会收到错误解析包。在这种情况下,引发的错误与权限问题有关。关键是将文件保存到私人文件夹不是一个好习惯,但是如果你真的想这样做,你应该在下载文件时将文件写入 MODE_WORL_READABLE 中。请考虑 MODE_WORLD_READABLE 已被弃用,并且此解决方案不是最好的,因为它存在一些安全问题。最好的办法是将文件保存在外部存储中。

      【讨论】:

        【解决方案10】:

        我在尝试通过电子邮件安装 .apk 包时遇到了同样的错误(解析错误,解析包时出现问题)。我能够通过安装 3rd 方包安装程序 ApKatcher 来解决这个问题:

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

        ApKatcher 不是唯一的解决方案。我的一位同事通过安装 Astro 文件管理器解决了这个问题。

        您可以在 Android Marketplace 中找到这两个应用程序。

        【讨论】:

        • 要在此处添加另一个数据点,从电子邮件安装时我也收到此错误,但是当我使用 cord 和 adb 安装相同的软件包时它安装得很好。不幸的是,我试图通过 yahoo 邮件安装,所以我认为 ApKatcher 没有帮助。
        【解决方案11】:

        类似的问题,使用这个“借来的”和稍作修改的代码:

                        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");
        

        【讨论】:

          【解决方案12】:

          我的清单文件中有一个错误的标签对。

          <meta-data>
          </meta-data>
          

          基本上是在我从 payu pdf 文件中复制了一个错误的 meta-data 示例代码时进入的。废话。

          【讨论】:

            【解决方案13】:

            一个原因可能是,您的活动名称未在清单中定义

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

            上面的代码给我带来了同样的问题

            【讨论】:

              【解决方案14】:

              导致此错误的另一个问题可能是从受限 SD 卡安装点 /mnt/media_rw/MicroSD 安装 APK。

              使用不受限制的挂载点/Removable/MicroSD

              【讨论】:

                【解决方案15】:

                为了帮助可能的新读者,另一个原因可能是清单文件中的错误。我把android:service 打错了android.service 并遇到了同样的错误......

                【讨论】:

                  【解决方案16】:

                  正如@Veneet Reddy 所说,通过 ADB 安装它。

                  通过您的.apk 文件转到ADT Bundle/sdk/platform-tools 并以管理员身份运行命令提示符。

                  然后运行adb devices 命令,该命令将列出连接的设备或正在运行的模拟器。

                  然后运行adb -s yourDeviceID install yourApk.apk

                  注意: 如果您已经安装过,请先卸载该应用,然后再重新安装。

                  【讨论】:

                    【解决方案17】:

                    我遇到过这个问题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
                       }
                    }
                    

                    希望对某人有所帮助。

                    【讨论】:

                      【解决方案18】:

                      对于遇到此问题的其他人,我唯一遇到此错误的情况是您的 Android 构建配置中的 API 版本与物理设备上的不匹配。

                      进入 Eclipse 并右键单击您的项目并转到属性。选择 Android - 将您带到 Android 构建目标。调整您的目标以匹配设备,看看是否能解决问题。

                      【讨论】:

                        【解决方案19】:

                        即使我指定了正确的 minSDK 和 targetSDK 版本,我也遇到了这个问题。我的问题是,我在 Jellybean 设备上的启动器活动中使用了"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"。当我删除此属性时,它起作用了。

                        【讨论】:

                          【解决方案20】:

                          正如其他几个答案所提到的,从 SD 卡安装时可能会出现问题。就我而言,我通过电子邮件附件分发我的应用程序,它通常运行良好。只需打开电子邮件并下载附件(它显然会进入 SD 卡)并再次单击它即可安装。

                          但是有一天它不起作用,结果证明是因为我的手机通过 USB 连接到我的开发 PC,而这将 SD 卡置于不同的模式或什么的。因此,解决方案是简单地将手机与 PC 断开连接,然后再次发送电子邮件并再次下载附件。或者将 USB 连接置于“仅充电”模式,这样 SD 卡就不会“连接”到 PC。

                          【讨论】:

                            【解决方案21】:

                            您可能还想检查设备上的日志,看看它是否像权限问题这样简单。您可以在主机/调试计算机上使用adb 检查日志:

                            adb logcat
                            

                            或者,如果您可以访问控制台(或者在使用 Android-x86 时通过键入 Alt+F1 获取控制台),那么您可以使用 @ 检查日志987654323@命令:

                            logcat
                            

                            【讨论】:

                              【解决方案22】:

                              我在使用从 android‌ Tools &gt; Export 导出的 apk 文件时遇到了同样的问题。我改用 bin 文件夹中的 apk 文件,它起作用了!

                              附注bin 文件夹中的 apk 文件是在您第一次在 eclipse 中运行应用程序后创建的。

                              【讨论】:

                                【解决方案23】:

                                在我的例子中,我只使用 V2 签名(从 Android 7 开始)但尝试在 5 和 6 上安装。在 ARK 生成/签名期间添加 V1 解决了这个问题。

                                Difference between signature versions - V1 (Jar Signature) and V2 (Full APK Signature) while generating a signed APK in Android Studio?

                                【讨论】:

                                  【解决方案24】:

                                  在我的情况下,构建 1 已使用签名的 APK(也来自 Google Play 商店)正确安装在我的手机中。但是当我第一次使用 build 2 更新应用程序时,我在使用签名的 APK 安装它时遇到了问题,因为我得到“解析包时出现问题”。

                                  我尝试了上面指定的几种方法。但是没有用。

                                  一段时间后,我重新运行命令

                                  jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-key.keystore app-release-unsigned.apk myappkeyalias
                                  zipalign -v 4 app-release-unsigned.apk MyApp.apk
                                  

                                  令人惊讶的是,它奏效了。

                                  似乎有时构建的 APK 可能已损坏。因此,重新运行 jarsigner 和 zipalign 命令解决了我的问题。

                                  【讨论】:

                                    【解决方案25】:

                                    在 build.gradle (Module:app) 中使用它

                                    minSdkVersion 14
                                    targetSdkVersion 28
                                    

                                    Android版本低于minSdkVersion也会出现这个错误

                                    【讨论】:

                                    • 您应该解释为什么以最小版本 14 和 28 为目标。还要检查你的格式;)
                                    【解决方案26】:

                                    就我而言,我写道 &lt;activity android:".Stopwatch"/&gt; 代替 &lt;activity android:name=".Stopwatch"/&gt; 在 android 清单中。

                                    再次检查您的清单和 gradle 文件。

                                    【讨论】:

                                      【解决方案27】:

                                      我的签名 APK 与其他人一样遇到相同的“解析错误:解析包时出现问题”错误消息,但我怀疑这可能是由不同原因引起的。

                                      为了测试这一点,我做了以下操作:

                                      设置 视窗 8.1 蚀 ADT 版本:v22.6.2-1085508

                                      我生成了一个典型的新 Helloworld 应用程序,接受所有默认值。

                                      我在模拟器和在线设备上成功运行了该应用程序。

                                      然后我将 apk 侧载并安装到我的实时设备并成功运行。

                                      它在 bin 文件夹中生成了一个大小为 782 KB 的 apk。

                                      然后,我将 Helloworld 应用程序导出到同一个 bin 文件夹中,从我的密钥库中对该应用程序进行签名,该密钥库过去已成功用于推广到 Google Play。

                                      它创建了一个大小为 385 KB 的 APK(替换原来的 apk)。

                                      我将 apk 侧载到我的设备,当我去安装它时,我收到错误“解析错误:解析包时出现问题”(这与作为非导出表单完成时侧载和安装的包相同)。

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2021-07-17
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2018-06-15
                                        • 2018-10-07
                                        相关资源
                                        最近更新 更多