我已经按照以下方式创建了自定义buildTypes ,并且不使用默认的调试和发布buildTypes

buildTypes {
        releasefree {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        releasepro {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            applicationIdSuffix ".pro"
        }
        debugfree {
            shrinkResources true
            applicationIdSuffix ".debug"
            debuggable true
        }
        debugpro {
            shrinkResources true
            applicationIdSuffix ".pro.debug"
            debuggable true
        }
    }

这样做的原因:我有几个productFlavor,并且每个都有一个PRO版本,我觉得这比为每个免费的版本创建单独的PRO版本要容易得多。我的代码使用BuildConfig类中的APPLICATION_ID处理差异。另一个原因是我有定制的类,如果我有两种不同的口味,则需要复制两次。我知道我可以配置sourceset,但是当我口味太多时,我会遇到问题。很难追踪。

现在出现问题:当我尝试使用自定义buildType构建变体运行应用程序时,它要求我为每种自定义构建类型创建签名配置。

android - Android Studio:创建自定义构建类型时是否需要创建签名配置?-LMLPHP

同样,执行时,我会在运行控制台中看到一条消息:



我了解这可能是必需的。但是,我试图找出的是:是否有可以更改的设置,以便我创建的debugfree和debugpro buildTypes可以像默认的debug buildType一样绕过签名配置要求? 我知道创建签名配置是一分钟的事情,如果我很快不知道,我会做的。但是出于好奇,我想了解要使自定义buildType像默认的debug buildType一样工作,而不需要签名配置,需要做些什么。

尝试设置
debuggable true

(这是默认调试buildType和我的自定义调试buildType的唯一区别),希望它能像默认调试buildType一样工作,但没有。为了使自定义buildType能够像默认值一样工作,还需要更改其他内容,即不需要签名配置。

最佳答案

构建类型没有严格的继承。但是,您可以使用相当于复制构造函数的内容:

debugfree.initWith(buildTypes.debug)

其中debugfree是要定义的构建类型,而debug是要从中复制的构建类型。

在其余的新构建类型初始化之前执行此操作(否则,initFrom()可能会抹掉该初始化的部分内容)。

特别是,由于debug已经设置了签名配置,因此通过从debug初始化来启动新的构建类型将使用相同的调试签名配置。

但是,将debug构建类型用作起点时要非常小心。您不想意外结束尝试发布具有该调试签名配置的应用程序的情况。

09-05 11:22