如何创建密钥库?


537

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

我需要在我的应用中使用Google Maps,但我不知道错过了哪些步骤。请向我提供具体的详细步骤(我对指南不了解)。


您已经做过任何事情,还是正在寻找入门建议?
ATK

2
这些是我执行的以下步骤: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

@ user482762:CommonsWare的答案对您有用吗?您为什么不设法执行win cmd?
ATK

CommonsWare的答案对我不起作用,当我尝试在cmd中执行命令时,出现错误提示:“ $不被识别为内部或外部命令,可操作程序或批处理文件”。感谢您的帮助
user482762

啊! 您实际上不想输入$。在Windows上,当您使用命令行(cmd应用程序)时,输入提示通常看起来像DRIVE:/ DIRECTORY>,例如“ c:\”。在UNIX上,提示通常看起来像“ $”或仅仅是“>”。命令中的“ $”表示输入提示,而不是命令的一部分。尝试使用所有参数(不带$)运行keytool。
atk

Answers:


544

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

因此,在Windows上,打开命令窗口并切换到该目录,然后输入如下命令

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

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

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

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


6
我个人对-keysize 2048而不是默认1024的定义大声疾呼,我现在使用的是4096
scottyab 2013年

9
对于信息,就我而言,我需要以管理员权限
Intuitisoft

这给了我:E / TokenRequestor:与OAuth2相关的配置错误,请检查。详细错误:UNlocated_ON_API_CONSOLE我已经通过在API控制台中输入我的SHA1来创建证书。
Rohan Taneja

直接链接到有关手动生成密钥库的文档:developer.android.com/studio/publish/…–
methodsignature

我已使用此命令设置2个密码,以便您跳过某些提示: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
Albert Vila Calvo,

158

在Android Studio中签名您的应用

要在Android Studio中以发布模式签名您的应用,请执行以下步骤:

1-在菜单栏上,单击构建>生成签名的APK。


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


3-在“新密钥库”窗口中,提供所需的信息,如图所示。密钥的有效期至少为25年,因此您可以在应用程序的整个生命周期内使用相同的密钥对应用程序更新进行签名。

在此处输入图片说明

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

5-在下一个窗口中,为签名的APK选择一个目标,然后单击“完成”。 在此处输入图片说明

参考

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


2
虽然这个答案是正确的,但只有在您已经安装了android studio的情况下,这才很方便。
Seph Reed

98

我很疯狂地寻找如何在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国家短代码。例如:美国是“ US”
  • 应用程序的别名,作为.keystore中的单个实体的标识符(可以有多个)

  • keypass用于保护该特定别名的密码。
  • keystore将在其中创建.keystore文件的路径(标准扩展名实际上是.ks
  • storepass用于保护整个.keystore内容的密码。
  • 有效期天的大写金额的应用程序将与此有效的.keystore

它对我来说真的很好用,它在控制台中不需要任何其他内容,只创建文件即可。有关更多信息,请参见keytool-密钥和证书管理工具


我从未遇到过此类错误,但尝试进行触摸/path/file.keystore并使用storepass参数指出该错误。
EliuX '16

很棒!我唯一的变化是我使用了扩展名.jks for Android
Adam Mendoza

2
jks通常是Java官方密钥库扩展,但keystore建议将其用于android应用
EliuX

1
@eliasbagley,这是因为上面编写的命令-storepass在另一行开始。将所有内容写在一行上就可以了。
tormuto

82

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

  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 keystore password:
    Re-enter new password:
  3. 输入>,它将询问您的详细信息。

    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. 输入>再次输入密码。

    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]在Studio中创建密钥库...

  1. 单击生成(ALT + B) > 生成签名的APK ...
    在此处输入图片说明

  2. 单击新建。(ALT + C)
    在此处输入图片说明

  3. 浏览密钥库路径(SHIFT + ENTER)>选择路径>输入名称> 确定 在此处输入图片说明

  4. 填写有关.jks/keystore文件 的详细信息在此处输入图片说明

  5. 下一个
    在此处输入图片说明

  6. 您的档案
    在此处输入图片说明

  7. 输入Studio主密码(如果不知道,可以重设) > 确定 在此处输入图片说明

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

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

    点击完成

    在此处输入图片说明

做完!!!


28

本教程:

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

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

我不确定的部分是保存在哪里以及给密钥库指定什么名称文件指定。

我似乎把它放在哪里都没关系,只是要确保它安全并保留许多备份。我只是把它放在我的应用程序目录中

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

下一部分是如何命名别名。再次似乎无所谓,所以我再次使用了app_name。保持与以前使用的密码相同。填写其余字段,您就完成了。



11

使用此命令创建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"

5

首先要知道的是,您是否处于调试或发布模式。来自开发人员站点“有两种构建模式:调试模式和发布模式。在开发和测试应用程序时使用调试模式。当您要构建可以直接分发的应用程序的发布版本时,可以使用发布模式。给用户或在应用市场(例如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 <-此链接几乎解释了您需要了解的所有内容。


2

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

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

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

该链接说明了如何使用Android Studio进行操作,但如果我还记得的话,它在Eclipse上非常相似

小心

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

如何在Android Studio中导出项目?


2

我想建议使用gradle的自动方式

**还要在最后一个命令(例如国家/地区)中为密钥库定义至少一个其他参数'-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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.