如何使用“ minifyEnabled true”调试应用程序并在发布模式下禁用MultiDexApplication

时间:2018-07-09 23:01:53

标签: android android-gradle

build.gradle有行时:

buildTypes {
    debug{
        minifyEnabled true
    }

我们无法调试应用程序。一种解决方法是编写:

    ...
    multiDexEnabled true
}
buildTypes {
    debug{
        minifyEnabled false
        debuggable true
    }

...
implementation 'com.android.support:multidex:1.0.3'

然后在MyApplication文件中写入:

public class MyApplication extends MultiDexApplication

但是当我们进入发布模式时,应用程序仍然继承自MultiDexApplication。因此,旧设备可能会存在一些兼容性问题。例如,在Gradle中,是否可以避免在发布模式下MultiDexApplication并仅在调试模式下保留它?我读过https://xrubio.com/2016/10/disabling-removing-code-on-release-builds/,但不确定是否能帮上忙。

1 个答案:

答案 0 :(得分:2)

一种选择是使用build variants。基本上,这使您可以指定仅包含在应用程序的调试或发行版中的代码。为此,您可以将只需要的代码放在src/debugsrc/release而不是src/main的一个版本中。确切的代码由您决定。您在这里有几个选择。

1。。您可以拥有MyApplication的两个副本,一个副本在MultiDexApplication中扩展src/debug,而另一个副本在Application中扩展基类。 src/release。这样,multi-dex代码仅包含在调试版本中,而不包含在发行版本中。您仍然在src/main/AndroidManifest.xml中指定应用程序类。如果您的Application类中没有其他任何内容,则此选项是最佳选择。

2。。如果您的应用程序类中包含除multi-dex之外的重要代码,那么拥有一个包含其他所有内容的基本抽象类并在src/debug中进行扩展可能会更容易。和src/main,将以下内容添加到您的调试版本中(如here所述):

public class MyApplication extends BaseApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

3。。第三个选项是在调试与发行版中实际声明不同的应用程序类。这可以通过在src/debug/AndroidManifest.xml中使用该声明以及等效的发行版来完成。然后,您可以执行所需的任何操作,包括不在一个版本中声明应用程序类。如果您的类中有几个不同的部分,这些部分在发布和调试之间是不同的,或者在其中之一中不需要应用程序类,那么这会很好。