use*_*760 58 android build code-signing gradle
我想把我的项目迁移到gradle.我的一个项目有多种产品风格,每种产品都必须在其发布版本中使用不同的signingConfig进行签名.所以这就是我到目前为止所尝试的:
buildscript {
...
}
apply plugin: 'android'
android {
compileSdkVersion 17
buildToolsVersion '17'
signingConfigs {
flavor1 {
storeFile file("keystore")
storePassword "secret"
keyAlias "aliasForFlavor1"
keyPassword "secretFlavor1"
}
flavor2 {
storeFile file("keystore")
storePassword "secret"
keyAlias "aliasForFlavor2"
keyPassword "secretFlavor2"
}
}
productFlavors {
flavor1 {
signingConfig signingConfigs.flavor1
}
flavor1 {
signingConfig signingConfigs.flavor2
}
}
}
dependencies {
...
}
Run Code Online (Sandbox Code Playgroud)
当我运行时,signingConfig
我得到一个gradle build
和以下错误消息:
No such field: signingConfigs for class: com.android.build.gradle.internal.dsl.GroupableProductFlavorFactory
Run Code Online (Sandbox Code Playgroud)
所以我假设productFlavors.*gradle脚本的一部分不是放置代码签名配置的正确位置.
ash*_*rov 66
你可以声明signing config
为每个flavor
在buildType
.这是我的gradle文件,用于发布使用不同密钥库的签名风格.
android {
signingConfigs {
configFirst {
keyAlias 'alias'
keyPassword 'password'
storeFile file('first.keystore')
storePassword 'password'
}
configSecond {
keyAlias 'alias'
keyPassword 'password'
storeFile file('second.keystore')
storePassword 'password'
}
}
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 23
}
productFlavors{
flavor1 {
applicationId "com.test.firstapp"
}
flavor2 {
applicationId "com.test.secondapp"
}
}
buildTypes {
release {
productFlavors.flavor1.signingConfig signingConfigs.configFirst
productFlavors.flavor2.signingConfig signingConfigs.configSecond
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
Run Code Online (Sandbox Code Playgroud)
buildTypes
块应该在productFlavors
块之后放置,我的意思是顺序很重要.
c2k*_*aps 45
根据用户指南,支持visaConfigs for flavors.
这里的问题与signingConfigs对象的范围有关.我只是将它分配给productFlavors
块内的变量,但在flavor1
flavor块之外来解决问题:
productFlavors {
def flavor1SigningVariable = signingConfigs.flavor1
flavor1 {
...
signingConfig flavor1SigningVariable
...
}
Run Code Online (Sandbox Code Playgroud)
android的gradle插件仅支持每个构建类型的签名,而不是每个版本.这样做的原因是任何给定的变体(构建类型+风格)只能由一个键签名,但可以是几个flavor组的组合.例如,您的风味组可以是cpu(x86/arm)和版本(免费/付费),这就是四种不同的变体.
您正在寻找的解决方案是为您的不同版本创建单独的构建类型.例如,您的构建类型可能是debug
,release
,release-beta
,就像这样:
...
android {
...
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
}
release-beta {
initWith release
signingConfig signingConfigs.release-beta
}
}
}
Run Code Online (Sandbox Code Playgroud)
在initWith
上面只是告诉gradle这个是release-beta
应该是一个拷贝release
生成类型,只能用一个不同的密钥签名.
.gitignore
...
/keystore.properties
Run Code Online (Sandbox Code Playgroud)
.keystore.properties
storeFile=../mystore.jks
storePassword=...
keyAliasFlavor1=...
keyPasswordFlavor1=...
keyAliasFlavor2=...
keyPasswordFlavor2=...
Run Code Online (Sandbox Code Playgroud)
应用程序/build.gradle
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(rootProject.file('keystore.properties')))
android {
...
buildTypes {
debug {
...
manifestPlaceholders = [appNameSuffix: " Dev"]
applicationIdSuffix ".dev"
}
release {
...
manifestPlaceholders = [appNameSuffix: ""]
productFlavors.all { flavor ->
flavor.signingConfig = android.signingConfigs.create("${flavor.name}")
flavor.signingConfig.storeFile = rootProject.file(keystoreProperties["storeFile"])
flavor.signingConfig.storePassword = keystoreProperties["storePassword"]
flavor.signingConfig.keyAlias = keystoreProperties["keyAlias${flavor.name}"]
flavor.signingConfig.keyPassword = keystoreProperties["keyPassword${flavor.name}"]
}
}
}
productFlavors {
Flavor1 {
applicationId "..."
manifestPlaceholders = [appNameBase: "MyApp 1"]
}
Flavor2 {
applicationId "..."
manifestPlaceholders = [appNameBase: "MyApp 2"]
}
// ... and many other flavors without taking care about signing configs
// (just add two lines into keystore.properties for each new flavor)
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序/src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
...
<application android:label="${appNameBase}${appNameSuffix}" ...>
...
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24571 次 |
最近记录: |