2011-07-06 36 views
16

Tôi đang cố gắng ký ứng dụng Android của mình để tôi có thể phát hành ứng dụng đó trong Market. Khi tôi tạo kho khóa, tôi nhận được lỗi truy cập bị từ chối. Làm thế nào để sửa lỗi này?Truy cập bị từ chối khi tạo kho khóa cho ứng dụng Android

android keystore selection

Đây là những gì tôi đã cố gắng để làm:

  1. dự án Nhấp chuột phải trong Eclipse Helios.
  2. Công cụ Android> Xuất gói ứng dụng đã ký.
  3. Nhấp vào tiếp theo.
  4. Tôi chọn "Tạo kho khóa mới" và nhận ra rằng không có gì để giúp tôi. Nó vẫn yêu cầu vị trí của kho khóa. Vì vậy, tôi quyết định làm điều đó một cách khó khăn.
  5. Đã tắt quyền truy cập chỉ đọc trên C:\Program Files\Java\jdk1.6.0_25\bin và cấp quyền kiểm soát toàn bộ nhóm CREATOR OWNER của thư mục.
  6. Mở dòng lệnh trên Windows 7 64 bit.
  7. Traverse to C:\Program Files\Java\jdk1.6.0_25\bin.
  8. Chạy keytool.
  9. Có lỗi truy cập bị từ chối.

.

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) 

Edit:

Mỗi lần tôi kiểm tra các điều khoản thư mục, tôi thấy rằng nó đã trở lại con read-only. Không có lỗi nào khi tôi tắt chế độ chỉ đọc.

+1

Tôi gặp vấn đề tương tự. Hãy thử chạy cmd với tư cách quản trị viên. – Quethzel

Trả lời

25

Nó sẽ giúp bạn. Bạn phải chỉ định vị trí của tệp mà sẽ được tạo. Ví dụ: chỉ định C: \ Documents and Settings \ loginname \ market.keystore

+1

và làm thế nào để bạn xác định đường dẫn này thông qua cmd? – portfoliobuilder

8

Kho lưu trữ mà Android SDK cần truy cập không giống với JDK. Bạn có thể chỉ cần sử dụng tùy chọn "tạo kho khóa mới" của trình hướng dẫn Android và chọn bất kỳ thư mục nào bạn có quyền truy cập ghi vào: trình hướng dẫn sẽ tạo ra một kho khóa mới. Bạn không cần phải sử dụng biểu mẫu khóa công cụ JDK.

+0

Đây là cách dễ dàng và duy nhất để tạo tệp kho khóa. Điều quan trọng cần nhớ là kết thúc tên tệp bạn chọn bằng ".jks". – peresisUser

1

Tôi đã gặp vấn đề tương tự. Bạn cần xác định biến môi trường JAVA_HOME của mình.

Đọc "Thiết lập cơ bản để ký kết" đoạn liên kết này: http://developer.android.com/guide/publishing/app-signing.html#setup

Nó nói:

Trước khi bắt đầu, hãy chắc chắn rằng các tiện ích Keytool và tiện ích Jarsigner có sẵn cho SDK xây dựng công cụ. Cả hai công cụ này đều có sẵn trong JDK. Trong hầu hết các trường hợp, bạn có thể nói cho các công cụ xây dựng SDK cách tìm các tiện ích này bằng cách thiết lập biến môi trường JAVA_HOME của bạn để nó tham chiếu đến một JDK phù hợp. Ngoài ra, bạn có thể thêm phiên bản JDK của Keytool và Jarsigner vào biến PATH của bạn.

Nếu bạn đang phát triển trên một phiên bản Linux ban đầu đi kèm với GNU Compiler cho Java, hãy đảm bảo rằng hệ thống đang sử dụng phiên bản JDK của Keytool, thay vì phiên bản gcj. Nếu Keytool đã có trong PATH của bạn, nó có thể trỏ đến một liên kết tượng trưng tại/usr/bin/keytool.Trong trường hợp này, hãy kiểm tra mục tiêu liên kết tượng trưng để chắc chắn nó trỏ đến Keytool trong JDK.

0

Nếu bạn đang sử dụng Windows 7, đảm bảo bạn đang chạy nhật thực làm quản trị viên.

+0

Vì tôi chạy nó trong dòng lệnh (công cụ keygen), tôi cần chạy dòng lệnh với tư cách quản trị viên, sau khi nó hoạt động và tôi không nhận được nhiều thông báo từ chối truy cập nữa. – AgentKnopf

1

Khắc phục sự cố trên win7 (yuk) mà không cần Eclipse: tôi có biến môi trường JAVA_HOME được đặt thành ..../JDK1.7.0_03 (android được lập trình từ GLbasic) và tôi chỉ thực hiện 2 việc để khắc phục sự cố : 1) trong thư mục ..../Java/JDK1.7.0_03 tôi đã xóa quyền "chỉ đọc" của thư mục con/bin, chứa keytool.exe. 2) tôi mở giao diện điều khiển "là quản trị viên" (mặc dù đó là tài khoản duy nhất trên win7 của tôi). sau đó bạn làm cd ... JDK/bin, chạy một lần nữa keytool.exe, và bạn nhận được các tập tin nickname.keystore tự động tạo ra trong JDK/bin. Khi mọi thứ đã hoàn tất, bạn có thể gán lại quyền "chỉ đọc". Chúc may mắn!

0

chỉ đọc được trên các cửa sổ 7 đã giúp tôi. đừng quên mật khẩu mặc định "changeit"

37

Dưới bước làm việc cho tôi:

  1. Run command prompt as administrator

  2. không được kiểm soát duy nhất tùy chọn đọc trong C:\Program Files\Java\jdk1.6.0_25\binnày có thể không được yêu cầu

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

Cho nó để tạo nó trong ổ đĩa D:.

+0

cảm ơn điều này đã giúp – ThatAwesomeCoder

+0

Điều chính đối với tôi là chạy với tư cách quản trị viên không phải là mặc định cho tôi. cmd.exe nằm trong C: \ Windows \ System32 – peresisUser

0

Đảm bảo không có tệp kho khóa nào khác tại vị trí này C: \ Program Files \ Java \ jdk1.6.0_25 \ bin. Nếu có, hãy giữ nó ở một nơi khác và thử lệnh một lần nữa:

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

0

Có vẻ rằng đó là dễ dàng hơn để thực hiện nó trong dòng lệnh thông qua keytool và cách tiếp cận mới nhất genkeypair. Tôi đã hoàn thành với những điều sau:

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

Sau đó, tôi có một số câu hỏi về tên, tổ chức, địa điểm và mật khẩu cho bí danh của tôi và đó là nó!

0

mở Command Prompt như một quản trị viên đã giúp tôi (Đối với Windows 8.1)

0

Chạy nhật thực as administrator giải quyết vấn đề, sau đó gõ như sau:.

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

Hy vọng nó giúp đỡ?

2

Truy cập bị từ chối vì bạn không phải là quản trị viên.

Chỉ cần mở dấu nhắc cmd làm quản trị viên - đã hoạt động đối với tôi.

Các vấn đề liên quan