Aeg*_*gis 9 android gradle android-keystore android-gradle-plugin
如何为不同的变体设置不同的签名配置?
例如,我们目前有两种版本的buildtypes Debug/Beta/Release,免费和付费,产生了6种变体.为了使它更容易一点,让我们忘记Debug变体,只关注freeBeta/paidBeta/freeRelease/paidRelease.
我想要的是,每个变体都使用单独的不同的signedConfig.
到目前为止,我能找到的唯一解决方案是将signingConfigs置于buildTypes中,以便所有Beta变体都具有相同的signingConfigs:
buildTypes {
beta {
signingConfigs.beta
}
release {
signingConfigs.release
}
}
Run Code Online (Sandbox Code Playgroud)
或者,使用flavor,在这种情况下,所有免费变体都具有相同的signingConfigs:
productFlavors {
free {
signingConfig signingConfigs.free
applicationId 'com.example.free'
}
paid {
signingConfig signingConfigs.paid
applicationId 'com.example.paid'
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在当前的productFlavor闭包中执行此操作?只能通过覆盖android.applicationVariants.all { variant ->并根据某些命名方案或其他一些丑陋的黑客手动为每个应用程序变体应用signingConfig 来解决这个问题吗?
我也找到了这个答案,但它似乎不适用于最新的构建工具; 编译时我收到以下错误:
FAILURE:构建因异常而失败.
其中:构建文件'/home/dev/projects/app/build.gradle'行:61
出了什么问题:评估项目':app'时出现问题.
在ProductFlavor容器上找不到属性'free'.
答案链接实际上工作正常.我让它像这样编译(使用buildTools 1.3.1和gradle-wrapper 2.7).您遇到的错误(无法在ProductFlavor容器上找到属性"free")肯定是因为您的构建类型是在build.gradle中的productFlavor之前定义的
这不行
signingConfigs {
freeBeta {}
freeRelease {}
paidBeta {}
paidRelease {}
}
buildTypes {
debug {}
beta {}
release {}
}
productFlavors {
free {}
paid {}
}
Run Code Online (Sandbox Code Playgroud)
这将工作 (只需交换productFlavors和buildType的定义顺序)
signingConfigs {
freeBeta {}
freeRelease {}
paidBeta {}
paidRelease {}
}
productFlavors {
free {}
paid {}
}
buildTypes {
debug {}
beta {}
release {}
}
Run Code Online (Sandbox Code Playgroud)
这是一个完整的工作示例:
signingConfigs {
freeBeta {
keyAlias 'freeBeta'
keyPassword 'test'
storeFile file('C:/keystore.jks')
storePassword 'test'
}
freeRelease {
keyAlias 'freeRelease'
keyPassword 'test'
storeFile file('C:/keystore.jks')
storePassword 'test'
}
paidBeta {
keyAlias 'paidBeta'
keyPassword 'test'
storeFile file('C:/keystore.jks')
storePassword 'test'
}
paidRelease {
keyAlias 'paidRelease'
keyPassword 'test'
storeFile file('C:/keystore.jks')
storePassword 'test'
}
}
productFlavors {
free {
}
paid {
}
}
buildTypes {
debug {
}
beta {
productFlavors.free.signingConfig signingConfigs.freeBeta
productFlavors.paid.signingConfig signingConfigs.paidBeta
}
release {
productFlavors.free.signingConfig signingConfigs.freeRelease
productFlavors.paid.signingConfig signingConfigs.paidRelease
}
}
Run Code Online (Sandbox Code Playgroud)
该/sf/answers/2296720331/答案将无法正常工作。
beta {
productFlavors.free.signingConfig signingConfigs.freeBeta
productFlavors.paid.signingConfig signingConfigs.paidBeta
}
release {
productFlavors.free.signingConfig signingConfigs.freeRelease
productFlavors.paid.signingConfig signingConfigs.paidRelease
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,发布构建类型将覆盖所有风格。所以签名配置freeBeta将是freeRelease.
目前,我知道的唯一解决方案是在单独的任务中签署所有构建变体。
signingConfigs {
bananaDebug {}
bananaBeta {}
bananaRelease {}
orangeDebug {}
orangeBeta {}
orangeRelease {}
lemonDebug {}
lemonBeta {}
lemonRelease {}
}
productFlavors {
banana {}
orange {}
lemon {}
}
buildTypes {
debug {}
beta {}
release {}
}
applicationVariants.all {
def flavorName = it.getFlavorName()
def buildTypeName = it.buildType.name
def buildVariantName = flavorName + buildTypeName.capitalize()
def currentSigningConfig = signingConfigs.getByName(buildVariantName)
it.mergedFlavor.signingConfig = currentSigningConfig
// If you want to sign debug build
buildTypes.debug.signingConfig currentSigningConfig
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2171 次 |
| 最近记录: |