发布签名在gradle.properties为Android(Release signing in

2019-08-18 20:08发布

所以我想转换我所有的Ant构建脚本来摇篮,我已经能够找到它的所有丰富的资源和文档,除了如何在gradle.properties文件中配置签名。

ant.properties做它像这样:

key.alias=alias
key.store.password=password
key.store=keystore.file
key.alias.password=password

但我怎么做同样的gradle中?

Answer 1:

在你gradle.properties文件存储作为ant.properties文件相同的价值观,我认为你必须做的简单的名称,如keyAlias的实例。 只是删除的点是肯定的。

然后在文件的build.gradle做这样的事:

android {
    signingConfigs {
        release
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

if (project.hasProperty('keyAlias')) {
    android.signingConfigs.release.keyAlias = keyAlias
}
// do the same for the three other properties
// ...

这样做,这样您可以灵活构建具有gradle.properties文件或无法在电脑上。 如果存在这样的代码,如果它不存在不会失败的“keyalias”属性为只读。

如果所有属性都是存在的, signingConfigs.release将完全配置,将被用来签署构建过程中的APK。 如果它不存在,则APK将建成但尚未签署。



Answer 2:

我可以用下面的做到这一点。 我试图@ XAV的解决方案,但在发布验证步骤会抱怨,如果我没有设置的属性。 我敢肯定,这是最近的变化,由于框架改变了很多。 我只是想通过指出与帮助else在最后,我可以强制释放signingConfig为null。 现在,这两个符号和无符号版本恰巧取决于gradle.properties的存在。

signingConfigs {
    release {
        keyAlias = "blue_sleep"
    }
}

buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

if (project.hasProperty('storeFile') &&
        project.hasProperty('storePassword') &&
        project.hasProperty('keyPassword')) {
    android.signingConfigs.release.storeFile = file(storeFile)
    android.signingConfigs.release.storePassword = storePassword
    android.signingConfigs.release.keyPassword = keyPassword
} else {
    android.buildTypes.release.signingConfig = null
}

其他一些有用的笔记,你可以把〜/ .gradle /的gradle.properties,如果你不希望它坐在在项目文件夹做。 您也可以设置storeFile :像这样的绝对路径属性storePath=file:///Users/nick/Dropbox/mycompany.keystore



Answer 3:

通过Eugens解决方案的启发我想出了一个短一点变化。 该代码必须是在Android {}任务配置。

File signFile = rootProject.file('sign.properties')
if (signFile.exists()) {
    Properties p = new Properties()
    p.load(new FileInputStream(signFile))
    signingConfigs {
        releaseConfig {
            storeFile file(p.storeFile)
            storePassword p.storePassword
            keyAlias p.keyAlias
            keyPassword p.keyPassword
        }
    }
    buildTypes.release.signingConfig signingConfigs.releaseConfig
}


Answer 4:

摇篮1.9不允许您定义属性。 现在,您可以将它们添加只分机。 小除了以前的答案:

signingConfigs {
    debug {
        project.ext.loadSign = false
    }
    release {
        project.ext.loadSign = true
    }
}

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        signingConfig signingConfigs.release
    }
}

if ( project.ext.loadSign ) {
    Properties p = new Properties ()
    p.load ( new FileInputStream ( rootProject.file ( 'keys/sign.properties' ) ) )

    android.signingConfigs.release.storeFile file ( p.file )
    android.signingConfigs.release.storePassword p.password
    android.signingConfigs.release.keyAlias p.alias
    android.signingConfigs.release.keyPassword p.keyPassword
}


Answer 5:

有一个关于一个很好的指南- https://github.com/almalkawi/Android-Guide/wiki/Generating-signed-release-APK-using-Gradle



Answer 6:

我的要求是,如果没有密钥库的人应该能够正确地构建。 这是我能找到的最彻底的方法:

android {
    signingConfigs {
        release    //Filled in readSigningConfigIfAvailable()
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-xyz.txt'
            readSigningConfigIfAvailable()
        }
    }
}

private void readSigningConfigIfAvailable() {
    if (hasAllSigningProperties()) {
        android.signingConfigs.release.storeFile = file(keystore_path)
        android.signingConfigs.release.storePassword = keystore_password
        android.signingConfigs.release.keyAlias = key_alias
        android.signingConfigs.release.keyPassword = key_password
        android.buildTypes.release.signingConfig = android.signingConfigs.release
    } else {
        android.buildTypes.release.signingConfig = null
    }
}

private boolean hasAllSigningProperties() {
    (hasProperty('keystore_path')
    && hasProperty('keystore_password')
    && hasProperty('key_alias')
    && hasProperty('key_password'))
}


文章来源: Release signing in gradle.properties for Android