【问题标题】:Downloading APK from server and installing it to device [duplicate]从服务器下载APK并将其安装到设备[重复]
【发布时间】:2012-01-13 06:42:33
【问题描述】:

我正在以字符串格式从服务器下载 APK,将其转换为字节数组并在 SD 卡中创建 apk 文件。没有问题,如果我尝试安装相同的 apk,它会显示警告(解析错误)消息,如

解析包有问题。

在logcat中

01-13 12:06:51.562:W/PackageParser(4364):无法读取 /mnt/sdcard/example.apk 的 AndroidManifest.xml
01-13 12:06:51.562: W/PackageParser(4364): java.io.FileNotFoundException: AndroidManifest.xml
01-13 12:06:51.562: W/PackageParser(4364): 在 android.content.res.AssetManager.openXmlAssetNative(Native Method)
01-13 12:06:51.562: W/PackageParser(4364): 在 android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:486)
01-13 12:06:51.562: W/PackageParser(4364): 在 android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:454)
01-13 12:06:51.562: W/PackageParser(4364): 在 android.content.pm.PackageParser.parsePackage(PackageParser.java:401)
..................................................... ......
01-13 12:06:51.562: W/PackageParser(4364): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 12:06:51.562: W/PackageParser(4364): 在 dalvik.system.NativeStart.main(Native Method)
01-13 12:06:51.562:W/PackageInstaller(4364):解析清单时出现解析错误。停止安装

知道我做错了什么,或任何其他方法来解决这个问题。

【问题讨论】:

  • 我的 ICS 也有同样的问题,其他版本的 Android 也可以。

标签: android android-manifest


【解决方案1】:

如果您使用 API 级别 9 或更高级别,我认为使用 DownloadManager 下载您的 apk 会更好。这样 Android 将负责为您下载文件。

【讨论】:

  • 感谢您的回复。但我不能使用 DownloadManager,因为在我的应用程序中,我正在获取从服务器发送的字符串格式的 Apk。
  • 那么它可能与字符串编码或您的存储方式有关。您可以逐字节将存储的 apk 与服务器上的 apk 进行比较。这可能会给你一些线索
【解决方案2】:

这是下载和安装 .apk 文件的完美工作代码。

  public void downloadInstall(String apkurl){
          try {
                URL url = new URL(apkurl);
                HttpURLConnection c = (HttpURLConnection) url.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();

                String PATH = Environment.getExternalStorageDirectory() + "/download/";
                File file = new File(PATH);
                file.mkdirs();
                File outputFile = new File(file, "app.apk");
                FileOutputStream fos = new FileOutputStream(outputFile);

                InputStream is = c.getInputStream();

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, len1);
                }
                fos.close();
                is.close();



         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.setDataAndType(Uri.fromFile(new    File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")), "application/vnd.android.package-archive");
         startActivity(intent); 

            } catch (IOException e) {
                Toast.makeText(getApplicationContext(), "download error!", Toast.LENGTH_LONG).show();
            }
      }  

试试这个代码,我希望它会起作用。

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 2012-09-10
    • 2022-01-16
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2012-05-14
    • 2014-08-27
    相关资源
    最近更新 更多