在Gradle中为不同产品风格使用不同的keyStore

15

我的build.gradle文件中指定了不同的productFlavors

 dev {
            applicationId "com.advancedprogressive.chare.dev"
            versionCode 83
            versionName "2.2.1"
        }
staging {
            applicationId "com.advancedprogressive.chare.qa"
            versionCode 119
            versionName "2.8.1"
        }

并且具有类似签名配置的功能

signingConfigs {
        release {
            storeFile 
            storePassword 
            keyAlias 
            keyPassword         }
        debug {
            keyPassword 
            storeFile 
            keyAlias 
            storePassword 
        }
    }

我有不同的密钥库适用于两种风味。 我可以为不同的构建类型(例如debug / release)指定不同的密钥库,但是如何为每个风味指定不同的密钥库。

4个回答

15

使用以下gradle代码,您可以实现多个产品风格:

   android {
  signingConfigs {
    release {
        keyAlias 'alias'
        keyPassword 'password'
        storeFile file('first.keystore')
        storePassword 'password'
    }

    debug {
        keyAlias 'alias'
        keyPassword 'password'
        storeFile file('second.keystore')
        storePassword 'password'
    }
  }

  compileSdkVersion 23
  buildToolsVersion "23.0.2"
  defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
     }

      productFlavors{
        dev {
            applicationId "com.advancedprogressive.chare.dev"
            versionCode 83
            versionName "2.2.1"
            signingConfig signingConfigs.debug 
        }
        staging {
            applicationId "com.advancedprogressive.chare.qa"
            versionCode 119
            versionName "2.8.1"
            signingConfig signingConfigs.release
        }
  }

      }

我希望它能帮助你。


明白了。现在我该如何指定构建是否可调试?我应该把“debuggable”标志放在哪里? - SAIR
你可以在这里找到答案:运行/调试发布版本的应用程序 - pRaNaY

6
在app/build.gradle文件中,您可能还希望将凭证保留在一个单独的文件中以确保其安全性。

在您的app/build.gradle文件中

android{
    signingConfigs {
        free {
            def keystorePropertiesFile = rootProject.file("app/src/free/keystore.properties")
            def keystoreProperties = new Properties()
            keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }

        paid {
            def keystorePropertiesFile = rootProject.file("app/src/paid/keystore.properties")
            def keystoreProperties = new Properties()
            keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }

    ...

    flavorDimensions "default"
    productFlavors {
        free {
            applicationId "com.example.freeapp"
            versionCode 1
            versionName "1.0"
            signingConfig signingConfigs.free

        }
        paid {
            applicationId 'com.example.paidapp'
            versionCode 1
            versionName '1.0'
            signingConfig signingConfigs.paid
        }
    }
}

在你的应用程序/src/flavor_name/keystore.properties文件中。
storePassword=...
keyPassword=..
keyAlias=...
storeFile=src/flavor_name/keystore_file.jks //or any other path of jks file

只是为了确保。将关键属性放在src/flavor中不会包含在最终的APK中,对吧? - Cristiano
@Cristiano,build.gradle文件不会被编译成APK文件。它只用于获取所有依赖项、创建口味、进行版本控制和签署应用程序。因此,关键细节将不会包含在内。 - bikram
如果我在调试和发布版本中有不同的密钥配置(storePassword,keyAlias,keyPassword),怎么办?我想为每种类型(例如免费和付费)都有调试和发布版本。在productFlavors中的每个项目都会自动获得两种类型以在“Build variants”窗口中运行(调试、发布)。所以我已经有了4个项目(“免费”和“付费”的调试和发布版本各2个,因此是2*2=4)。 - android developer

5
您可以使用类似以下的代码:

您可以使用这样的代码:

android {
    signingConfigs {
        dev {
        }

        staging {
        }
    }

    productFlavors {
        dev {
            signingConfig signingConfigs.dev
        }

        staging {
            signingConfig signingConfigs.staging
        } 
    }
}

8
如何为stagingRelease指定签名配置而不是stagingDebug? - piccy

0

对我来说,在构建时,始终使用发布(Release) signingConfigs。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接