我在应用程序中添加了一个选项,用户可以在其中将应用程序备份到Google云端硬盘。



我正在获得对数据库的引用,如下所示:

File dbFile = new File(context.getDatabasePath(DATABASE_NAME).getAbsolutePath());


当我在上面登录以获取路径时,将返回-/data/user/0/my.package.name/databases/DatabaseName.DB

然后,我创建数据库的副本并将其上传到Google云端硬盘。

一切正常。



现在,在另一台设备上,我将数据库下载到应用程序的目录中。
保存后,通过执行以下操作移动/替换旧数据库:

try {
    //The database is stored here from Google Drive
    File directoryFile = context.getExternalFilesDir("BackupDB");
    InputStream mInput = new FileInputStream(directoryFile+"/DatabaseName.DB");
    //Path to current database - /data/user/0/my.package.name/databases/DatabaseName.DB
    String outFileName = context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0){
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();

} catch (Exception e) {
    e.printStackTrace();
}


以上在我的设备上正常工作。



我见过有人说/data/data/只能由有根设备访问,但是我也见过很多人说我们可以覆盖应用程序的数据库。

我的问题:

对我来说,在所有Android版本上访问和覆盖我的应用程序数据库是否安全?还是有限制?

最佳答案

我认为这没有问题,因为您正在访问应用程序数据专用的目录,并且一旦应用程序被删除,它们就会被删除,请检查此页上的表:

Data and file storage overview

另一方面,为什么不使用Cloud Firestore DB而不是备份sqlite DB并将其存储到Google驱动器然后下载等。

只需在FireBase CoudFirestore上创建数据库并使用规则保护它,使用API​​将您的数据库加载到任何设备上的应用程序中,然后将其本地存储在Room DB中,将Room用作应用程序的唯一真实来源。

09-30 18:47
查看更多