多数据库Module的处理
DBFlow会生成一个GeneratedDatabaseHolder
类,里面描述了所有的数据库类、数据表和其他与库进行交互的代码。
这个类的名称是固定的,但这也意味着可能会出现这样的情况:当我们导入其他库或者子工程时,如果它也是使用DBFlow管理数据库的话,生成的这个类就会冲突。以前的版本中,DBFlow在遇到这种情况时就会报错。
为了处理这种情况,我们需要对生产器进行一点小小的设置。幸运的是,这种处理非常简单。
如果我们需要导入一个产生冲突的Module,首先需要配置一下它的build.gradle
文件,定义一下apt
的参数:
apt {
arguments {
targetModuleName 'Test'
}
}
通过设置targetModuleName
参数,生成器将会把GeneratedDatabaseHolder
类重命名为GeneratedDatabaseHolderTest
,这样类名就不会产生冲突了。
而在被导入的app中我们首先需要用通常的方法初始化我们的数据库类GeneratedDatabaseHolder
:
public class ExampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(this);
}
}
最后,由于默认方法只会载入默认命名的Holder类,所以我们还需要手动载入那个被重命名的Holder类GeneratedDatabaseHolderTest
:
FlowManager.initModule(GeneratedDatabaseHolderTest.class);
这个方法被执行多次也不会有异常的影响,因为其内部是通过Map来进行管理的,以保证只会被载入一次。