【问题标题】:How can I create a keystore?如何创建密钥库?
【发布时间】:2011-04-29 04:55:23
【问题描述】:

为 android 创建密钥库的步骤是什么?

我需要在我的应用程序中使用谷歌地图,但我不知道我错过了哪些步骤。 请提供具体的详细步骤(我没有从指南中理解)。

【问题讨论】:

  • 您是否已经做过任何事情,或者您正在寻找建议以开始使用?
  • 这些是我完成的以下步骤:1-安装 eclipse 2- 安装 jdk 3- 安装 sdk 4- 安装 android 插件。我没有设法在win cmd中执行命令,命令: $ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 (生成私钥)。谢谢
  • @user482762:CommonsWare 的回答对你有用吗?为什么你没有设法执行 win cmd?
  • CommonsWare 的回答对我不起作用,当我尝试在 cmd 中执行命令时,我收到错误消息:“$ 未被识别为内部或外部命令、可运行程序或批处理文件”。感谢您的帮助
  • 啊!您不想实际键入 $。在 Windows 上,当您使用命令行(cmd 应用程序)时,输入提示通常看起来像 DRIVE:/DIRECTORY>,像 "c:\" 。在 unix 上,提示通常看起来像“$”或只是“>”。命令中的“$”表示输入提示,而不是命令的一部分。尝试使用所有参数运行 keytool,不带 $。

标签: android keystore


【解决方案1】:

要回答标题中的问题,您需要使用任何标准 JDK 发行版附带的 Java Keytool 实用程序创建一个密钥库,该实用程序位于 %JAVA_HOME%\bin。在 Windows 上,这通常是 C:\Program Files\Java\jre7\bin

在 Windows 上,打开命令窗口并切换到该目录。在 Linux 类型的操作系统上,对终端执行相同操作。然后运行:

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

Keytool 提示您提供密钥库的密码,提供专有名称字段,然后提供您的密钥的密码。然后它会在您所在的目录中将密钥库生成为一个名为my-release-key.keystore 的文件。密钥库和密钥受您输入的密码的保护。密钥库包含一个密钥,有效期为 10000 天。 alias_name 是您稍后将使用的名称,用于在签署您的应用程序时引用此密钥库。

有关 Keytool 的更多信息,请参阅文档:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

有关签署 Android 应用程序的更多信息,请访问此处:http://developer.android.com/tools/publishing/app-signing.html

【讨论】:

  • 很好地定义 -keysize 2048 而不是默认的 1024 我现在正在使用 4096
  • 有关信息,在我的情况下,我需要使用 管理员权限 打开命令窗口
  • 这给了我:E/TokenRequestor: 你有错误的 OAuth2 相关配置,请检查。详细错误:UNREGISTERED_ON_API_CONSOLE 我已经通过在 API 控制台中输入我的 SHA1 创建了一个凭据。
  • 手动生成密钥库文档的直接链接:developer.android.com/studio/publish/…
  • 我使用了这个命令来设置两个密码,这样你就可以跳过一些提示:keytool -genkey -v -keystore debug.keystore -storepass android -alias android -keypass android -keyalg RSA -keysize 2048 -validity 10000。然后生成需要放入 Firebase 的 SHA-1:keytool -list -v -keystore debug.keystore -alias android -storepass android -keypass android
【解决方案2】:

基于@EliuX 的回答,与应用程序包兼容的最新工具

echo y | keytool -genkey -keystore ./android.jks -dname "n=Mark Jones, ou=JavaSoft, o=Sun, c=US" -alias android -keypass android  -storepass android -keyalg RSA -keysize 2048 -validity 2000

为了你的 build.gradle

    signingConfigs {
        debug {
            storeFile file('android.jks')
            keyAlias 'android'
            keyPassword 'android'
            storePassword 'android'
        }
    }

【讨论】:

    【解决方案3】:

    如果不想或不能使用 Android Studio,可以使用 create-android-keystore NPM 工具:

    $ create-android-keystore quick
    

    这会在当前目录中生成一个新生成的密钥库。

    更多信息:https://www.npmjs.com/package/create-android-keystore

    【讨论】:

      【解决方案4】:

      我想建议使用 gradle only

      的自动方式

      ** 在最后一个命令中为密钥库定义至少一个附加参数,例如国家'-dname', 'c=RU'**

      apply plugin: 'com.android.application'
      
      // define here sign properties
      def sPassword = 'storePassword_here'
      def kAlias = 'keyAlias_here'
      def kPassword = 'keyPassword_here'
      
      android {
          ...
          signingConfigs {
              release {
                  storeFile file("keystore/release.jks")
                  storePassword sPassword
                  keyAlias kAlias
                  keyPassword kPassword
              }
          }
          buildTypes {
              debug {
                  signingConfig signingConfigs.release
              }
              release {
                  shrinkResources true
                  minifyEnabled true
                  useProguard true
                  signingConfig signingConfigs.release
                  proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
              }
          }
          ...
      }
      
      ...
      
      task generateKeystore() {
          exec {
              workingDir projectDir
              commandLine 'mkdir', '-p', 'keystore'
          }
          exec {
              workingDir projectDir
              commandLine 'rm', '-f', 'keystore/release.jks'
          }
          exec {
              workingDir projectDir
              commandLine 'keytool', '-genkey', '-noprompt', '-keystore', 'keystore/release.jks',
                  '-alias', kAlias, '-storepass', sPassword, '-keypass', kPassword, '-dname', 'c=RU',
                  '-keyalg', 'RSA', '-keysize', '2048', '-validity', '10000'
          }
      }
      
      project.afterEvaluate {
          preBuild.dependsOn generateKeystore
      }
      

      这将在项目同步和构建时生成密钥库

      > Task :app:generateKeystore UP-TO-DATE
      > Task :app:preBuild UP-TO-DATE
      

      【讨论】:

      • 这些 jks 文件来自哪里,为什么每个人都表现得好像这是一个秘密
      • @nikoss /app/keystore/release.jks
      • @nikoss jks 包含用于签署应用程序的私钥。所以从技术上讲,jks 不是秘密,但它确实包含秘密,所以你不希望它落入恶意之手。
      【解决方案5】:

      从命令行创建密钥库文件:

      1. 打开命令行:

        Microsoft Windows [Version 6.1.7601]
        Copyright (c) 2009 Microsoft Corporation.  All rights reserved
        
        // (if you want to store keystore file at C:/ open command line with RUN AS ADMINISTRATOR)
        
        C:\Windows\system32> keytool -genkey -v -keystore [your keystore file path]{C:/index.keystore} -alias [your_alias_name]{index} -keyalg RSA -keysize 2048 -validity 10000[in days]
        
      2. Enter > 会提示你输入密码 > 输入密码(不可见)

        Enter keystore password:
        Re-enter new password:
        
      3. Enter > 它会询问您的详细信息。

        What is your first and last name?
         [Unknown]:  {AB} // [Your Name / Name of Signer] 
        What is the name of your organizational unit?
         [Unknown]:  {Self} // [Your Unit Name] 
        What is the name of your organization?
         [Unknown]:  {Self} // [Your Organization Name] 
        What is the name of your City or Locality?
         [Unknown]:  {INDORE} // [Your City Name] 
        What is the name of your State or Province?
         [Unknown]:  {MP} //[Your State] 
        What is the two-letter country code for this unit?
         [Unknown]:  91
        
      4. 输入 > 输入 Y

        Is CN=AB, OU=Self, O=Self, L=INDORE, ST=MP, C=91 correct?
        [no]:  Y
        
      5. Enter > 再次输入密码。

        Generating 2,048 bit RSA key pair and self-signed certificate    (SHA256withRSA) with a validity of 10,000 days
            for: CN=AB, OU=Self, O=Self, L=INDORE, ST=MP, C=91
        Enter key password for <index> (RETURN if same as keystore password):
        Re-enter new password:
        

      [存储 C:/index.keystore]

      1. 你已经完成了!!!

      在 Eclipse 中导出:

      使用您创建的密钥库文件将您的 android 包导出到 .apk

      1. 右键单击要导出的包并选择导出

      2. 选择导出 Android 应用程序 > 下一步

      3. 下一个

      4. 选择使用现有密钥库 > 浏览 .keystore 文件 > 输入密码 > 下一步

      5. 选择别名 > 输入密码 > 下一步

      6. 浏览 APK 目标 > 完成

      在 Android Studio 中:

      在工作室中创建密钥库[.keystore/.jks]...

      1. 单击构建 (ALT+B) > 生成签名的 APK...

      2. 点击新建..(ALT+C)

      3. 浏览密钥存储路径 (SHIFT+ENTER) > 选择路径 > 输入名称 > 确定

      4. 填写您的.jks/keystore 文件的详细信息

      5. 下一个

      6. 您的文件

      7. 输入工作室主密码(不知道的可以RESET) > 确定

      8. 选择 *目标文件夹 * > 构建类型

        release : for publish on app store
        debug : for debugging your application
        

        点击完成

      完成!!!

      【讨论】:

        【解决方案6】:

        我很想知道如何在 shell 中使用 单行命令 生成 .keystore,这样我就可以从另一个应用程序运行它。方法是这样的:

        echo y | keytool -genkeypair -dname "cn=Mark Jones, ou=JavaSoft, o=Sun, c=US" -alias business -keypass kpi135 -keystore /working/android.keystore -storepass ab987c -validity 20000
        
        • dname 是 .keystore 中应用程序的唯一标识符

          • cn 生成 .keystore 的个人或组织的全名
          • ou 创建项目的组织单位,它是创建项目的组织的一个细分。前任。 android.google.com
          • o 整个项目的组织所有者。它的范围比ou高。例如:google.com
          • c 国家短代码。例如:对于美国是“美国”
        • alias 应用程序的标识符作为 .keystore 中的单个实体(可以有多个)

        • keypass 用于保护特定别名的密码。
        • keystore 创建.keystore文件的路径(标准扩展名其实是.ks
        • storepass 用于保护整个 .keystore 内容的密码。
        • 有效期.keystore应用将在多少天内有效

        它对我来说非常好用,它不会在控制台中要求任何其他内容,只是创建文件。如需更多信息,请参阅keytool - Key and Certificate Management Tool

        【讨论】:

        • 我从来没有遇到过这种错误,但尝试触摸 /path/file.keystore 并使用 storepass 参数指出它。
        • 效果很好!我唯一的改变是我为 Android 使用了扩展名 .jks
        • jks 是一般的official keystore extension for java,但keystore 是推荐用于android apps 的一种。
        • @eliasbagley 这是因为上面写的命令 -storepass 在另一行开始。将所有内容写在一行上就可以了。
        • 使用像./file.keystore 这样的相对路径可能更容易,因为在您的用户希望拥有权限的当前目录中创建它,而使用/path/file.keystore 要求您的用户具有从/ 并且 /path/ 文件夹存在。
        【解决方案7】:

        使用此命令创建 debug.keystore

        keytool -genkey -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US"
        

        【讨论】:

          【解决方案8】:

          在 Android Studio 中为您的应用签名

          要在 Android Studio 中以发布模式签署您的应用,请按以下步骤操作:

          1- 在菜单栏上,点击 Build > Generate Signed APK。


          2-在“生成签名的 APK 向导”窗口中,单击“新建”以创建新的密钥库。 如果您已有密钥库,请转到第 4 步。


          3- 在 New Key Store 窗口中,提供所需的信息,如图所示 您的密钥的有效期应至少为 25 年,因此您可以在应用的整个生命周期内使用相同的密钥签署应用更新。

          4- 在“生成签名的 APK 向导”窗口中,选择一个密钥库、一个私钥,然后输入两者的密码。然后点击下一步。

          5- 在下一个窗口中,选择已签名 APK 的目标位置,然后单击完成。

          参考

          http://developer.android.com/tools/publishing/app-signing.html

          【讨论】:

          • 虽然这个答案是正确的,但只有在你已经安装了 android studio 的情况下才方便。
          • 虽然这个答案是正确的,但你甚至可以没有Build &gt; Generate Signed Bundle/APK...!因为如果你克隆一个项目并尝试编译它,它将需要keystore.jks,但要创建keystore.jks,你必须构建gradle文件才能启用菜单!要克服这个障碍,您应该编辑build.gradle 和注释signingConfig signingConfigs.release,然后注释设置密钥库属性的行。之后同步 build.gradle 并尝试再次编译 (Ctrl+F9)。
          【解决方案9】:

          您可以通过导出已签名的 APK 来创建您的密钥库。当您尝试导出/构建签名的 APK 时,它会要求提供密钥库。

          您可以选择现有的密钥库,也可以通过单击创建新密钥库轻松创建一个新密钥库

          这里有一个非常有用的链接,并且很好地解释了如何创建您的密钥库并生成一个签名的 APK

          此链接解释了如何使用 Android Studio 进行操作,但如果我记得,它在 Eclipse 上非常相似

          注意

          生成密钥库后,请将其保存在安全的地方,因为您将需要它来重新生成新的签名 APK。

          How do I export a project in the Android studio?

          【讨论】:

            【解决方案10】:

            我关注this guide 创建调试密钥库。

            命令是:

            keytool -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 9999
            

            【讨论】:

              【解决方案11】:

              首先要知道您是处于调试模式还是发布模式。来自开发者网站“有两种构建模式:调试模式和发布模式。您在开发和测试应用程序时使用调试模式。当您想要构建可以直接分发的应用程序的发布版本时,您可以使用发布模式向用户发布或在 Google Play 等应用市场上发布。”

              如果您处于调试模式,请执行以下操作...
              A. 打开终端并输入:

              keytool -exportcert -alias androiddebugkey -keystore path_to_debug_or_production_keystore -list -v
              

              注意:对于 Eclipse,调试密钥库通常位于 ~/.android/debug.keystore...

              B.当提示输入密码时,只需输入“android”...

              C.如果您处于发布模式,请按照...上的说明进行操作

              http://developer.android.com/tools/publishing/app-signing.html

              【讨论】:

                【解决方案12】:

                本教程:

                http://techdroid.kbeanie.com/2010/02/sign-your-android-applications-for.html

                在我第一次创建密钥库时对我很有帮助。很简单,但是 developer.android.com 上的说明有点太简短了。

                我不确定的部分是保存位置以及为 keystore 文件命名的名称。

                我似乎把它放在哪里并不重要,只要确保它安全并保留一些备份。 我只是把它放在我的应用程序目录中

                将文件命名为“something.keystore”,其中的内容可以是您想要的任何内容。我使用了 app_name.keystore,其中 app_name 是我的应用程序的名称。

                下一部分是如何命名别名。再次,这似乎并不重要,所以我再次使用了 app_name。保持密码与您之前使用的相同。填写其余字段即可。

                【讨论】:

                • 这就是链接答案的问题.. :(过期