【问题标题】:unrecognized option -keypass while getting MD5 Fingerprint of Debug Certificate for Google Maps API Key获取 Google Maps API 密钥的调试证书的 MD5 指纹时无法识别的选项 -keypass
【发布时间】:2011-03-17 10:09:43
【问题描述】:

我使用的是 linux ubuntu 10.10.......我的 android debug.keystore 位于~/.android/debug.keystore 位置。

我使用了http://code.google.com/android/add-ons/google-apis/mapkey.html中解释的以下终端命令

rakib@rakib-laptop:~/.android$ \
> keytool -list \
> -alias androiddebugkey \
> -keystore "~/.android/debug.keystore" \
> -storepass android \
> -keypass android

它会返回以下错误

list: unrecognized option '-keypass'
list: Try 'list -help' for more information

我不知道为什么这不能识别 -keypass 选项......其他每个人都在使用这个。

【问题讨论】:

    标签: android google-maps keytool


    【解决方案1】:

    所以,感谢StackOverflow.comAndroid-Developer-googleGroup 的一系列快速参与,现在解决方案很明确.....让我简要介绍一下我是如何解决它的,以防万一您遇到了类似的问题

    我的 android 开发者 debug.keystore 文件位于我的 linux 中的以下位置

    ~/.android/debug.keystore
    

    然后我 cd ~ 并按照Obtaining a Maps API Key 的 Android 版 Google 项目页面中提到的步骤获取我的 debug.keystore 的 md5 指纹

    rakib@rakib-laptop:~$ \
    > keytool \
    > -list \
    > -alias androiddebugkey \
    > -keystore ~/.android/debug.keystore \
    > -storepass android \
    > -keypass android
    

    但它返回了一个令人沮丧的愚蠢错误

    list: unrecognized option '-keypass'
    list: Try 'list -help' for more information
    

    那时我开始了所有的论坛和讨论等,但没有找到正确的解决方案。在几个论坛帖子之后,我发现我对 keytool 的简单调用指的是 一个不需要的 keytool - 一个似乎来自 GNU Compiler for Java 的 keytool。 Android 需要来自 Sun/Oracle Java 的 keytool

    因此,我执行以下操作来找出我在我的 linux 系统中拥有的不同 keytool 程序的所有实例。

    rakib@rakib-laptop:~$ locate keytool
    

    它给了我以下列表

    /etc/alternatives/keytool
    /etc/alternatives/keytool.1.gz
    /home/rakib/java-WTK-2.5.2/bin/mekeytool
    /usr/bin/gkeytool-4.4
    /usr/bin/keytool
    /usr/lib/jvm/java-1.5.0-gcj-4.4/bin/keytool
    /usr/lib/jvm/java-1.5.0-gcj-4.4/jre/bin/keytool
    /usr/lib/jvm/java-1.5.0-gcj-4.4/man/man1/keytool.1.gz
    /usr/lib/jvm/java-6-sun-1.6.0.24/bin/keytool
    /usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/keytool
    /usr/lib/jvm/java-6-sun-1.6.0.24/jre/man/ja/man1/keytool.1.gz
    /usr/lib/jvm/java-6-sun-1.6.0.24/jre/man/man1/keytool.1.gz
    /usr/lib/jvm/java-6-sun-1.6.0.24/man/ja/man1/keytool.1.gz
    /usr/lib/jvm/java-6-sun-1.6.0.24/man/man1/keytool.1.gz
    /usr/share/man/man1/gkeytool-4.4.1.gz
    /usr/share/man/man1/keytool.1.gz
    /var/lib/dpkg/alternatives/keytool
    

    宾果游戏!!!已经找到了很多 keytool 实例。现在我需要使用 Java-6-sun JRE 中的那个。 因此,cd 到从上面的 locate keytool 命令中找到的那个目录

    rakib@rakib-laptop:~$ cd /usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/
    

    现在终端位于 java-6-sun/jre/bin 目录中,我输入了以下命令 - 请记住我的 debug.keystore 文件位于~/.android/debug.keystore ?

    rakib@rakib-laptop:/usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin$ \
    > ./keytool \
    > -list -alias androiddebugkey \
    > -keystore ~/.android/debug.keystore \
    > -storepass android \
    > -keypass android
    

    瞧.....它返回了我正在寻找的我的 android 调试证书的 MD5 指纹。

    androiddebugkey, Mar 19, 2011, PrivateKeyEntry, 
    Certificate fingerprint (MD5): 08:A6:77:9C:97:66:CA:00:B9:6B:82:6B:37:64:B8:14
    

    请注意,当我从 java-6-sun/jre/bin 文件夹中键入 keytool 命令时,您不能只写“keytool”。您必须改为写“./keytool” - 用句点和斜线表示您指的是终端所在的当前目录内的 keytool。 p>

    rakib@rakib-laptop:~$ WooooooHooooooooooooooo!!!!!
    

    PostNote: 之所以会出现执行错误 keytool 的问题,是因为我的 java-6-sun JRE 不是 默认的 java 环境我的Ubuntu。而是将我的 GNU java 编译器设置为默认的 java 环境。要更改 linux 机器中的默认 Java 环境,请参阅Ubuntu Community Help for Java

    【讨论】:

      【解决方案2】:

      您的keytool 似乎来自 GNU Compiler for Java。 Android 需要 Sun/Oracle Java,但 OpenJDK 也可能适合您。尝试在受支持的 Java 环境中使用 keytool

      【讨论】:

      • 如何在受支持的 Java 环境中使用 keytool?在哪里或如何获得它?
      • @syedrakib: developer.android.com/sdk/installing.html -- 你应该在为 Android 项目编写一行代码之前完成此操作。
      • 好的........ 现在看来已经解决了.....感谢@CommonsWare 的指点。我无法在此注释字段中输入代码 sn-p,因为 StackOverflow 的注释字段中的代码 sn-ps 看起来不太好.....所以 终端代码 sn-p 在下面给出作为我的问题的答案。如果对您有帮助,请给答案评分。
      • 我在写一行代码之前做了这件事……不知何故,从我的 linux 终端对“keytool”的简单调用指向了 GNU keytool……但是对“/usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/keytool”的调用指向了您上面提到的所需的 Java 支持的 keytool……您知道如何使 Java 支持的 keytool 成为默认的 keytool?这样当我从终端使用关键字“keytool”时,它指向 java 支持的 keytool 而不是 GNU keytool。 我们都在这里学习兄弟
      【解决方案3】:

      试试这个:

      keytool -list -alias androiddebugkey -keystore .android/debug.keystore
      

      如果未配置密码,您还没有插入密码。

      希望对你有帮助。

      【讨论】:

      • 我输入了你所说的...现在它又给了我一个错误> keytool -list -alias androiddebugkey -keystore "debug.keystore"> Enter key store password: 123> keytool error: gnu.javax.crypto.keyring.MalformedKeyringException: incorrect magic
      • 当您询问密码时,只需按回车键。你设置密码了吗?
      • 现在我没有输入任何密码 - 只需按下回车键。它再次返回相同的 keytool 错误
      【解决方案4】:

      你们都忽略了这是一个文档错误这一事实。

      Keytool 的 -list 命令不接受 -keypass 参数。不需要,因为 -list 不会以任何方式访问私钥。

      如果你不带参数调用“keytool”,它会告诉你:

      -列表 [-v | -rfc] [-保护] [-别名] [-keystore ] [-storepass ] [-storetype ] [-providername ] [-providerclass [-providerarg ]] ... [-providerpath]

      注意:没有-keypass

      这是一个文档错误:http://code.google.com/android/add-ons/google-apis/mapkey.html

      当您切换到使用 Sun/Oracle 的 keytool 时它起作用的原因是该版本在这种情况下不会发出错误信号。但正如你在上面看到的——它也特别不使用它。

      公钥加密基于标准。只要任何工具都可以访问 Java 的非标准密钥库格式(或者如果您使用标准密钥库格式,例如 PKCS12),您就应该能够将该工具用于任何涉及实际签名的任务,以及您可以哄骗工具的任何 MD5 指纹表明你应该是等价的。

      不要提供虚假的论据,无论你最终使用什么 keytool 都应该没问题。

      编辑:请注意,它确实接受 -storepass 参数。如果您已经加密了整个密钥库,并且您没有提供加密密码,那么它将无法理解您的密钥库并且您会收到错误消息。您可以使用 -storepass password 提供它,也可以在提示时在命令行上提供它。设置密码后直接回车当然是行不通的。

      相比之下,-keypass 提供私钥的密码。它仅用于实际访问私钥的命令中,例如用于签名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        • 2011-07-31
        • 2012-02-05
        相关资源
        最近更新 更多