Android 使用不同的应用构建风格

Android build flavors with different Applications

我试图在我的应用程序中分离调试和发布功能。例如,我正在使用 Stetho 和 Mortar 库。它们都需要覆盖应用程序 class。但我希望 Stetho 只能在调试版本中访问。至少有两种方法:

具有 MyApplication class 不同代码的发布和调试风格。但是在这种情况下,在发布版本中应该是用户的代码是重复的。

MyDebugApplication 扩展 MyApplication 并且只包含调试相关的东西。在这种情况下,需要两个清单文件并以某种方式合并。

所以我想知道哪种方法更有效?

你完全应该在发布和调试风格中使用两个基础 MyBaseApplication classes,然后在你的主范围上扩展 MyApplication class。

这样逻辑就不会重复,调试和发布时会有两种不同的行为。

我采取了不同的方法。我使用配置来确定打开了什么。这是一个简单的版本:

   if (BuildConfig.DEBUG) {
      Stetho.initialize(Stetho.newInitializerBuilder(app)
              .enableDumpapp(Stetho.defaultDumperPluginsProvider(app))
              .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(app))
              .build());
      Timber.d("Stetho configured");
    }

但想象一下,您使用的不仅仅是 BuildConfig.DEBUG 布尔资源:

app.getResources().getBoolean(R.bool.stetho_enabled)

与:

<bool name="wallet_production">true</bool>

settings.xml 资源文件或其他文件中...您甚至可以更高级,并通过 Optimizely 实时变量等支持它。

我更喜欢这个,因为如果我需要在发布版本中打开 Stetho 或日志记录或其他东西,就像更改 xml 文件一样简单。