多数据库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来进行管理的,以保证只会被载入一次。