Gradle 中不同产品风格的不同 keyStore

问题描述 投票:0回答:5

我在 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 
        }
    }

两种风格我都有不同的密钥存储。我可以为不同的构建类型指定不同的密钥库,例如调试/发布,但如何为每种风格指定不同的密钥库。

android android-studio gradle build.gradle android-keystore
5个回答
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
        }
  }

      }

希望对您有帮助。


6
投票

您可能还想将您的凭据保存在单独的文件中。

在你的 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
        }
    }
}

在您的 app/src/flavor_name/keystore.properties 中

storePassword=...
keyPassword=..
keyAlias=...
storeFile=src/flavor_name/keystore_file.jks //or any other path of jks file

5
投票

你可以使用这样的东西:

android {
    signingConfigs {
        dev {
        }

        staging {
        }
    }

    productFlavors {
        dev {
            signingConfig signingConfigs.dev
        }

        staging {
            signingConfig signingConfigs.staging
        } 
    }
}

0
投票

对我来说,在构建时,它会使用发布签名配置。


0
投票

1。创建所需数量的签名配置 2. 在“productFlavors”中指定“signingConfig”而不是“buildTypes”并享受乐趣。

signingConfigs {
    funnyRelease {
        // do stuff
    }
    debug {
        storeFile file('debug.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }        
}

buildTypes {
    release {
        // !!!do not specify signing on the build type!!!
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard- 
            android.txt"),"proguard-rules.pro"
    }
}

productFlavors {
    flavorOne {
       // signing for "flavorOne" specified as debug
        signingConfig signingConfigs.debug
    }
    flavourTwo {
        // signing for "flavourTwo" specified as funnyRelease
        signingConfig signingConfigs.funnyRelease
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.