android Room数据库框架 怎么自定义 sqlite db文件路径

由于项目需要,需要保证删除app时保留数据库信息。
需要设置本地数据库文件到data外部。(保存db文件到sd卡 或者 本机)

当前项目本地数据库使用room。代码实现默认没有设置数据库文件的存储位置。

private fun buildDatabase(appContext: Context, executors: AppExecutors): AppDatabase {
return Room.databaseBuilder(appContext, AppDatabase::class.java, DATABASE_NAME).addCallback(object : RoomDatabase.Callback() {})
                        .allowMainThreadQueries()
                        //允许在主线程查询数据
            .addMigrations()
                        //迁移数据库使用,下面会单独拿出来讲
            .build()
}

百度了很多资料,
一般搜索出来的是
/data/data/目录中

public class DBHelper {
//得到SD卡路径
private final String DATABASE_PATH = android.os.Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/joke";
private final Activity activity;
//数据库名
private final String DATABASE_FILENAME;
public DBHelper(Context context) {
// TODO Auto-generated constructor stub
//这里直接给数据库名
DATABASE_FILENAME = "jokebook.db3";
activity = (Activity)context;
}

看这个搜索结果人都有些无奈了。

最多就是有人提到openHelperFactory这个方法

但是这个方法的具体实现感觉很复杂,不知道怎么实现。

项目中本地数据库记入的数据,需要数据回流服务器用来对账用的。所以要保证本地数据库数据不能被清除。

我知道greendao和纯sqlite是可以设置db文件到外部的(android本机 或者 sd卡中)

但是room这个框架怎么设置就抓瞎了。

https://blog.csdn.net/brucezcg/article/details/10209893