Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从服务器下载APK并将其安装到设备_Android_Android Manifest - Fatal编程技术网

Android 从服务器下载APK并将其安装到设备

Android 从服务器下载APK并将其安装到设备,android,android-manifest,Android,Android Manifest,我正在以字符串格式从服务器下载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.FileNotFou

我正在以字符串格式从服务器下载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(本机方法)
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(本机方法)
01-13 12:06:51.562:W/PackageInstaller(4364):分析清单时出现分析错误。停止安装


你知道我做错了什么吗,或者用其他方法来解决这个问题。

如果你使用的是API级别9或更高,我认为最好用它来下载你的apk。所以安卓会帮你下载文件

这是下载和安装.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();
            }
      }  

请尝试此代码,我希望它能起作用。

谢谢您的回复。但我不能使用DownloadManager,因为在我的应用程序中,我得到的是从服务器发送的字符串格式的Apk。那么它可能与字符串编码或存储方式有关。您可以逐字节将存储的apk与服务器上的apk进行比较。这可能会给你一些建议。我对ICS也有同样的问题,其他版本的Android也可以。