29

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

安卓密钥库选择

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

  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. 运行密钥工具。
  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)

编辑:

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

4

13 回答 13

72

以下步骤对我有用:

  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

告诉它在 drive 中创建它D:

于 2013-05-05T15:45:39.660 回答
54

It does help you. You have to specify the location of the file that will be generated. For example specify C:\Documents and Settings\loginname\market.keystore

于 2011-07-06T20:23:51.390 回答
13

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

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

于 2018-01-06T06:33:36.740 回答
8

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

于 2011-07-06T20:29:15.167 回答
3

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

于 2016-06-02T07:47:55.600 回答
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。

于 2012-02-16T16:13:32.450 回答
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。一切完成后,您可以重新分配“只读”权限。祝你好运!

于 2012-06-28T10:18:59.743 回答
1

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

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

希望有帮助?

于 2016-09-20T09:28:44.050 回答
0

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

于 2012-07-09T16:55:40.833 回答
0

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

于 2012-05-15T13:47:06.713 回答
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

于 2015-02-18T16:33:57.453 回答
0

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

于 2019-06-02T19:48:28.367 回答
0

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

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

然后我收到了一系列关于我的别名的姓名、组织、位置和密码的问题,就是这样!

于 2015-09-24T00:58:33.083 回答