download - 以编程方式从 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);
}
}
解决方案
基于此页面,应用安装时出现解析错误。
当您尝试安装应用程序时,突然弹出一个窗口说“解析包时出现问题” ,这意味着应用程序由于apk 解析器即解析问题而无法安装。
发生此解析错误的原因有多种,并且其中之一肯定是导致您的解析错误的原因:
- 文件可能下载不完整。
- 应用程序可能不适合您的硬件或操作系统版本。
- 由于安全问题设置
- 损坏的 APK 文件。
请按照以下步骤修复移动设备上的 android 解析错误:
检查清单应用程序 apk 文件。
- 将
Andriomanifest.xml
文件更改为其默认设置并检查该文件的名称。如果文件的原始名称是“aap.apk”并且如果您将其重命名为“app1.apk”,那么它也可能会导致错误。如果您有一些编码知识,如果编码有问题,请查看应用程序代码。安全设定。
- 出于安全目的,手机有一个内置设置,不允许安装来自第三方提供商的应用程序,而不是由 Play 商店提供的移动应用程序。不要从不受信任的网站安装应用程序。这可能真的会给你的手机带来风险。
启用 USB 调试。
- 转到设置>>向下滚动,最后,您将看到选项“关于设备”选择它。
- 寻找“内部版本号”选项。</li>
- 点击“内部版本号”7次。
- 您将看到一条消息“您现在是开发者了。”</li>
- 一旦启用返回设置
- 选择“开发者选项”。</li>
- 勾选“USB调试”。
损坏的应用程序文件。
- 解析错误也可能由于文件损坏而导致。在这种情况下,请下载一个新的但完整的 APK 文件,然后再次尝试重新安装。这可能会帮助你。
禁用防病毒软件。
- 如果您安装了防病毒和清洁应用程序等应用程序,那么这也可能会阻止某些应用程序的安装。这种预防是出于手机的安全目的。他们阻止来自不受信任站点的可疑下载。如果您真的想安装该应用程序,请暂时禁用防病毒软件。
清除 Play 商店的缓存 cookie。
- 打开谷歌游戏商店
- 选择侧边栏并选择“设置”选项。</li>
- 在一般设置中,您会发现“清除本地搜索记录”。</li>
推荐阅读
- if-statement - if 语句是否应该与 ocaml 中的 else 语句相关联?
- angular - 按键时的角度自定义自动完成
- php - PHP按数组列表优先级排序多维数组
- c# - 在 AMQP 上使用 MQTT 消息
- html - 用帖子元替换特色图片
- javascript - 无法在 php 文件中获取 axios POST 方法的属性
- java - 如何在 Java 中生成 384 位对称密钥大小?
- python - 每次函数运行时,熊猫都会创建新列
- c# - 在 ConsoleApp 中使用 Web 应用程序的现有 DbContext
- r - 随机森林预测中的缺失值:是否有类似于 Breiman 的 R 包?