从Google云端硬盘以编程方式下载APK无效

时间:2018-10-26 18:59:05

标签: download google-drive-api apk

当通过URL在线找到随机apk时,我可以成功下载并安装它们,提示用户询问是否要安装。但是,当我将相同的apk上传到Google驱动器,然后从Google驱动器运行下载网址时,该apk无法正常工作。我在设备屏幕上收到“解析程序包时出现问题” 。我放入日志以查看正在下载多少数据。而且看来,从Google驱动器下载的APK的大小几乎不应该是APK的大小。大约5万,而不是4 MB。我在网上看到很多与此有关的问题,但是没有人谈论Google Play无法发送完整文件。为了从Google云端硬盘下载完整的APK,我缺少什么吗?这是代码,

private void downloadApk(){

  //  checkVersion();
    String extStorageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
    File folder = new File(extStorageDirectory);
    folder.mkdirs();
    File file = new File(folder, "app-debug.apk");
    try {
        file.createNewFile();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    DownloadApkTask downloadApkTask = new DownloadApkTask(APKURL,file);
    downloadApkTask.execute();
}

public class DownloadApkTask extends AsyncTask<String, Void, Void> {

    String fileURL;
    File directory;
    public DownloadApkTask(String fileURL,File directory) {
        this.fileURL = fileURL;
        this.directory = directory;
    }

    @Override
    protected Void doInBackground(String... params) {

        Log.v("DO in Back started","Started");
        try {

            FileOutputStream f = new FileOutputStream(directory);
            URL u = new URL(fileURL);
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.connect();
            InputStream in = c.getInputStream();
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = in.read(buffer)) > 0) {
                Log.v("PROGREsS", String.valueOf(len1));
                f.write(buffer, 0, len1);
            }
            f.close();
            directory.setReadable(true,false);
        } catch (Exception e) {
            System.out.println("exception in DownloadFile: --------"+e.toString());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void stringReturn) {
        super.onPostExecute(stringReturn);
        File file = new   File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/app-debug.apk");

        Log.v("STARTING INSTALLATION","-----");
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        startActivity(intent);

    }
}

1 个答案:

答案 0 :(得分:0)

基于此page,在安装应用时发生解析错误。

  

当您尝试安装应用程序时,突然弹出一个窗口,提示“解析程序包时出现问题” ,这意味着由于 apk解析器,无法安装该应用程序>,即正在解决问题

     

发生此解析错误的原因有多种,肯定是您解析错误的原因之一:

     
      
  • 文件可能未完全下载。
  •   
  • 该应用程序可能不适合您的硬件或操作系统版本。
  •   
  • 由于安全问题设置
  •   
  • APK文件损坏。
  •   

请按照以下显示的步骤解决移动设备上的android解析错误:

  
      
  • 检查显示的应用apk文件。

         
        
    • Andriomanifest.xml文件更改为其默认设置,并检查该文件的名称。如果文件的原始名称为“ aap.apk”,并且将其重命名为“ app1.apk”,则也可能导致错误。如果您有一些编码知识,那么如果编码有问题,请查看应用程序代码。
    •   
  •   
  • 安全设置。

         
        
    • 出于安全目的,手机具有内置设置,不允许安装来自第三方供应商的应用程序,而不是Play商店提供的移动应用程序。请勿从不受信任的网站上安装应用。这可能确实会给您的手机带来风险。
    •   
  •   
  • 启用USB调试。

         
        
    • 转到设置>>向下滚动,最后,您将看到“关于设备”选项。
    •   
    • 寻找选项“内部版本号”。
    •   
    • 点击“内部版本号” 7次。
    •   
    • 您将看到一条消息“您现在是开发人员。”
    •   
    • 启用后返回设置
    •   
    • 选择“开发人员选项”。
    •   
    • 勾选“ USB调试”。
    •   
  •   
  • 应用程序文件已损坏。

         
        
    • 解析错误也可能是由于文件损坏引起的。在这种情况下,请下载新的但完整的APK文件,然后重试以重新安装。这可能对您有帮助。
    •   
  •   
  • 禁用防病毒。

         
        
    • 如果您已安装了防病毒和清理程序等应用程序,则这也可能会阻止某些应用程序的安装。这种预防是出于手机的安全目的。它们阻止了从不受信任的站点进行的可疑下载。如果您确实要安装该应用程序,请暂时禁用防病毒软件。
    •   
  •   
  • 清除Play商店的缓存Cookie。

         
        
    • 打开Goog​​le Play商店
    •   
    • 选择侧边栏并选择选项“设置”。
    •   
    • 在常规设置中,您会发现“清除本地搜索历史记录”。
    •   
  •