我有创建自定义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
}
}
这样做的原因:我有几个productFlavors并且每个都需要一个PRO版本,我觉得这比为每个免费版本创建一个单独的PRO风格更容易。我的代码使用BuildConfig类中的APPLICATION_ID来处理差异。另一个原因是我有自定义类,如果我有两种不同的口味,需要复制两次。我知道我可以配置源集,但是当我有太多口味时我遇到了问题。很难跟踪。
现在出现问题:当我尝试使用自定义buildType构建变体运行应用程序时,它会要求我为每个自定义构建类型创建一个签名配置。
同样,我在执行时会在运行控制台中看到一条消息:
失败[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
安装失败,因为APK未签名或签名 不正确。如果这是一个基于Gradle的项目,那么请确保 签名配置在Gradle构建脚本中指定。
我知道可能需要它。但是,我试图找出的是:是否有我可以更改的设置,以便我创建的debugfree和debugpro buildType可以绕过签名配置要求,就像默认的调试buildType一样?我知道创建一个签名配置是一分钟的事情,如果我不尽快得到一些东西,我会这样做。但出于好奇,我想了解需要做些什么来使自定义buildType像默认的调试buildType一样工作,而不需要签名配置。
尝试设置
debuggable true
(这是默认调试buildType和我的自定义调试buildType的属性的唯一区别)希望它像默认调试buildType一样工作,但没有。还需要更改其他内容以使自定义buildType像默认值一样工作,即不需要签名配置。
答案 0 :(得分:2)
构建类型没有严格的继承。但是,您可以使用相当于复制构造函数的内容:
debugfree.initWith(buildTypes.debug)
其中debugfree
是您要定义的构建类型,debug
是您要从中复制的构建类型。
在新构建类型的其余初始化之前执行此操作(否则,initFrom()
可能会清除部分初始化)。
特别是,由于debug
已经设置了签名配置,因此通过从debug
初始化来启动新的构建类型使用相同的调试签名配置。
但是,当使用debug
构建类型作为起点时,非常小心。您不希望意外地尝试使用该调试签名配置发送应用程序。
答案 1 :(得分:1)
根据@CommonsWare对上述问题的评论,我将buildTypes改为如下,它就像一个魅力。在添加自定义配置之前,需要使用默认的buildType初始化自定义buildType。它是用于调试还是发布自定义类型,并且可以解决这个问题。
再次在这里发布,以防像我这样的好奇心灵可以从中受益。
buildTypes {
releasefree.initWith(buildTypes.release)
releasefree {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
releasepro.initWith(buildTypes.release)
releasepro {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationIdSuffix ".pro"
}
debugfree.initWith(buildTypes.debug)
debugfree {
shrinkResources true
applicationIdSuffix ".debug"
debuggable true
}
debugpro.initWith(buildTypes.debug)
debugpro {
shrinkResources true
applicationIdSuffix ".pro.debug"
debuggable true
}
}