【问题标题】:Android build flavors with different ApplicationsAndroid 使用不同的应用程序构建风格
【发布时间】:2015-03-05 14:18:04
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-productflavors stetho


    【解决方案1】:

    我采取了不同的方法。我使用 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 文件一样简单。

    【讨论】:

    • 这种方法将库保留在生产构建中。如果您仅在调试版本中使用 lib,您的最终 apk 文件会更小。
    • 很公平,如果您担心的话。在我们的例子中,为了灵活性和降低复杂性,增加一点点大小是值得的
    【解决方案2】:

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

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

    【讨论】:

    • 小提示:您必须将 MyApplication 类放在同一个包中,这样您才能只使用一个清单文件:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2015-01-26
    • 2013-06-10
    • 2017-06-26
    相关资源
    最近更新 更多