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

时间:2009-09-29 13:01:38

标签: android

我在安装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. 然后我导出应用程序并完成代码签名过程。 为此,右键单击您的项目节点&gt;选择导出。在那里你会看到一个向导。按照步骤完成代码签名。

  4. 我收到了ARDemo.apk文件,然后我将其名称更改为ARDemo1.apk

  5. 然后我将这个apk文件发送到手机SD卡并开始安装我收到了上述错误。

  6. 我用Google搜索,他们说解压缩清单文件存在问题。

    有人能告诉我我的错误吗?

27 个答案:

答案 0 :(得分:45)

你说第一次安装应用程序时效果很好。

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

  1. 版本号(我假设 这没有参加 打破任何事情)
  2. 代码
  3. .apk文件的名称
  4. 尝试将ARDemo1.apk文件重命名为ARDemo.apk(确保备份旧版本)并查看是否有帮助。我的猜测是它与apk的名称有关。

    如果它仍然不起作用,那么你可以删除apk文件的名称作为问题的根源,并开始调查2)重建旧版本,看看你是否再次遇到同样的问题。如果旧代码的重建版本不存在该问题,那么您知道它必须与您的代码有关。

    我希望能帮到你。

    干杯, 约瑟夫

答案 1 :(得分:42)

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

  • 签名后更改了包的名称:使用签名包的确切名称(而不是在Manifest中调整名称)
  • 根据更高的API级别编译包:更正清单文件中的API级别
  • 从SD卡执行包:从手机内存中运行(安装)apk -file或使用adb命令进行安装

答案 2 :(得分:21)

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

答案 3 :(得分:12)

原因是apk没有签名。 一旦apk签名,问题就会得到解决。 http://ionicframework.com/docs/guide/publishing.html 请使用说明链接签署apk。

答案 4 :(得分:9)

不是在黑暗中拍摄,而是通过adb安装来解决此错误的原因:

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

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

adb devices

失败后,它会给出一个理由。常见原因及其修复:

  1. INSTALL_PARSE_FAILED_NO_CERTIFICATESReference
  2. INSTALL_FAILED_UPDATE_INCOMPATIBLEReference

答案 5 :(得分:6)

如果您正在SDK版本2.1下编译和导出apk文件,它将无法在您的SDK导出“2.1”下面的任何Android版本上运行。 Android软件向前兼容,不向后兼容。例如,如果您使用Android NDK(安卓附加到安卓SDK)包允许在C / C ++系列中进行编程,那么这只与android 2.3兼容,Android 2.2及以下版本仅支持java版本。因此,您将重新启动“解析程序包时出现问题”错误。

答案 6 :(得分:4)

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

答案 7 :(得分:2)

我没有重复这里指示输入密钥库,密码等的内容。 试试

  

构建 - &gt;生成签名APK - &gt; [输入] ---下一个---&gt;选择 BOTH

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

我不知道为什么,但至少它在我的情况下起作用。

答案 8 :(得分:2)

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

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

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

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

答案 9 :(得分:1)

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

<meta-data>
</meta-data>

当我从payu pdf文件中复制错误的meta-data示例代码时,基本上就进入了。垃圾。

答案 10 :(得分:1)

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

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

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

__construct()

需要将文件创建更改为此文件(在文件构造函数中使用逗号而不是加号,在下载目录后缺少'/'):

                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;

答案 13 :(得分:1)

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

答案 14 :(得分:0)

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

但是有一天它不起作用,结果是因为我通过USB将手机连接到我的开发PC,这使得SD卡处于不同的模式或其他状态。因此,解决方案只是将手机与PC断开连接,然后再次发送电子邮件并再次下载附件。或者将USB连接置于“仅充电”模式,这样SD卡就不会“连接”到PC上。

答案 15 :(得分: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
   }
}

希望它将对某人有所帮助。

答案 16 :(得分:0)

就我而言,我仅使用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?

答案 17 :(得分:0)

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

 minSdkVersion 14
    targetSdkVersion 28

答案 18 :(得分:0)

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

在您的.apk文件之后转到 ADT Bundle / sdk / platform-tools ,然后以管理员身份运行命令提示符。

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

enter image description here

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

enter image description here

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

答案 19 :(得分:0)

在我的情况下,使用签名的APK(同样来自Google Play商店)在手机中正确安装了版本1。但是,当我第一次使用内部版本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 命令解决了我的问题。

答案 20 :(得分:0)

就我而言,我写了 <activity android:".Stopwatch"/> 代替 <activity android:name=".Stopwatch"/> 在Android清单中。

再次检查清单和gradle文件。

答案 21 :(得分:0)

使用从 android‌ Tools > Export 导出的apk文件时遇到了同样的问题。我在 bin 文件夹中使用了apk文件而且它有效!

P.S。 bin文件夹中的apk文件是在首次在eclipse中运行应用程序后创建的。

答案 22 :(得分:0)

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

adb logcat

或者,如果您有权访问控制台(或通过键入 Alt + F1 使用Android-x86获取控制台),则可以使用{检查日志{1}}命令:

logcat

答案 23 :(得分:0)

一个原因可能是,您的activity'name未在清单中定义

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

上面的代码与我创建了同样的问题

答案 24 :(得分:0)

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

答案 25 :(得分:0)

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

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

答案 26 :(得分:-1)

我遇到了同样的“解析错误:解析包时出现问题”错误消息与我签名的APK有关,但我怀疑它可能是由不同原因引起的。

为了测试这个,我做了以下事情:

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

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

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

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

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

然后我将Helloworld应用程序导出到我的密钥存储区签署该应用程序的同一个bin文件夹,该密钥存储区过去曾成功用于推广到Google Play。

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

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