首页 > 解决方案 > 以编程方式从 Google Drive 下载 APK 不起作用

问题描述

当通过url找到随机的apk在线时,我可以成功下载并安装它们,提示用户询问是否要安装。但是,当我将相同的 apk 上传到 Google 驱动器,然后从 Google 驱动器运行下载 url 时,该 apk 不起作用。我在设备屏幕上收到“解析包时出现问题” 。我放了一个日志来查看正在下载多少数据。看来从谷歌驱动器下载的apk几乎没有apk的大小。大约 50k 而不是 4MB。我在网上看到很多关于此的问题,但没有人谈到 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);

    }
}

标签: downloadgoogle-drive-apiapk

解决方案


基于此页面,应用安装时出现解析错误。

当您尝试安装应用程序时,突然弹出一个窗口说“解析包时出现问题” ,这意味着应用程序由于apk 解析器解析问题而无法安装。

发生此解析错误的原因有多种,并且其中之一肯定是导致您的解析错误的原因:

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

请按照以下步骤修复移动设备上的 android 解析错误:

  • 检查清单应用程序 apk 文件。

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

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

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

    • 解析错误也可能由于文件损坏而导致。在这种情况下,请下载一个新的但完整的 APK 文件,然后再次尝试重新安装。这可能会帮助你。
  • 禁用防病毒软件。

    • 如果您安装了防病毒和清洁应用程序等应用程序,那么这也可能会阻止某些应用程序的安装。这种预防是出于手机的安全目的。他们阻止来自不受信任站点的可疑下载。如果您真的想安装该应用程序,请暂时禁用防病毒软件。
  • 清除 Play 商店的缓存 cookie。

    • 打开谷歌游戏商店
    • 选择侧边栏并选择“设置”选项。</li>
    • 在一般设置中,您会发现“清除本地搜索记录”。</li>

推荐阅读