在为Android应用创建密钥库时拒绝访问

时间:2011-07-06 20:18:50

标签: android keytool private-key

我正在尝试签署我的Android应用,以便我可以在Market中发布它。当我生成密钥库时,我收到拒绝访问错误。我该如何解决这个问题?

android keystore selection

这就是我一直在尝试做的事情:

  1. 右键单击Eclipse Helios中的项目。
  2. Android工具>导出已签名的应用程序包。
  3. 点击下一步。
  4. 我检查“创建新的密钥库”并意识到它对我没有任何帮助。它仍然要求密钥库的位置。所以我决定这么做。
  5. 关闭C:\Program Files\Java\jdk1.6.0_25\bin上的只读访问权限,并授予CREATOR OWNER组对该文件夹的完全控制权。
  6. 在Windows 7 64位上打开命令行。
  7. 遍历C:\Program Files\Java\jdk1.6.0_25\bin
  8. 运行keytool。
  9. 获得访问被拒绝错误。
  10. C:\Program Files\Java\jdk1.6.0_25\bin>keytool -genkey -v -alias company -keyalg R
    SA -keysize 2048 -validity 10000 -keystore company.keystore
    Enter keystore password:
    Re-enter new password:
    What is your first and last name?
      [Unknown]:  John Smith
    What is the name of your organizational unit?
      [Unknown]:  Android
    What is the name of your organization?
      [Unknown]:  Company
    What is the name of your City or Locality?
      [Unknown]:  Albany
    What is the name of your State or Province?
      [Unknown]:  NY
    What is the two-letter country code for this unit?
      [Unknown]:  US
    Is CN=John Smith, OU=Android, O=Company, L=Albany, ST=NY, C=US correct?
      [no]:  yes
    
    Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with
     a validity of 10,000 days
            for: CN=John Smith, OU=Android, O=Company, L=Albany, ST=NY, C=US
    Enter key password for <veetle>
            (RETURN if same as keystore password):
    Re-enter new password:
    [Storing company.keystore]
    keytool error: java.io.FileNotFoundException: veetle.keystore (Access is denied)
    
    java.io.FileNotFoundException: veetle.keystore (Access is denied)
            at java.io.FileOutputStream.open(Native Method)
            at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
            at java.io.FileOutputStream.<init>(FileOutputStream.java:84)
            at sun.security.tools.KeyTool.doCommands(KeyTool.java:902)
            at sun.security.tools.KeyTool.run(KeyTool.java:172)
            at sun.security.tools.KeyTool.main(KeyTool.java:166)
    

    编辑:

    每次检查文件夹权限时,我都会看到它已恢复为只读。每当我关闭只读时都没有错误。

13 个答案:

答案 0 :(得分:50)

以下步骤对我有用:

  1. 以管理员身份运行命令提示符

  2. 取消选中C:\Program Files\Java\jdk1.6.0_25\bin 中的只读选项可能不需要

  3. keytool -genkey -v -keystore d:\my_private_key.keystore -alias my_key_alias -keyalg RSA -keysize 2048 -validity 10000

  4. 告诉它在驱动器D:中创建它。

答案 1 :(得分:32)

它确实对你有帮助。您必须指定生成 的文件的位置。例如,指定 C:\ Documents and Settings \ loginname \ market.keystore

答案 2 :(得分:8)

Android SDK需要访问的密钥库与JDK不同。您只需使用Android向导的“创建新密钥库”选项,并选择您具有写入权限的任何文件夹:向导将在那里创建一个新的密钥库。您不需要使用keytool形式的JDK。

答案 3 :(得分:4)

拒绝访问,因为您不是管理员。

只需以管理员身份打开cmd提示符 - 这对我有用。

答案 4 :(得分:1)

我遇到了同样的问题。您需要定义JAVA_HOME环境变量。

阅读此链接的“基本设置签名”段落:http://developer.android.com/guide/publishing/app-signing.html#setup

它说:

  

在开始之前,请确保SDK构建工具可以使用Keytool实用程序和Jarsigner实用程序。这两个工具都可以在JDK中找到。在大多数情况下,您可以通过设置JAVA_HOME环境变量来告诉SDK构建工具如何找到这些实用程序,以便它引用合适的JDK。或者,您可以将JDK版本的Keytool和Jarsigner添加到PATH变量中。

     

如果您在最初使用GNU Compiler for Java的Linux版本上进行开发,请确保系统使用的是Keytool的JDK版本,而不是gcj版本。如果Keytool已经在你的PATH中,它可能指向/ usr / bin / keytool的符号链接。在这种情况下,请检查符号链接目标以确保它指向JDK中的Keytool。

答案 5 :(得分:1)

在没有Eclipse的情况下解决win7(yuk)上的问题: 我将环境变量JAVA_HOME设置为.... / JDK1.7.0_03(从GLbasic编程的android),我只做了两件事来解决问题: 1)在文件夹.... / Java / JDK1.7.0_03中,我删除了/ bin子文件夹的“只读”权限,其中包含keytool.exe。 2)我以“管理员”的身份打开控制台(虽然这是我win7上唯一的帐号)。 然后你做CD ... JDK / bin,再次运行keytool.exe,你得到JDK / bin中自动生成的文件nickname.keystore。 一切都完成后,您可以重新分配“只读”权限。 祝你好运!

答案 6 :(得分:0)

如果您使用的是 Windows 7 ,请确保以管理员身份运行eclipse。

答案 7 :(得分:0)

在Windows 7上更改只读帮助了我。不要忘记默认密码“changeit”

答案 8 :(得分:0)

确保此位置没有其他密钥库文件C:\ Program Files \ Java \ jdk1.6.0_25 \ bin。如果有,请将其保留在其他位置并再次尝试该命令:

keytool -genkey -v -keystore d:\ my_private_key.keystore -alias my_key_alias -keyalg RSA -keysize 2048 -validity 10000

答案 9 :(得分:0)

似乎通过 keytool 和最新的 genkeypair 方法在命令行中更容易实现。我完成了以下任务:

keytool -genkeypair -keystore ~/.android/release.keystore -alias <my_alias> -storepass <my_cert_pass> -keyalg RSA

然后我得到了一些关于我的别名的名称,组织,位置和密码的问题,就是这样!

答案 10 :(得分:0)

以管理员身份打开命令提示符帮助我。(对于Windows 8.1)

答案 11 :(得分:0)

以管理员身份运行eclipse解决问题,然后输入以下内容:

keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000

希望有帮助吗?

答案 12 :(得分:0)

如果您使用的是Mac,请在命令的开头添加“ sudo” “ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-别名-keyalg RSA -keysize 2048 -validity 10000“