2012-01-13 66 views
4

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

解析软件包时出现问题。

和在logcat的

12月1日至13日: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):at android.content.res.AssetManager。 openXmlAssetNative(Native Method)
01-13 12:06:51.562:W/PackageParser(4364):at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:486)
01-13 12:06:51.562:W/PackageParser(4364):at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:454)
01-13 12:06:51.562:W/PackageParser 4364):at android.content.pm.PackageParser.parsePackage(PackageParser.java:401)
............................ .................................
01-13 12:06:51.562:W/PackageParser(4364) :at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 12:06:51.562:W/PackageParser(4364):at dalvik.system.NativeStart.main(Native Method)
01-13 12:06:51.562:W/PackageInstaller(4364):解析清单时出现分析错误。停止安装

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

+0

我与ICS有完全相同的问题,其他版本的Android工作得很好。 – TacB0sS 2012-05-22 11:00:55

回答

4

如果您使用API​​等级9或更高,我认为最好使用DownloadManager来下载您的apk。这样Android会为您下载文件。

+0

感谢您的回复nandeesh。但我无法使用DownloadManager,因为在我的应用程序中,我从服务器发送的字符串格式的Apk。 – VKJ 2012-01-13 07:09:23

+0

那么它可能与字符串编码或你如何存储有关。你可以比较存储的apk和服务器上的字节。这可能会给你一些线索 – nandeesh 2012-01-13 08:16:10

0

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

试试这个代码,我希望这会工作。