创建Android应用程序密钥库时出现访问被拒绝的错误

32

我正在尝试对我的Android应用进行签名,以便在市场上发布。当我生成密钥库时,出现了拒绝访问错误。我该怎么办?

android keystore selection

以下是我一直在尝试的:

  1. 在Eclipse Helios中右键单击项目。
  2. 选择Android Tools > Export Signed Application Package。
  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. 收到了一个访问被拒绝的错误。

.

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)

编辑:

每次我检查文件夹权限时,都会发现它已经恢复为只读。无论何时我关闭只读状态时都没有出现错误。


5
我有同样的问题。尝试以管理员身份运行cmd。 - Quethzel Díaz
尝试更改保存位置。 - Sushil
16个回答

76

以下步骤适用于我:

  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

告诉它在 D: 上创建它。


4
我的主要问题是要以管理员身份运行,这在我的情况下不是默认设置。cmd.exe文件位于C:\Windows\System32目录下。 - peresisUser
https://dev59.com/zWs05IYBdhLWcg3wAdST - CodeToLife

55

它确实会帮助你。你需要指定将要生成的文件的位置,例如指定C:\Documents and Settings\loginname\market.keystore


6
你如何通过命令提示符指定这条路径? - portfoliobuilder
10
对于cmd用户,只需以管理员身份打开cmd,进入Java路径并像平常一样执行命令即可。 - AlwaysConfused
https://dev59.com/zWs05IYBdhLWcg3wAdST - CodeToLife
虽然在 keytool 文档中,它将 -keystore 描述为仅存储的名称而不是路径+名称,但这仍然令人困惑。 - Waleed93

15

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

只需将cmd提示符以管理员身份打开即可 - 这对我很有效。


9

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


这应该是创建密钥库文件的简单且唯一的方法。记住的重要事项是以“.jks”结尾的文件名。 - peresisUser

5

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


1
那帮了我一臂之力。谢谢。 - sajid

2
  1. 以管理员身份运行命令提示符
  2. 进入文件夹:C:\Program Files\Java\jdk-17.0.5\bin>
  3. 输入以下命令:

.\keytool -genkey -alias bootscurity -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore bootsecurityp.12 -validity 3650

  1. 检查文件夹:C:\Program Files\Java\jdk-17.0.5\bin,会发现您的密钥名为“bootsecurityp.12”
注:请保留HTML标签。

2

当您以管理员身份打开cmd时,它确实会对您有所帮助。


<cd "Program Files"> 如果想从C盘进入程序文件夹 - Abaid Ullah

1
以管理员身份运行eclipse可以解决问题,然后输入以下内容:
keytool -genkey -v -keystore NAME-mobileapps.keystore -alias NAMEmobileapps -keyalg RSA -keysize 2048 -validity 10000

希望它有所帮助?

1

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

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

它说:

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

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


1
解决win7上的问题(yuk),不使用Eclipse: 我将环境变量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。 完成所有操作后,您可以重新分配“只读”权限。 祝好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接