【问题标题】:"The signing configuration should be specified in Gradle build scripts"... I did it“应在 Gradle 构建脚本中指定签名配置”......我做到了
【发布时间】:2013-10-07 18:19:15
【问题描述】:

我来签申请的时候有个大问题:我已经按照文档设置了签名配置:

signingConfigs {
    release {
        storeFile file("lomapnew.keystore")
        storePassword "myPassword"
        keyAlias "myAlias"
        keyPassword "Something...."
    }
}

但我仍然收到此错误消息:“签名配置应在 Gradle 构建脚本中指定”

【问题讨论】:

  • 您是否为发布 buildType 设置了此签名配置?
  • 我猜该消息的意思是您需要在 gradle 文件中的 buildscript { } 内进行签名配置。
  • @JBNizet 我不认为这是真的,或者至少我的配置不是这样。

标签: android gradle signing android-gradle-plugin


【解决方案1】:

我会冒昧地猜测您尚未为发布构建类型设置签名配置。调试构建类型是自动的,因此对于所有其他构建类型(包括发布)来说,这不是很明显的必要步骤。

您可以像这样应用签名配置:

android {
    signingConfigs {
        // It's not necessary to specify, but I like to keep the debug keystore
        // in SCM so all our debug builds (on all workstations) use the same
        // key for convenience
        debug {
            storeFile file("debug.keystore")
        }
        release {
            storeFile file("release.keystore")
            storePassword "myPassword"
            keyAlias "myAlias"
            keyPassword "Something...."
        }
    }

    buildTypes {
        /* This one happens automatically
        debug {
            signingConfig signingConfigs.debug
        }
        */
        release {
            signingConfig signingConfigs.release
        }
    }
}

【讨论】:

  • 你能告诉我release.keystore 文件应该放在哪里以便文件(“release.keystore”)工作吗?
  • @Bhargav 文件方法是相对于项目根目录的。只要您更新构建文件中的路径,密钥库就存在于项目中的任何位置。 docs.gradle.org/current/javadoc/org/gradle/api/…
  • 在 git 中私下备份密钥库文件和存储库是否明智?
  • 我不会把你的版本放在 git repo 中,但这是一个判断电话。问题是它本质上是一次单程旅行。使用 git history 的工作方式,很容易恢复已删除的文件。如果您希望开源项目,您可能会不小心暴露一个长期删除的发布密钥。
【解决方案2】:

我喜欢在我的构建文件中保留密码。因此,我创建了一个加载的属性文件

def keystorePropertiesFile = rootProject.file("./local.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

然后我像这样定义signingConfigs:

   signingConfigs {
    releaseSigning {
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['keystore.live.storepassword']
        keyAlias = keystoreProperties['keystore.live.keyalias']
        keyPassword = keystoreProperties['keystore.live.keypassword']
    }
    debugSigning {
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['keystore.debug.storepassword']
        keyAlias = keystoreProperties['keystore.debug.keyalias']
        keyPassword = keystoreProperties['keystore.debug.keypassword']
    }
}

这不适用于菜单选项“创建签名的 apk”,因此我创建了风味:

    productFlavors {
    mydebug {
        signingConfig signingConfigs.debugSigning
    }
    myrelease {
        signingConfig signingConfigs.releaseSigning
    }
}

现在签名配置与工具栏上的运行按钮一起工作。对于默认密钥库,local.properties 看起来像

ndk.dir=/opt/sdk/ndk-bundle
sdk.dir=/opt/sdk
storeFile=/home/christine/.android/debug.keystore
keystore.debug.storepasswd=android
keystore.debug.keyalias=androiddebugkey
keystore.debug.keypassword=android
keystore.live.storepasswd=android
keystore.live.keyalias=androiddebugkey
keystore.livetest.keypassword=android

在您的 Jenkins 构建脚本中,您需要创建一个从 local.properties 到构建服务器上的属性文件位置的符号链接。

【讨论】:

  • 如何在我的 CI 中使用它?
  • 如果您收到错误消息“路径可能不是 null 或空字符串。path='null'”,请确保您的目标是正确的 local.properties 文件。应用路径中有一个,项目路径中有一个。 “./local.properties”以项目文件为目标,您可能在应用文件中输入了信息。只需将信息移至项目一,项目即可运行!
【解决方案3】:

答案已经给出,但我也想强调其他方式, 我们可以像下面这样手动指定信息,我们必须像这样指定密钥库位置的完整路径

signingConfigs {
    release {
        storeFile file('O:/Android/Projects/yourKeyStore.jks')
        storePassword "qwerty"
        keyAlias "yourProjectKeyAlias"
        keyPassword "ProjectKeyPassword"
    }
}

这也可以在Signing Report中指定,如果你进去

文件-->项目结构

选择你的项目应用模块并选择签名报告,你可以在其中填写信息,它会自动在gradle文件中添加以前的发布信息。

最后你只需要添加

signingConfig android.signingConfigs.release

在 buildTypes {...} 部分。这样就完成了签名过程。

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2014-07-31
    • 2015-07-18
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多