我已经按照以下方式创建了自定义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构建变体运行应用程序时,它要求我为每种自定义构建类型创建签名配置。
同样,执行时,我会在运行控制台中看到一条消息:
我了解这可能是必需的。但是,我试图找出的是:是否有可以更改的设置,以便我创建的debugfree和debugpro buildTypes可以像默认的debug buildType一样绕过签名配置要求? 我知道创建签名配置是一分钟的事情,如果我很快不知道,我会做的。但是出于好奇,我想了解要使自定义buildType像默认的debug buildType一样工作,而不需要签名配置,需要做些什么。
尝试设置
debuggable true
(这是默认调试buildType和我的自定义调试buildType的唯一区别),希望它能像默认调试buildType一样工作,但没有。为了使自定义buildType能够像默认值一样工作,还需要更改其他内容,即不需要签名配置。
最佳答案
构建类型没有严格的继承。但是,您可以使用相当于复制构造函数的内容:
debugfree.initWith(buildTypes.debug)
其中
debugfree
是要定义的构建类型,而debug
是要从中复制的构建类型。在其余的新构建类型初始化之前执行此操作(否则,
initFrom()
可能会抹掉该初始化的部分内容)。特别是,由于
debug
已经设置了签名配置,因此通过从debug
初始化来启动新的构建类型将使用相同的调试签名配置。但是,将
debug
构建类型用作起点时要非常小心。您不想意外结束尝试发布具有该调试签名配置的应用程序的情况。