我在应用程序中添加了一个选项,用户可以将其备份到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用作应用程序的单个真实来源。