与签署Android APK混淆了?

3
我按照官方文档指示数字签名我的安卓应用程序。为了在发布模式下签名,他们建议使用.keystore文件以及其凭证,就像这个页面所描述的一样。由于我使用的是安卓工作室,因此我得到的是.jks文件。那么,根据文件,我需要将.jks文件放在哪里才能构建带签名的APK?请简单说明并告诉我是否做错了什么?
谢谢。
1个回答

6
您可以将 .jks 文件放在任何地方。
这意味着您可以将文件放在项目内,也可以将文件放在外部文件夹中(只需查看下面的路径)。 这取决于您的策略。
只需使用gradle配置apk的签名即可。
android {

    signingConfigs {
        release
    }

    buildTypes {
            release {
                signingConfig signingConfigs.release
            }
    }
}

简单方法:只需在您的build.gradle文件中定义凭据。

signingConfigs {
     release {
            //Pay attention to the path. You can use a relative path or an absolute path
            storeFile file("../your_key_store_file.jks")
            storePassword 'some_password'
            keyAlias 'alias_name'
            keyPassword 'key_password'

     }
  }

使用 .properties 文件将凭据存储在脚本之外(例如,如果您不想在 Git 存储库中推送凭据)。
示例: signing.properties
STORE_FILE=/path/to/your.keystore
STORE_PASSWORD=yourkeystorepass
KEY_ALIAS=projectkeyalias
KEY_PASSWORD=keyaliaspassword

然后在你的 build.gradle 文件中获取这些值:
signingConfigs {
        release
 }

然后定义:
def Properties props = new Properties()
def propFile = new File('signing.properties')
if (propFile.canRead()){
    props.load(new FileInputStream(propFile))

    if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
            props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
        android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
        android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
        android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
        android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
    } else {
        println 'signing.properties found but some entries are missing'
        android.buildTypes.release.signingConfig = null
    }
}else {
    println 'signing.properties not found'
    android.buildTypes.release.signingConfig = null
}

这意味着我们不想将.jks文件保留在apk根目录即应用程序根目录中?为什么我们在gradle中提供了这些内容storeFile file("myreleasekey.keystore") storePassword "password" keyAlias "MyReleaseKey" keyPassword "password"?请详细解释一下我的疑问的答案。 - Christ
@Christ 更新了答案。.jks文件的位置并不重要。使用gradle脚本,您可以定义路径。要使用build.gradle构建,您必须告诉Gradle凭据。您可以在脚本内或外部定义它们。 - Gabriele Mariotti
storePassword和其他凭据必须与我们在生成APK时提供的凭据匹配,对吗?请参考http://developer.android.com/tools/publishing/app-signing.html#studio。 - Christ
所以第一步是:http://developer.android.com/tools/publishing/app-signing.html#studio,我们应该使用第一步中给出的凭据来进行第二步:http://developer.android.com/tools/publishing/app-signing.html#release-mode,对吗? - Christ
是的,证书必须与生成密钥库文件时使用的相同。 - Gabriele Mariotti
1
好的,非常感谢您的时间和精彩的解释。 - Christ

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