从Android缓存安装.APK

时间:2012-09-24 19:04:25

标签: android caching save apk internal

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

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

/data/data/com.my.package/cache/update.apk:open failed:EACCES(Permission denied)

                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将可供用户使用,我不希望这样。

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

由于

2 个答案:

答案 0 :(得分:3)

  

看起来内部缓存不允许正确读取APK。

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

  

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

然后不要将其安装在用户的设备上。任何用户都可以在安装后随时将任何APK从他们的设备上复制下来,因此防止用户访问APK的唯一方法就是首先没有将其放在设备上。

  

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

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

答案 1 :(得分:0)

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

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