【问题标题】:Install .APK from Android Cache从 Android 缓存安装 .APK
【发布时间】:2012-09-24 19:04:24
【问题描述】:

我在安装保存在 Android 内部缓存中的 APK 时遇到问题。 使用 context.getExternalCacheDir() 将文件保存在外部存储或外部缓存中没有问题。

但如果我尝试使用 context.getCacheDir(),日志会返回

/data/data/com.my.package/cache/update.apk:打开失败:EACCES(权限被拒绝)

                File file = context.getCacheDir();

                File outputFile = new File(file, "update.apk");
                if(outputFile.exists()){
                    outputFile.delete();
                }

                FileOutputStream fos = new FileOutputStream(outputFile);


                InputStream is = c.getInputStream();

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    fos.write(buffer, 0, len1);
                }
                fos.close();
                is.close();

                Intent intent = new Intent(Intent.ACTION_VIEW);

                //SAVE IN CACHE
                intent.setDataAndType(Uri.fromFile(outputFile), "application/vnd.android.package-archive");

                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
                context.startActivity(intent);

内部缓存似乎不允许正确读取 APK。

事实是,如果文件保存在外部存储或外部缓存中,APK 将可供用户使用,我不希望这样。

将文件保存在内部缓存中可以做什么?

谢谢

【问题讨论】:

标签: android caching save apk internal


【解决方案1】:

内部缓存似乎不允许正确读取 APK。

那是因为安装程序应用无权读取您的文件。

事实是,如果文件保存在外部存储或外部缓存中,APK 将可供用户使用,我不希望这样。

然后不要将其安装在用户的设备上。任何用户都可以在安装后随时从其设备上复制任何 APK,因此阻止用户访问 APK 的唯一方法是一开始就将其放在设备上。

将文件保存在内部缓存中可以做什么?

可能什么都没有。如果您切换到openFileOutput(),您可以查看MODE_WORLD_READABLE 是否足以让安装程序继续进行。同样,这不会阻止用户访问 APK 文件。

【讨论】:

  • 但是我看到 Google Play 使用内部缓存来保存 .apks,所以我认为它在某种程度上是可能的。 “事实是,如果文件保存在外部存储或外部缓存中,APK 将可供用户使用,我不希望这样。”这么说,我的意思是我不希望 .APK 在即使是无根设备的外部存储上也能清晰可见,但很明显,apk 必须存储在某个地方才能安装它..
  • @Mariux:请记住,Google Play 是操作系统的一部分,而您的应用不是。
  • 如果我想使用内部存储方法,我如何从中读取文件?
  • @Mariux:openFileInput(),或getFilesDir(),您认为合适。
  • 让它以这种方式工作,感谢 CommonsWare!您认为使用内部存储是一种好方法吗?
【解决方案2】:

尝试查看 chmod 命令以获取内部文件夹的读\写权限...至于 linux 它看起来像...

 chmod 777 /data/data/*** or chmod 644 /data/data/***

【讨论】:

  • 充其量,这只能在有根设备上完成,出于安全原因,这并不是一个特别好的主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多