当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/,但不确定是否能帮上忙。
答案 0 :(得分:2)
一种选择是使用build variants。基本上,这使您可以指定仅包含在应用程序的调试或发行版中的代码。为此,您可以将只需要的代码放在src/debug
或src/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
中使用该声明以及等效的发行版来完成。然后,您可以执行所需的任何操作,包括不在一个版本中声明应用程序类。如果您的类中有几个不同的部分,这些部分在发布和调试之间是不同的,或者在其中之一中不需要应用程序类,那么这会很好。