我在安装Android应用程序(Parse Error : There is a problem parsing the package.
)时遇到此错误。我做了以下步骤。
我第一次安装应用程序时效果很好。
我对现有应用程序进行了更改,并在Manifest文件中更改了版本号。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.openintents.samples.BasicOpenARDemo" android:versionCode="2" android:versionName="1.0.1">
然后我导出应用程序并完成代码签名过程。 为此,右键单击您的项目节点&gt;选择导出。在那里你会看到一个向导。按照步骤完成代码签名。
我收到了ARDemo.apk文件,然后我将其名称更改为ARDemo1.apk
然后我将这个apk文件发送到手机SD卡并开始安装我收到了上述错误。
我用Google搜索,他们说解压缩清单文件存在问题。
有人能告诉我我的错误吗?
答案 0 :(得分:45)
你说第一次安装应用程序时效果很好。
您在两个版本之间列出的步骤的唯一区别是:
尝试将ARDemo1.apk文件重命名为ARDemo.apk(确保备份旧版本)并查看是否有帮助。我的猜测是它与apk的名称有关。
如果它仍然不起作用,那么你可以删除apk文件的名称作为问题的根源,并开始调查2)重建旧版本,看看你是否再次遇到同样的问题。如果旧代码的重建版本不存在该问题,那么您知道它必须与您的代码有关。
我希望能帮到你。
干杯, 约瑟夫
答案 1 :(得分:42)
安装可以至少在以下情况下给出指定的错误:
答案 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
失败后,它会给出一个理由。常见原因及其修复:
答案 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
我不知道为什么,但至少它在我的情况下起作用。
答案 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解决了该问题。
答案 17 :(得分:0)
在build.gradle(Module:app)中使用它
minSdkVersion 14
targetSdkVersion 28
答案 18 :(得分:0)
如@Veneet Reddy所述,它是通过ADB安装的。
在您的.apk
文件之后转到 ADT Bundle / sdk / platform-tools ,然后以管理员身份运行命令提示符。
然后运行adb devices
命令,该命令将列出正在运行的已连接设备或仿真器。
然后运行adb -s yourDeviceID install yourApk.apk
注意: 如果已安装,请先卸载该应用程序,然后再重新安装。
答案 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安装到我的设备上,当我去安装它时,我收到错误“解析错误:解析包时出现问题”(这是与非导出表单完成时侧载并安装的相同包)。