在安装 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. Then I export the application and finish the code signing process. For this, Right Click your Project node > select Export. There you will see a wizard. Follow the steps and finish the code signing also.

  4. I got the ARDemo.apk file, Then I changed it’s name to ARDemo1.apk

  5. Then I shipped this apk file to mobiles SD Card and started the installation I got the above error.

I googled, they say that problem with unpacking manifest file.

Can anyone tell me what could be wrong with me?

422809 次浏览

您在第一次安装应用程序时说它工作得很好。

在这两个版本中,您概述的步骤的唯一区别是:

  1. 版本号(我假设 没有参与 打碎任何东西)
  2. 密码
  3. Apk 文件的名称

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

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

我希望这能帮到你。

干杯, 约瑟夫

我只见过当设备上的 android 版本低于编译应用程序的版本时出现解析错误。例如,如果该应用程序是为 android OS v2.2编译的,而您的设备只有 android OS v2.1,那么当您尝试安装该应用程序时,您将得到一个解析错误。

如果您正在编译和导出 SDK 版本2.1下的 apk 文件,它将不能在 SDK 导出“2.1”下的任何 Android 版本上工作。Android 软件是向前兼容的,而不是向后兼容的。例如,如果你正在使用 android NDK (android SDK 的 ann 附加组件)包进行编程,它允许 C/C + + 系列的开发,这只与 android 2.3,android 2.2及以下版本支持 java 构建兼容。因此,您将收到“ There is a problem parsing the package”错误。

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

  • 在签名 之后,包的名称会更改: 使用签名后的包的确切名称(相反,调整 Manifest 中的名称)
  • Package is compiled against on higher API level: Correct the API level in Manifest file
  • 从 SD 卡 执行包: 从手机内存运行(安装) apk 文件或使用 adb 命令安装它

I got the same error (Parse Error, There is a problem parsing the package) while trying to install an .apk package from email. I was able to get around the problem by installing the 3rd party package installer ApKatcher:

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

ApKatcher isn't the only solution. A colleague of mine got around the problem by installing Astro File Manager.

你可以在 Android 市场上找到这两个应用程序。

对于其他有这个问题的人来说,我唯一一次得到这个错误是当您的 Android Build 配置中的 API 版本与物理设备上的不匹配时。

进入 Eclipse 并右键单击您的项目,然后转到 properties。选择 ANDROID ——这将带你到 ANDROID 构建目标。调整目标以匹配设备,看看这是否解决了问题。

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

我正在经历相同的“解析错误: 有一个问题解析包”错误消息与我签署的 APK 作为其他人,但我怀疑它可能是由不同的原因造成的。

为了验证这一点,我做了以下工作:

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

I generated a typical new Helloworld app accepting all defaults.

我在一个模拟器上成功地运行了这个应用程序。

I then sideloaded and installed the apk to my live device and ran it successfully.

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

然后我将 Helloworld 应用程序导出到同一个 bin 文件夹中,在我的密钥存储中对应用程序进行签名,这个应用程序在过去曾被成功地用于推广到 Google Play。

It created an APK with a size of 385 KB (replacing the original apk).

我将 apk 侧载到我的设备上,当我去安装它的时候,我得到了一个错误“ Parse error: There is a problem parsing the package”(这是作为一个非导出表单侧载并安装的同一个包)。

为了帮助可能的新读者,另一个原因可能是清单文件中的错误。我把 android:service当作 android.service输错了,结果也出现了同样的错误..。

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

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

                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 构造函数中用逗号代替 plus,在下载目录后缺少’/’) :

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

另一种可能性是,您已经将 apk 文件保存到应用程序 PRIVATE 文件夹中,然后尝试安装(通过从代码启动意图)。在这种情况下,当您启动意图时,您将得到错误解析包。在本例中,引发的错误与权限问题有关。重点是将文件保存到私有文件夹中并不是一个好的做法,但是如果您真的想这样做,您应该在下载文件时使用 MODE _ WORL _ READABLE 编写文件。请考虑 MODE _ WORLD _ READABLE 是不推荐的,这个解决方案不是最好的,因为它有一些安全问题。最好的方法是将文件保存在外部存储器中。

I had a bad tag pair in my manifest file.

<meta-data>
</meta-data>

基本上进入时,我复制了一个坏的 meta-data样本代码从 payu pdf 文件。废话。

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

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

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

above code was creating the same issue with me

正如其他几个答案所提到的,从 SD 卡安装时可能会出现问题。在我的例子中,我是通过电子邮件附件发布我的应用程序,它通常工作得很好。只要打开电子邮件,下载附件(显然是到 SD 卡) ,再次点击,就可以安装了。

但是有一天它不工作了,原来是因为我把手机通过 USB 接口连接到我的开发电脑上,这使得 SD 卡处于一种不同的模式之类的。所以解决方案只是简单地断开电话与电脑的连接,然后再次发送电子邮件,再次下载附件。或者将 USB 连接设置为“仅充电”模式,这样 SD 卡就不会“连接”到电脑上。

Another problem causing this error can be installing APK from restricted SD card mount point /mnt/media_rw/MicroSD.

使用无限制的安装点 /Removable/MicroSD

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

adb logcat

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

logcat

我在使用从 android‌ Tools > Export导出的 apk 文件时遇到了同样的问题。我使用的 apk 文件在 垃圾箱文件夹而不是和它工作!

Bin 文件夹中的 P.S. apk 文件是在您第一次在 eclipse 中运行应用程序之后创建的。

与其在黑暗中拍摄,不如通过 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: 参考文献

我不会重复这里所指示的输入密钥存储、密码等的操作。 试试看

Build -> Generate Signed APK -> [ Input ] ---Next---> select 都有

  • V1(罐子签名)
  • V2(完全 APK 签名)

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

正如@Veneet Reddy 提到的,通过 ADB 安装它。

Go to ADT Bundle/sdk/platform-tools past your .apk file and run command prompt as administrator.

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

enter image description here

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

enter image description here

注: 卸载应用程序,如果你已经安装之前,再次安装。

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

minSdkVersion 14
targetSdkVersion 28

当 Android 版本小于 minSdkVersion 时,也会出现此错误

我有这个问题 Parse Error : There is a problem parsing the package. 我在测试 Android-8。我有相同的平板电脑和相同的签名。没有版本号和版本名,一切都是相同的。应用程序安装时,我手动安装它,但这个错误发生时,我下载和安装更新程序。那我找到问题的根源了。

有一个选项可以检查 < a href = “ https://developer.android.com/reference/android/content/pm/PackageManager.html # canRequestPackageInstals ()”rel = “ nofollow noReferrer”> canRequestPackageInstals () 当这个方法返回 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()
}
}

Then when need to install update then-

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

希望能帮到别人。

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

参见 签名版本 V1(Jar 签名)和 V2(完全 APK 签名)在 Android Studio 中生成签名 APK 时的区别?

In my case build 1 was installed correctly in my mobile using the signed APK (also from Google Play Store). But when I update the application with build 2 for first time, I had an issue installing it with the signed APK as I got "There was a problem parsing the package".

我尝试了上面提到的几种方法,但是没有效果。

After some time, I rerun the commands

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命令解决了我的问题。

In my case i written <activity android:".Stopwatch"/> instead of <activity android:name=".Stopwatch"/> 在机器人名单里。

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

如果您在使用 android 12的设备中遇到这个问题。您可以通过在 AndroidManifest.xml 中添加 android: export = “ true”来修复它,如下所述

<activity
android:name=".MainActivity"
android:exported="true"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:label="@string/app_name"

试试这个,它为我工作-

如果更改为31或更高版本,则不允许在某些设备上构建应用程序,请执行以下操作-

在 android 包含的标记中: export = “ true”或 android: export = “ false”。