我正在尝试在我的应用程序中分离调试和发布功能。例如,我正在使用 Stetho 和 Mortar 库。它们都需要重写的应用程序类。但我希望 Stetho 只能在调试版本中访问。至少有两种方法:
具有MyApplication
不同代码的发布和调试风格类。但是在这种情况下,应该是发布版本中的用户的代码是重复的。
MyDebugApplication
扩展MyApplication
并仅包含与调试相关的内容。在这种情况下,需要两个清单文件并以某种方式合并。
所以我想知道哪种方法更有效?
我正在尝试在我的应用程序中分离调试和发布功能。例如,我正在使用 Stetho 和 Mortar 库。它们都需要重写的应用程序类。但我希望 Stetho 只能在调试版本中访问。至少有两种方法:
具有MyApplication
不同代码的发布和调试风格类。但是在这种情况下,应该是发布版本中的用户的代码是重复的。
MyDebugApplication
扩展MyApplication
并仅包含与调试相关的内容。在这种情况下,需要两个清单文件并以某种方式合并。
所以我想知道哪种方法更有效?
我采取了不同的方法。我使用 config 来确定打开了什么.. 这是一个简单的版本:
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 文件一样简单。
您完全应该MyBaseApplication
在发布和调试风格中使用两个基类,然后MyApplication
在您的主范围内扩展该类。
这样逻辑就不会重复,并且您在调试和发布时会有两种不同的行为。