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