【问题标题】:Programmatically download APK from Google Drive doesn't work以编程方式从 Google Drive 下载 APK 不起作用
【发布时间】:2018-10-26 18:59:04
【问题描述】:

当通过urls在网上找到随机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);

    }
}

【问题讨论】:

    标签: download google-drive-api apk


    【解决方案1】:

    根据这个page,app安装时出现解析错误。

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

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

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

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

    • 检查 Manifested app apk 文件。

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

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

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

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

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

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

    【讨论】:

    • 我不再从事那个项目。老实说,我不记得当时的解决方案,也没有尝试过这些说明,但我会标记为正确的。
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多