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 文件一样简单。
我试图在我的应用程序中分离调试和发布功能。例如,我正在使用 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 文件一样简单。