如何从其他构建风格导入一个类

N J*_*N J 1 android android-studio build.gradle android-gradle-plugin android-build-flavors

我的项目结构如下所示

+ src
        + main // this is my common code
            + java 
                - LoginScreen // depending on condition launch screen from flavor1 or flavor2 
            + res
        + flavor1
            + java
            + res
        + flavor2
            + java
            + res
Run Code Online (Sandbox Code Playgroud)

根据条件,我在main/src 中有 Login 类,必须从flavor1 或flavor2 启动屏幕。

例如:

class LoginScreen{
......

    if(true){
        // launch ScreenUser from Flavor1 reset of screen flows from falvour1
    }else{
       // launch ScreenOTP from Flavor2 reset of screen flows from falvour2
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我为 flavor1 进行构建,它会显示 falvor2 类的错误,反之亦然。

两种口味都有不同的 applicationId,如applicationIdSuffix ".flavor1"

这可能吗?如果不是,我怎么能做到这一点?

Geo*_*att 5

当我完成这类事情时,我使用了接口和依赖注入(我使用了dagger)。就像是:

public interface LoginBehaviour {

    void goToNextScreen(Context context);
}
Run Code Online (Sandbox Code Playgroud)

然后在每个风格中定义一个实现,其中包含启动下一个屏幕的代码。就像是:

public class FlavourOneLoginBehaviour implements LoginBehaviour {

    @Override
    public void goToNextScreen(Context context) {
        context.startActivity(new Intent(context, ScreenUser.class));
    }

}
Run Code Online (Sandbox Code Playgroud)

和:

public class FlavourTwoLoginBehaviour implements LoginBehaviour {

    @Override
    public void goToNextScreen(Context context) {
        context.startActivity(new Intent(context, ScreenOTP.class));
    }

}
Run Code Online (Sandbox Code Playgroud)

您需要在每种风格中设置依赖注入容器,以便它引用本地实现(这将取决于您使用的框架)。完成后,您可以使用主项目中的容器在运行时获得 LoginBehaviour 接口的正确实现,并且您可以在其上调用 goToNextScreen 来进行导航。依赖注入是一种非常方便的方法,可确保您无需进行重大重构即可换出部分代码,并且在重用和灵活性方面有很大帮助。希望有帮助!


归档时间:

查看次数:

1190 次

最近记录:

8 年,3 月 前