【问题标题】:Android Parse Error during application upgrade应用程序升级期间的 Android 解析错误
【发布时间】:2012-06-20 08:39:33
【问题描述】:

我一直在尝试为我的 Android 应用实施升级计划,该计划不会在 Android 市场上发布。

设计的应用程序工作流程如下:

  1. 在登录时验证用户并启动主菜单活动。
  2. 从主菜单活动向我的网站发送了一个请求 最新版本代码值(存储在服务器上的 SQL 数据库中)。
  3. 将返回的版本代码值与版本代码进行比较 设备上安装的 apk 的值。
  4. 如果返回的版本代码值不同,则新的 apk 文件位于 服务器已下载并安装。

确保在升级工作流程生效之前已完成以下任务也很重要。

  1. 必须编译新版本的 apk 以使用更新的 versionCode 值发布
  2. 必须更新存储在网站数据库中的 versionCode 值
  3. 新编译的apk文件必须上传到web服务器的正确位置

我已经实施了工作流程的前 3 个阶段,但是当我尝试实施第 4 部分时,我最终收到“解析错误:解析包时出现问题”错误。

下面是有问题的代码:

protected void upgradeApplication() {
    StringBuilder urlBuilder = new StringBuilder(getString(R.string.website_ip) + "/" + getString(R.string.application_middleware) + "/" + getString(R.string.apk_folder) + "/"); 

    File file = new File(urlBuilder.toString(), getString(R.string.apk_file));

    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

    startActivity(intent);
}

我已经通过设备的网络浏览器直接下载 apk 并从下载文件夹安装它来测试 apk 是否可以正确安装。但是当我尝试从应用程序中安装时,我收到了发布的错误。

“解析错误:解析包有问题”

任何帮助将不胜感激

【问题讨论】:

  • 您是否将其存储在 getFileDir 中?
  • 你的意思是存储apk?我已强制应用程序仅使用内部存储器,因为我无法确定用户是否安装了 SD 卡
  • 我还认为以下代码行会从网站上提取文件。 File file = new File(urlBuilder.toString(), getString(R.string.apk_file)); 其中 urlBuilder 包含指向 apk 文件的链接
  • 好的,我添加了if(file.exists()) { // Start intent },它不存在它跳过代码块内的代码

标签: android upgrade parse-error


【解决方案1】:

如果用这一行

File file = new File(urlBuilder.toString(), getString(R.string.apk_file));

您尝试通过将 url 作为参数传递来下载文件,那么它将无法正常工作。 File 构造函数无法下载文件。

你应该use an AsyncTask下载apk,等待它完成然后只有你可以安装它。

【讨论】:

  • 嗨 Dalmas 我已经实现了异步任务,如您提供的链接中所示,一切似乎都正常工作,但最后我仍然收到 Parse 错误。查看日志文件,我收到以下错误:无法打开 zip '/data/data/uk.estrix.android.m3sms/files/Mobile M3 SMS Sales Automation':权限被拒绝。如果需要,我可以发布整个日志文件。
【解决方案2】:

如果您将 .apk 文件存储在私有内部存储中,则需要Context.MODE_WORLD_READABLE 权限。

下面的 sn-p 会帮助你。

String outFileName = path+"/<Application_Name>.apk";
OutputStream myOutput = openFileOutput("<Application_Name>.apk", Context.MODE_WORLD_READABLE);

然后安装它,

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(path+"/<Application_Name>.apk")), "application/vnd.android.package-archive");
startActivity(intent);

【讨论】:

  • 嗨 Vipul 我试图在 Facebook 上添加你(Iain Blackwood)我想澄清一下内部存储器上的路径位置
猜你喜欢
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2019-05-09
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多