Android中已下载的.apk文件已损坏

时间:2012-09-22 09:51:30

标签: android download corrupt-data

我需要通过程序下载.apk文件然后启动它的活动。 我正在使用的代码如下

private String downloadFile(String sourceURL, String destinationPath)
    {
        try {
            URL url = new URL(sourceURL);
            URLConnection connection = url.openConnection();
            connection.connect();

            // download the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream(destinationPath);

            byte data[] = new byte[1024];
            int count;
            while ((count = input.read(data)) > 0) {
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();

// EDITED here:将文件设为rw,否则将不会安装apk文件                 Runtime.getRuntime()。exec(“chmod 666”+ destinationPath);

            message = "OK";
        }
        catch (MalformedURLException e) {
            message = "Malformed URL error: " + e.getMessage();
        }
        catch (ProtocolException e) {
            message = "Protocol exception error: " + e.getMessage();
        }
        catch (FileNotFoundException e) {
            message = "File not found error: " + e.getMessage();
        }
        catch (IOException e)   {
            e.printStackTrace();
            message = "Failed to download the file : " + e.getMessage();
        }
        return message;
    }

我提到我首先调用该方法用于文本文件,然后调用apk文件。因此,每次我在本地处理文件时,我都知道出了什么问题。通过这种方式,我知道正确下载了文本文件。但.apk文件已损坏。因为我在本地开发,可以访问DDMS和localhost(IP:10.0.2.2),我可以坚定地说罪魁祸首就是上面的代码。当我通过DDMS使用原始.apk文件人工替换“已下载”文件时,后面的所有处理都是OK。另外,当我比较原始和下载的.apk文件时,我有点差异。 我究竟做错了什么? 谢谢 PS:搜索,我意识到,虽然这是一个受欢迎的问题,但没有一致的答案。在我的情况下,我将其确定为纯粹的下载方法问题。

1 个答案:

答案 0 :(得分:0)

请参阅以上EDITED专线下的答案。实施,工作正常,可以帮助他人