安装Android应用程序时出现“解析错误:解析程序包时出现问题”


104

安装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卡并开始安装,但出现了以上错误。

我用谷歌搜索,他们说解压缩清单文件的问题。

谁能告诉我我怎么了?


您应该将版本号放到三个。请参考wikitude网站上的日语教程

嗨,埃杰德,谢谢您的回复。我的问题已经解决。我的错误是“我已手动更改了apk文件名”。在上面的2中是我的应用程序版本代码,而不是minsdk值。我把minsdk值设为3。谢谢,Raghavendra K
Raghu

4
只在想为什么重命名会成为问题?
Mikey

你好,迈克,我在导出后改了名字。这就是为什么它给错误。如果我们在导出时指定差异名称,对我来说就不是问题
。– Raghu

1
您好克鲁,更改版本号不会造成此问题。导出后,我已将apk文件重命名。这就产生了这个问题。
拉格

Answers:


49

您说第一次安装该应用程序可以正常工作。

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

  1. 版本号(我认为这没有参与破坏任何内容)
  2. 代码
  3. .apk文件的名称

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

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

我希望这能使您到某个地方。

干杯,约瑟夫


嗨约瑟夫,你的猜测是正确的。我将apk文件重命名为较早的文件。它的工作原理……非常感谢您的帮助.....
Raghu,2009年

嗨,我面临类似的问题。我正在从Web链接下载应用程序。它完美地位于移动SD卡上。但是,当我尝试安装时显示此错误。我没有签署我的应用程序,基本上我是Android应用程序开发的新手。
各种各样的

2
我遇到了类似的问题,这种情况是.gradle文件中的最低SDK版本。考虑一下这一点以及您设备的版本,这将会有所帮助。
user2881604 2015年

是的,您是对的,这就是apk文件名的问题...!
Arsal Imam

我改名apk文件和parse error走了,但想现在安装它时,它让我看到App not installed我使用的是棉花糖设备,也许它一样在这里的问题stackoverflow.com/questions/33930223/...
natsumiyu

45

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

  • 签收后更改包名称:使用与签名的包相同的名称(相反,在清单中调整名称)
  • 程序包在更高的API级别上进行编译:更正清单文件中的API级别
  • 程序包从SD卡执行:从手机内存中运行(安装)apk -file或使用adb命令进行安装

我认为还有其他条件可以实现这一目标。例如,有关从电子邮件安装时获取此错误消息的信息,请参见下面我对堪萨斯州答案的评论。
M Katz

最好的答案在这里。对我来说,它是在签收包裹后更改包裹名称。非常感谢。
珍妮·特妮森

我假设您需要有根电话才能使用adb install正确安装它?
2014年

否:不需要生根-不过,您可能需要从“安全性”设置中启用“未知来源”。(未经证实)
2014年

未知来源和USB调试...注意:在Windows 8中,有时它无法识别处于MTP模式的电话,只有PTP ...
SparK 2014年

22

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


前一阵子我被它击中了,花了很长时间才弄清楚!
olafure 2011年

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 '17

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参考

如果成功了该怎么办?
JacobSánchez19年

1
这对我很有帮助。谢谢!
Tgo1014


6

如果您要在SDK版本2.1下编译和导出apk文件,则该文件不适用于SDK导出“ 2.1”以下的任何android版本。Android软件是向前兼容而不是向后兼容。例如,如果您使用允许在C / C ++家族中进行开发的android NDK(Android SDK的附加组件)程序包进行编程,则此程序仅与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中选中它。
沃伊塔

2

尝试从电子邮件安装.apk软件包时遇到了相同的错误(解析错误,解析软件包时出现问题)。通过安装第三方软件包安装程序ApKatcher,我可以解决此问题:

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

ApKatcher不是唯一的解决方案。我的一位同事通过安装Astro File Manager解决了这个问题。

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


要在此处添加另一个数据点,从电子邮件安装时也会出现此错误,但是当我使用cord和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从payu pdf文件中复制了错误的示例代码时进入的。废话


1

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

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

上面的代码给我造成了同样的问题


1

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

使用不受限制的安装点/Removable/MicroSD


1

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


1

如@Veneet Reddy所述,可通过ADB安装它。

进入ADT包/ SDK /平台的工具,过去你.apk文件并运行命令提示符管理员。

然后运行adb devices命令,它将列出正在运行的已连接设备或仿真器。

在此处输入图片说明

然后跑 adb -s yourDeviceID install yourApk.apk

在此处输入图片说明

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


0

对于任何其他遇到此问题的人,我唯一一次遇到此错误的原因是Android Build配置中的API版本与物理设备上的API版本不匹配。

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


0

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


0

正如其他几个答案提到的那样,从SD卡安装时可能会出现问题。就我而言,我是通过电子邮件附件分发我的应用程序的,通常情况下可以正常工作。只需打开电子邮件并下载附件(附件显然进入了SD卡),然后再次单击它就可以安装它。

但是后来有一天它不起作用,事实证明是因为我将手机通过USB连接到我的开发PC,并且将SD卡置于其他模式或某种方式。因此,解决方案就是将电话与PC断开连接,然后再次发送电子邮件并重新下载附件。否则,将USB连接置于“仅充电”模式,这样SD卡就不会“连接”到PC。


0

您可能还需要检查设备上的日志,以查看是否是简单的事情,例如权限问题。您可以在adb主机/调试计算机上使用以下命令检查日志:

adb logcat

或者,如果您有权访问控制台(或在使用Android-x86时,通过输入Alt+来获取控制台F1),则可以使用以下logcat命令检查日志:

logcat

0

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

首次在eclipse中运行应用程序后,将在bin文件夹中创建PS apk文件。


0

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

 minSdkVersion 14
    targetSdkVersion 28

您应解释为什么最低版本14和28为目标。还要检查格式;)
m02ph3u5 '19

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
   }
}

希望它会帮助某人。



-1

我遇到了与其他人相同的“解析错误:解析程序包时出现问题”错误消息,但我怀疑这是由不同的原因引起的。

为了对此进行测试,我做了以下工作:

设置Windows 8.1 Eclipse ADT Build:v22.6.2-1085508

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

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

然后,我将apk加载并安装到我的实时设备中,并成功运行了它。

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

然后,我将Helloworld应用程序导出到同一个bin文件夹中,该文件夹在我的密钥存储区中对该应用程序进行了签名,该应用程序过去已成功用于升级到Google Play。

它创建了一个385 KB的APK(取代了原来的apk)。

我将apk侧面加载到设备上,当我安装它时,出现错误“解析错误:解析该软件包时出现问题”(这与以非导出形式完成并侧面加载并安装的软件包相同)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.