Ký ứng dụng

Android yêu cầu tất cả các APK đều phải có chữ ký số kèm theo một chứng chỉ trước khi được cài đặt hoặc cập nhật trên thiết bị. Khi phát hành bằng cách sử dụng định dạng Android App Bundle, bạn cần ký gói ứng dụng bằng một khoá tải lên trước khi tải lên Play Console. Sau đó, Tính năng ký ứng dụng của Play sẽ xử lý phần việc còn lại. Đối ứng dụng phân phối bằng tệp APK trên Cửa hàng Play hoặc trên các cửa hàng khác, bạn phải ký tệp APK theo cách thủ công để có thể tải lên.

Trang này hướng dẫn bạn một số khái niệm quan trọng liên quan đến việc ký ứng dụng và bảo mật, cách ký ứng dụng của bạn để phát hành lên Google Play bằng Android Studio và cách định cấu hình Tính năng ký ứng dụng của Play.

Sau đây là thông tin tổng quan cấp cao về những bước bạn có thể cần thực hiện để ký và phát hành ứng dụng mới lên Google Play:

  1. Tạo khoá tải lên và kho khoá
  2. Ký ứng dụng bằng khoá tải lên
  3. Định cấu hình Tính năng ký ứng dụng của Play
  4. Tải ứng dụng lên Google Play
  5. Chuẩn bị và ra mắt bản phát hành của ứng dụng

Nếu ứng dụng của bạn đã được xuất bản lên Cửa hàng Google Play bằng một khoá ký ứng dụng hiện có hoặc bạn muốn chọn khoá ký ứng dụng cho ứng dụng mới thay vì để Google tạo khoá, hãy làm theo các bước sau:

  1. Ký ứng dụng bằng khoá ký của ứng dụng.
  2. Tải khoá ký ứng dụng của bạn lên Tính năng ký ứng dụng của Play.
  3. (Đề xuất) Tạo và đăng ký chứng chỉ tải lên để nhận các bản cập nhật trong tương lai cho ứng dụng của bạn
  4. Tải ứng dụng lên Google Play
  5. Chuẩn bị và ra mắt bản phát hành của ứng dụng

Trang này cũng tìm hiểu cách quản lý khoá của riêng bạn khi tải ứng dụng lên các cửa hàng ứng dụng khác. Nếu bạn không dùng Android Studio hoặc muốn ký ứng dụng từ dòng lệnh, hãy tìm hiểu cách sử dụng apksigner.

Tính năng ký ứng dụng của Play

Với Tính năng ký ứng dụng của Play, Google quản lý và bảo vệ khoá ký cho ứng dụng của bạn, đồng thời sử dụng khoá đó để ký các tệp APK cho hoạt động phân phối. Ngoài ra, do các gói ứng dụng cản trở việc tạo và ký các tệp APK cho Cửa hàng Google Play, nên bạn cần thiết lập Tính năng ký ứng dụng của Play trước khi tải gói ứng dụng của mình lên. Cách làm này giúp bạn tận dụng được những tính năng sau:

  • Sử dụng Android App Bundle và hỗ trợ các chế độ phân phối nâng cao của Google Play. Android App Bundle giúp giảm dung lượng ứng dụng của bạn để các bản phát hành đơn giản hơn và giúp bạn có thể sử dụng các mô-đun tính năng cũng như được trải nghiệm tức thì.
  • Tăng tính bảo mật của khoá ký và cho phép bạn sử dụng khoá tải lên riêng để ký gói ứng dụng mà bạn tải lên Google Play.
  • Với tính năng nâng cấp khoá, bạn có thể thay đổi khoá ký ứng dụng trong trường hợp khoá có sẵn của mình bị lộ hoặc nếu cần chuyển sang một khoá có phương thức mã hoá mạnh hơn

Tính năng ký ứng dụng của Play dùng 2 khoá: khoá ký ứng dụngkhoá tải lên, được mô tả chi tiết hơn trong phần về Khoá và kho khoá. Bạn giữ khoá tải lên và dùng khoá này để ký rồi tải ứng dụng lên Cửa hàng Google Play. Google dùng chứng chỉ tải lên để xác minh danh tính của bạn và ký (các) tệp APK của bạn bằng khoá ký ứng dụng để phân phối như minh hoạ trong hình 1. Khi sử dụng một khoá tải lên riêng biệt, bạn có thể yêu cầu đặt lại khoá tải lên nếu bạn làm mất khoá hoặc khi khoá bị lộ.

So với ứng dụng chưa chọn sử dụng Tính năng ký ứng dụng của Play, nếu mất khoá ký ứng dụng, bạn sẽ không cập nhật được ứng dụng của mình.

Hình 1 Ký ứng dụng bằng Tính năng ký ứng dụng của Play

Khoá của bạn được lưu trữ trên chính cơ sở hạ tầng nơi Google sử dụng để lưu trữ chính các khoá của mình, tại đó các khoá này được Dịch vụ quản lý khoá của Google bảo vệ. Bạn có thể tìm hiểu thêm về cơ sở hạ tầng kỹ thuật của Google bằng cách đọc Sách trắng về bảo mật của Google Cloud.

Khi bạn sử dụng Tính năng ký ứng dụng của Play, nếu khoá tải lên bị mất hoặc bị xâm phạm, bạn có thể yêu cầu đặt lại khoá tải lên trong Play Console. Vì khoá ký ứng dụng của bạn được Google bảo mật, bạn có thể tiếp tục tải các phiên bản mới của ứng dụng lên dưới dạng bản cập nhật cho ứng dụng gốc, ngay cả khi thay đổi khoá tải lên. Để tìm hiểu thêm, hãy đọc bài viết Đặt lại khoá tải lên riêng tư bị mất hoặc bị xâm phạm.

Phần tiếp theo mô tả một số thuật ngữ và khái niệm quan trọng liên quan đến việc ký và bảo mật ứng dụng. Nếu bạn muốn bỏ qua và tìm hiểu cách chuẩn bị ứng dụng để tải lên Cửa hàng Google Play, hãy chuyển tới phần Ký ứng dụng để phát hành.

Kho khoá, khoá và chứng chỉ

Kho khoá Java (.jks hoặc .keystore) là các tệp nhị phân đóng vai trò là kho lưu trữ chứng chỉ và khoá riêng tư.

Chứng chỉ khoá công khai (tập tin .der hoặc .pem), còn gọi là chứng chỉ số hay chứng chỉ danh tính, chứa khoá công khai của cặp khoá công khai/riêng tư, cũng như một số siêu dữ liệu có vai trò nhận dạng chủ sở hữu (chẳng hạn như tên và vị trí) của khoá riêng tư tương ứng.

Sau đây là một số loại khoá mà bạn nên nắm được:

  • Khoá ký ứng dụng: Khoá dùng để ký tệp APK đã cài đặt trên thiết bị của người dùng. Nằm trong mô hình cập nhật bảo mật của Android, khoá ký sẽ không bao giờ thay đổi trong suốt thời gian hoạt động của ứng dụng. Khoá ký ứng dụng là khoá riêng tư và phải được giữ bí mật. Tuy nhiên, bạn có thể chia sẻ chứng chỉ được tạo bằng khoá ký ứng dụng của mình.
  • Khoá tải lên: Khoá mà bạn sử dụng để ký gói ứng dụng hoặc tệp APK trước khi tải gói ứng dụng hoặc tệp APK này lên để ký ứng dụng bằng Google Play. Bạn phải bảo mật khoá tải lên. Tuy nhiên, bạn có thể chia sẻ chứng chỉ được tạo bằng khoá tải lên. Bạn có thể tạo khoá tải lên theo một trong các cách sau:

    • Khi chọn sử dụng tính năng ký ứng dụng, nếu bạn chọn để Google tạo khoá ký ứng dụng cho mình, thì Google sẽ chỉ định khoá mà bạn sử dụng để ký ứng dụng phát hành làm khoá tải lên của bạn.
    • Khi chọn sử dụng tính năng ký ứng dụng cho ứng dụng mới hoặc ứng dụng hiện tại, nếu bạn cung cấp khoá ký ứng dụng cho Google, thì bạn có thể chọn tạo khoá tải lên mới trong hoặc sau khi chọn sử dụng để tăng cường bảo mật.
    • Nếu không tạo khoá tải lên mới, bạn sẽ tiếp tục sử dụng khoá ký ứng dụng làm khoá tải lên để ký từng bản phát hành.

    Mẹo:Để giữ an toàn cho khoá, bạn nên sử dụng khoá ký ứng dụng và khoá tải lên khác nhau.

Làm việc với nhà cung cấp API

Bạn có thể vào trang Phát hành > Thiết lập > Ký ứng dụng trong Play Console để tải xuống chứng chỉ cho khoá ký ứng dụng và khoá tải lên. Tệp này dùng để đăng ký (các) khoá công khai với các nhà cung cấp API; bạn có thể chia sẻ tệp này vì nó không chứa khoá riêng tư của bạn.

Tệp tham chiếu chứng chỉ – Một tệp mô tả ngắn và duy nhất về chứng chỉ mà các nhà cung cấp API thường yêu cầu kèm theo tên gói nhằm đăng ký một ứng dụng để sử dụng dịch vụ của họ. Bạn có thể tìm thấy tệp tham chiếu MD5, SHA-1 và SHA-256 của chứng chỉ ký ứng dụng và tải lên trang Ký ứng dụng của Play Console. Bạn cũng có thể tính các tệp tham chiếu khác bằng cách tải chứng chỉ gốc (.der) từ chính trang đó.

Ký bản gỡ lỗi

Khi chạy hoặc gỡ lỗi dự án của bạn từ IDE, Android Studio sẽ tự động ký ứng dụng của bạn bằng một chứng chỉ gỡ lỗi do Bộ công cụ SDK Android tạo ra. Lần đầu tiên bạn chạy hoặc gỡ lỗi dự án của mình trong Android Studio, IDE sẽ tự động tạo kho khoá và chứng chỉ gỡ lỗi trong $HOME/.android/debug.keystore, đồng thời thiết lập mật khẩu kho khoá và khoá.

Vì chứng chỉ gỡ lỗi do các công cụ xây dựng tạo ra và không an toàn ngay trong thiết kế nên hầu hết cửa hàng ứng dụng (bao gồm cả Cửa hàng Google Play) không chấp nhận những ứng dụng được ký bằng chứng chỉ gỡ lỗi cho việc phát hành.

Android Studio sẽ tự động lưu trữ thông tin ký gỡ lỗi của bạn trong cấu hình ký tên để bạn không phải nhập lại mỗi lần gỡ lỗi. Cấu hình ký là một đối tượng bao gồm tất cả thông tin cần thiết để ký ứng dụng của bạn, bao gồm cả vị trí kho khoá, mật khẩu kho khoá, tên khoá và mật khẩu khoá.

Để biết thêm thông tin về cách tạo và chạy ứng dụng để gỡ lỗi, hãy xem phần Tạo và chạy ứng dụng của bạn.

Chứng chỉ gỡ lỗi hết hạn

Chứng chỉ tự ký dùng để ký ứng dụng cho mục đích gỡ lỗi sẽ hết hạn sau 30 năm kể từ ngày tạo. Khi chứng chỉ hết hạn, bạn sẽ gặp lỗi bản dựng.

Để khắc phục vấn đề này, chỉ cần xoá tệp debug.keystore được lưu trữ ở một trong những nơi sau:

  • ~/.android/ trên OS X và Linux
  • C:\Documents and Settings\user\.android\ trên Windows XP
  • C:\Users\user\.android\ trên Windows Vista và Windows 7, 8 và 10

Trong lần tới khi bạn tạo và chạy một phiên bản gỡ lỗi của ứng dụng, Android Studio sẽ tạo lại một kho khoá và khoá gỡ lỗi mới.

Ký ứng dụng của bạn để phát hành lên Google Play

Khi đã sẵn sàng phát hành ứng dụng, bạn cần ký ứng dụng của mình và tải ứng dụng lên một cửa hàng ứng dụng, chẳng hạn như Google Play. Trong lần đầu phát hành ứng dụng lên Google Play, bạn cũng phải định cấu hình Tính năng ký ứng dụng của Play. Bạn không bắt buộc phải sử dụng Tính năng ký ứng dụng của Play đối với ứng dụng được tạo trước tháng 8 năm 2021. Phần này cho bạn biết cách ký ứng dụng đúng cách để phát hành và định cấu hình Tính năng ký ứng dụng của Play.

Tạo khoá tải lên và kho khoá

Khoá tải lên rất hữu ích khi định cấu hình Tính năng ký ứng dụng của Play, nếu chưa có khoá này thì bạn có thể tạo một khoá bằng Android Studio như sau:

  1. Trong thanh trình đơn, hãy nhấp vào Tạo > Tạo gói/APK đã ký.
  2. Trong hộp thoại Generate Signed Bundle or APK (Tạo tệp APK hoặc gói đã ký), hãy chọn Android App Bundle hoặc APK rồi nhấp vào Next (Tiếp theo).
  3. Bên dưới trường Đường dẫn cửa hàng chính, hãy nhấp vào Tạo mới.
  4. Trên cửa sổ New Key Store (Cửa hàng khoá mới), hãy cung cấp những thông tin sau cho kho khoá và khoá của bạn, như trong hình 2.

    Hình 2. Tạo khoá tải lên và kho khoá mới trong Android Studio.

  5. Kho khoá

    • Key store path (Đường dẫn cửa hàng chính): Chọn vị trí nơi bạn sẽ tạo kho khoá. Ngoài ra, tên tệp phải được thêm vào cuối đường dẫn vị trí bằng phần mở rộng .jks.
    • Password (Mật khẩu): Tạo và xác nhận mật khẩu an toàn cho kho khoá của bạn.
  6. Khóa

    • Alias (Bí danh): Nhập tên nhận dạng cho khoá của bạn.
    • Password (Mật khẩu)" Tạo và xác nhận mật khẩu an toàn cho khoá của bạn. Mật khẩu này phải giống với mật khẩu kho khoá của bạn. (Vui lòng tham khảo vấn đề đã biết để biết thêm thông tin)
    • Validity (years) (Hiệu lực (năm)): Đặt khoảng thời gian tính bằng năm mà khoá của bạn có hiệu lực. Khoá của bạn phải có hiệu lực trong ít nhất 25 năm, để bạn có thể ký các bản cập nhật ứng dụng bằng chính khoá đó trong suốt thời gian hoạt động của ứng dụng.
    • Chứng chỉ: Nhập một số thông tin về bản thân cho chứng chỉ của bạn. Thông tin này không xuất hiện trong ứng dụng nhưng được đưa vào chứng chỉ như một phần của tệp APK.
  7. Sau khi bạn hoàn tất biểu mẫu, hãy nhấp vào OK.

  8. Nếu bạn muốn tạo bản dựng và ký ứng dụng bằng khoá tải lên, hãy tiếp tục xem phần Cách ký ứng dụng bằng khoá tải lên. Nếu bạn chỉ muốn tạo khoá và kho khoá, hãy nhấp vào Cancel (Huỷ).

Ký ứng dụng bằng khoá

Nếu bạn đã có khoá tải lên, hãy dùng khoá này để ký ứng dụng của mình. Nếu ứng dụng của bạn đã được ký và xuất bản lên Cửa hàng Google Play bằng một khoá ký ứng dụng hiện có, hãy dùng khoá đó để ký ứng dụng của mình. Sau đó, bạn có thể tạo và đăng ký khoá tải lên riêng với Google Play để ký cũng như tải các bản cập nhật tiếp theo lên ứng dụng của mình.

Để ký ứng dụng bằng Android Studio, hãy làm theo các bước sau:

  1. Nếu bạn hiện chưa mở hộp thoại Generate Signed Bundle or APK (Tạo tệp APK hoặc gói đã ký), hãy nhấp vào Build > Generate Signed Bundle/APK (Tạo > Tạo gói/tệp APK đã ký).
  2. Trong hộp thoại Generate Signed Bundle or APK (Tạo tệp APK hoặc gói đã ký), hãy chọn Android App Bundle hoặc APK rồi nhấp vào Next (Tiếp theo).
  3. Chọn một mô-đun từ trình đơn thả xuống.
  4. Chỉ định đường dẫn đến kho khoá của bạn, bí danh cho khoá của bạn rồi nhập mật khẩu cho cả hai. Nếu bạn chưa chuẩn bị kho khoá và khoá tải lên, trước tiên hãy Tạo khoá tải lên và kho khoá, sau đó quay lại để hoàn thành bước này.

    Hình 3 Ký ứng dụng bằng khoá tải lên.

  5. Nhấp vào Tiếp theo.

  6. Trong cửa sổ tiếp theo (minh hoạ trong hình 4), hãy chọn thư mục đích cho ứng dụng đã ký, chọn loại bản dựng, chọn (các) phiên bản sản phẩm (nếu có).

  7. Nếu đang tạo và ký APK, bạn cần chọn Phiên bản chữ ký mà bạn muốn ứng dụng hỗ trợ. Để tìm hiểu thêm, hãy đọc về các chương trình ký ứng dụng

  8. Nhấp vào Tạo.

Hình 5. Nhấp vào đường liên kết trong cửa sổ bật lên để phân tích hoặc tìm gói ứng dụng của bạn.

Sau khi Android Studio hoàn tất quá trình tạo ứng dụng đã ký, bạn có thể tìm hoặc phân tích ứng dụng của mình bằng cách nhấp vào tuỳ chọn thích hợp trong thông báo bật lên, như minh hoạ ở hình 5.

Bây giờ, bạn đã có thể chọn dùng Tính năng ký ứng dụng của Play cho ứng dụng của mình và tải ứng dụng lên để phát hành. Nếu mới sử dụng quy trình phát hành ứng dụng, bạn có thể đọc bài viết Tổng quan về việc phát hành. Nếu không, hãy tiếp tục truy cập trang về cách Tải ứng dụng lên Play Console.

Sử dụng tính năng ký ứng dụng của Play

Như mô tả ở trên, bạn cần phải định cấu hình Tính năng ký ứng dụng của Play để ký ứng dụng của mình nhằm phân phối thông qua Google Play (trừ các ứng dụng được tạo trước tháng 8 năm 2021 có thể tiếp tục phân phối tệp APK tự ký). Các bước bạn cần thực hiện phụ thuộc vào việc liệu ứng dụng của bạn có được phát hành lên Google Play hay chưa; hoặc liệu ứng dụng của bạn đã được ký và phát hành trước tháng 8 năm 2021 bằng cách sử dụng khoá ký ứng dụng hiện có hay không.

Định cấu hình ứng dụng mới

Để định cấu hình ký cho một ứng dụng chưa được phát hành lên Google Play, hãy tiến hành như sau:

  1. Hãy tạo một khoá tải lên rồi ký ứng dụng của bạn bằng khoá tải lên đó (nếu bạn chưa làm việc này).
  2. Đăng nhập Play Console.
  3. Làm theo các bước để chuẩn bị và ra mắt bản phát hành nhằm tạo một bản phát hành mới.
  4. Sau khi bạn chọn một kênh phát hành, hãy định cấu hình tính năng ký ứng dụng trong phần Ký ứng dụng như sau:
    • Để Google Play tạo một khoá ký ứng dụng cho bạn và dùng khoá đó để ký ứng dụng, bạn không cần phải làm gì cả. Khoá bạn dùng để ký bản phát hành đầu tiên sẽ trở thành khoá tải lên của bạn. Bạn sẽ dùng khoá đó để ký các bản phát hành trong tương lai.
    • Để dùng cùng một khoá cho ứng dụng khác trong tài khoản nhà phát triển của bạn, hãy chọn Change app signing key > Use the same key as another app in this account (Thay đổi khoá ký ứng dụng > Dùng cùng một khoá cho ứng dụng khác trong tài khoản này), chọn ứng dụng rồi nhấp vào Continue (Tiếp tục).
    • Để cung cấp khoá ký của riêng bạn cho Google dùng khi ký ứng dụng, hãy chọn Change app Signing key (Thay đổi khoá ký ứng dụng) rồi chọn một trong các tuỳ chọn Export and upload (Xuất và tải lên). Các tuỳ chọn này cho phép bạn tải lên an toàn một khoá riêng tư và chứng chỉ công khai của khoá đó.

Trong phần có tên App Bundles (Gói ứng dụng), hãy nhấp vào Browse files (Duyệt xem tệp) để tìm và tải ứng dụng bạn đã ký lên bằng khoá tải lên. Để biết thêm thông tin về việc phát hành ứng dụng, hãy tham khảo chuẩn bị và ra mắt bản phát hành. Khi bạn phát hành ứng dụng sau khi định cấu hình tính năng ký ứng dụng của Play, Google Play sẽ tạo (trừ phi bạn tải khoá có sẵn lên) và quản lý khoá ký của ứng dụng cho bạn. Bạn chỉ cần ký các bản cập nhật tiếp theo cho ứng dụng của mình bằng cách sử dụng khoá tải lên của ứng dụng trước khi tải lên Google Play.

Nếu bạn cần tạo khoá tải lên mới cho ứng dụng, hãy chuyển đến phần về cách Đặt lại khoá tải lên riêng tư bị mất hoặc bị xâm phạm.

Đăng ký tính năng ký ứng dụng cho một ứng dụng hiện có

Nếu đang cập nhật một ứng dụng đã xuất bản lên Google Play bằng khoá ký ứng dụng hiện có, thì bạn có thể chọn dùng Tính năng ký ứng dụng của Play như sau:

  1. Đăng nhập vào Play Console rồi chuyển đến ứng dụng của bạn.
  2. Trên trình đơn bên trái, hãy nhấp vào Phát hành > Thiết lập > Ký ứng dụng.
  3. Xem lại Điều khoản dịch vụ và chọn Chấp nhận nếu có.
  4. Chọn một trong những lựa chọn mô tả chính xác nhất về khoá ký mà bạn muốn tải lên Google Play rồi làm theo thông tin hướng dẫn bạn nhìn thấy. Ví dụ: nếu bạn đang dùng Kho khoá Java cho khoá ký, hãy chọn Tải khoá ký ứng dụng mới lên qua Kho khoá Java và làm theo hướng dẫn để tải xuống cũng như chạy PEPK và tải tệp đã tạo lên bằng khoá đã mã hoá.
  5. Nhấp vào Đăng ký.

Bây giờ, bạn sẽ thấy một trang có thông tin chi tiết về chứng chỉ ký và tải lên của ứng dụng. Google Play nay ký ứng dụng của bạn bằng khoá sẵn có khi bạn triển khai ứng dụng đó cho người dùng. Tuy nhiên, một trong những lợi ích quan trọng nhất của Tính năng ký ứng dụng của Play là bạn có thể tách riêng khoá mà bạn sử dụng để ký cấu phần phần mềm mà bạn tải lên Google Play khỏi khoá mà Google Play sử dụng để ký ứng dụng của bạn để phân phối cho người dùng. Vì vậy, hãy cân nhắc làm theo các bước trong phần tiếp theo để tạo và đăng ký khoá tải lên riêng biệt.

Tạo và đăng ký chứng chỉ tải lên

Khi bạn phát hành một ứng dụng không được ký bằng khoá tải lên, Google Play Console sẽ cho bạn lựa chọn đăng ký một khoá cho các bản cập nhật sau này của ứng dụng. Tuy bước này là không bắt buộc, nhưng bạn nên phát hành ứng dụng bằng một khoá riêng biệt với khoá mà Google Play dùng để phân phối ứng dụng của bạn cho người dùng. Khi đó, Google sẽ giữ an toàn cho khoá ký của bạn và bạn có thể lựa chọn đặt lại khoá tải lên riêng tư bị mất hoặc bị xâm phạm. Phần này mô tả cách tạo khoá tải lên, tạo chứng chỉ tải lên từ khoá đó và đăng ký chứng chỉ đó với Google Play cho các bản cập nhật sau này của ứng dụng.

Nội dung sau đây mô tả những tình huống mà bạn sẽ thấy lựa chọn đăng ký chứng chỉ tải lên trong Play Console:

  • Khi bạn phát hành một ứng dụng mới, được ký bằng khoá ký và chọn sử dụng Tính năng ký ứng dụng của Play.
  • Khi bạn chuẩn bị phát hành một ứng dụng hiện có đã chọn sử dụng Tính năng ký ứng dụng của Play, nhưng ứng dụng đó được ký bằng khoá ký riêng của nó.

Nếu bạn chưa phát hành bản cập nhật cho ứng dụng hiện có đã chọn sử dụng Tính năng ký ứng dụng của Play và bạn muốn đăng ký chứng chỉ tải lên, hãy hoàn tất các bước dưới đây và tiếp tục chuyển đến phần về cách đặt lại khoá tải lên riêng tư bị mất hoặc bị xâm phạm.

Tạo một khoá tải lên và kho khoá nếu bạn chưa thực hiện việc này.

Sau khi tạo khoá tải lên và kho khoá, bạn cần tạo chứng chỉ công khai từ khoá tải lên bằng cách sử dụng keytool với lệnh sau:

$ keytool -export -rfc
  -keystore your-upload-keystore.jks
  -alias upload-alias
  -file output_upload_certificate.pem

Giờ thì bạn đã có chứng chỉ tải lên, hãy đăng ký chứng chỉ đó với Google khi được nhắc trong Play Console hoặc khi đặt lại khoá tải lên.

Nâng cấp khoá ký ứng dụng

Trong một số trường hợp, có lẽ bạn nên thay đổi khoá ký của ứng dụng. Ví dụ: vì bạn muốn một khoá mã hoá mạnh hơn hoặc khoá ký của bạn đã bị xâm phạm. Tuy nhiên, vì người dùng chỉ có thể cập nhật ứng dụng của bạn nếu bản cập nhật được ký bằng cùng một khoá ký, nên khó có thể thay đổi khoá ký cho một ứng dụng đã phát hành.

Nếu phát hành ứng dụng của mình lên Google Play, bạn có thể nâng cấp khoá ký cho ứng dụng đã phát hành qua Play Console — khoá mới của bạn được dùng để ký các bản cài đặt và bản cập nhật ứng dụng trên Android 13 trở lên, trong khi khoá ký ứng dụng cũ dùng để ký bản cập nhật cho người dùng trên các phiên bản Android trước đây.

Để tìm hiểu thêm, hãy đọc bài viết Nâng cấp khoá ký ứng dụng.

Đặt lại khoá tải lên riêng tư bị mất hoặc bị xâm phạm

Nếu khoá tải lên riêng tư của bạn bị mất hoặc bị xâm phạm, bạn có thể tạo khoá mới và yêu cầu đặt lại khoá tải lên trong Play Console.

Định cấu hình quy trình xây dựng để tự động ký ứng dụng của bạn

Trong Android Studio, bạn có thể định cấu hình dự án để tự động ký phiên bản phát hành của ứng dụng trong quá trình xây dựng bằng cách tạo một cấu hình ký và chỉ định cấu hình đó cho loại bản phát hành. Cấu hình ký gồm có vị trí kho khoá, mật khẩu kho khoá, bí danh khoá và mật khẩu khoá. Để tạo một cấu hình ký và chỉ định cấu hình đó cho loại bản phát hành bằng Android Studio, hãy hoàn thành các bước sau:

  1. Trong cửa sổ Dự án, hãy nhấp chuột phải vào ứng dụng của bạn rồi nhấp vào Mở phần Cài đặt mô-đun.
  2. Trên cửa sổ Cấu trúc dự án, ở mục Mô-đun ở bảng điều khiển bên trái, hãy nhấp vào mô-đun mà bạn muốn ký.
  3. Nhấp vào thẻ , sau đó nhấp vào Thêm .
  4. Chọn tệp kho khoá của bạn, nhập tên cho cấu hình ký này (vì bạn có thể tạo nhiều cấu hình) và nhập thông tin bắt buộc.

    Hình 7. Cửa sổ để tạo cấu hình ký mới.

  5. Nhấp vào thẻ Loại bản dựng.
  6. Nhấp vào bản dựng phát hành.
  7. Trong Cấu hình ký, hãy chọn cấu hình ký bạn vừa tạo.

    Hình 8. Chọn một cấu hình ký trong Android Studio.

  8. Nhấp vào OK.

Giờ đây, mỗi khi bạn tạo loại bản dựng phát hành bằng cách chọn trong phần Build > Build Bundle(s) / APK(s) (Tạo > Tạo gói/tệp APK) trong Android Studio, IDE sẽ tự động ký ứng dụng của bạn bằng cách dùng cấu hình ký mà bạn đã chỉ định. Bạn có thể tìm thấy APK hoặc gói ứng dụng đã ký trong thư mục build/outputs/ bên trong thư mục dự án cho mô-đun mà bạn đang dựng.

Khi bạn tạo một cấu hình ký, thông tin ký sẽ được đưa vào dưới dạng văn bản thuần tuý trong các tệp bản dựng Gradle của bạn. Nếu làm việc theo nhóm hoặc chia sẻ mã công khai, bạn nên giữ an toàn cho thông tin ký của mình bằng cách xoá thông tin đó khỏi các tệp bản dựng và lưu trữ riêng thông tin đó. Bạn có thể đọc thêm về cách xoá thông tin ký khỏi tệp bản dựng trong phần Xoá thông tin ký khỏi tệp bản dựng của bạn. Để biết thêm về cách bảo mật thông tin ký, hãy xem phần Bảo mật khoá của bạn ở bên dưới.

Ký từng phiên bản sản phẩm theo cách riêng

Nếu ứng dụng của bạn có nhiều phiên bản sản phẩm và bạn muốn ký từng phiên bản theo cách riêng, bạn có thể tạo cấu hình ký bổ sung và chỉ định các cấu hình đó theo phiên bản:

  1. Trong cửa sổ Dự án, hãy nhấp chuột phải vào ứng dụng của bạn rồi nhấp vào Mở phần Cài đặt mô-đun.
  2. Trên cửa sổ Cấu trúc dự án, ở mục Mô-đun ở bảng điều khiển bên trái, hãy nhấp vào mô-đun mà bạn muốn ký.
  3. Nhấp vào thẻ , sau đó nhấp vào Thêm .
  4. Chọn tệp kho khoá của bạn, nhập tên cho cấu hình ký này (vì bạn có thể tạo nhiều cấu hình) và nhập thông tin bắt buộc.

    Hình 10. Cửa sổ để tạo cấu hình ký mới.

  5. Lặp lại các bước 3 và 4 nếu cần cho đến khi bạn tạo xong tất cả các cấu hình ký.
  6. Nhấp vào thẻ Phiên bản.
  7. Nhấp vào phiên bản mà bạn muốn định cấu hình, sau đó chọn cấu hình ký phù hợp trên trình đơn thả xuống Signing Config (Cấu hình ký).

    Hình 11 Định cấu hình các chế độ ký theo phiên bản sản phẩm.

    Lặp lại để định cấu hình bất kỳ phiên bản sản phẩm bổ sung nào.

  8. Nhấp vào OK.

Bạn cũng có thể chỉ định chế độ ký trong tệp cấu hình Gradle. Để biết thêm thông tin, hãy xem phần Định cấu hình chế độ cài đặt ký.

Chạy báo cáo ký

Để nhận thông tin ký cho mỗi biến thể ứng dụng, hãy chạy tác vụ signingReport của Gradle trong Android Studio:

  1. Chọn View > Tool Windows > Gradle (Xem > Cửa sổ công cụ > Grandle) để mở cửa sổ công cụ Gradle
  2. Chọn YourApp > Tasks > android > signingReport (YourApp > Tác vụ > android > signingReport) để chạy báo cáo

Quản lý khoá ký của riêng bạn

Nếu chọn không sử dụng Tính năng ký ứng dụng của Play (chỉ dành cho ứng dụng được tạo trước tháng 8 năm 2021), thì bạn có thể quản lý kho khoá và khoá ký ứng dụng của riêng mình. Xin lưu ý rằng bạn có trách nhiệm bảo mật khoá và kho khoá. Ngoài ra, ứng dụng của bạn sẽ không thể hỗ trợ Android App Bundle, Play Feature Delivery và Play Asset Delivery.

Khi bạn đã sẵn sàng tạo khoá và kho khoá của riêng mình, hãy đảm bảo rằng bạn chọn một mật khẩu mạnh cho kho khoá của bạn và một mật khẩu mạnh riêng cho từng khoá riêng tư được lưu trữ trong kho khoá. Bạn phải giữ kho khoá của mình ở một nơi an toàn và bảo mật. Nếu bạn mất quyền truy cập vào khoá ký ứng dụng hoặc khoá của bạn bị lộ, Google sẽ không truy xuất được khoá ký ứng dụng của bạn, đồng thời bạn sẽ không thể phát hành phiên bản mới của ứng dụng dưới dạng bản cập nhật cho ứng dụng gốc. Để biết thêm thông tin, hãy xem phần Bảo mật khoá của bạn dưới đây.

Nếu bạn quản lý kho khoá và khoá ký ứng dụng của riêng mình thì khi ký tệp APK, bạn sẽ ký tệp APK bằng khoá ký ứng dụng cục bộ và trực tiếp tải tệp APK đã ký lên Cửa hàng Google Play để phân phối như minh hoạ trong hình 12.

Hình 12. Ký ứng dụng khi bạn quản lý khoá ký ứng dụng của riêng mình

Khi bạn sử dụng Tính năng ký ứng dụng của Play, Google sẽ bảo vệ khoá ký của bạn và đảm bảo rằng các ứng dụng của bạn được ký chính xác và có thể nhận bản cập nhật trong suốt thời gian hoạt động. Tuy nhiên, nếu quyết định tự quản lý khoá ký ứng dụng, bạn nên lưu ý một số điều sau.

Lưu ý khi ký

Bạn nên ký ứng dụng bằng chính chứng chỉ đó trong suốt thời gian hoạt động dự kiến. Có một số lý do để bạn nên làm như vậy:

  • Nâng cấp ứng dụng: Khi hệ thống đang cài đặt một bản cập nhật cho ứng dụng, hệ thống sẽ so sánh (các) chứng chỉ trong phiên bản mới với các chứng chỉ trong phiên bản hiện có. Hệ thống cho phép cập nhật nếu các chứng chỉ trùng khớp. Nếu ký phiên bản mới bằng một chứng chỉ khác, bạn phải chỉ định một tên gói khác cho ứng dụng — trong trường hợp này, người dùng cài đặt phiên bản mới dưới dạng một ứng dụng hoàn toàn mới.
  • Mô-đun ứng dụng: Android cho phép các APK do cùng một chứng chỉ ký chạy trong cùng một quy trình, nếu các ứng dụng yêu cầu, để hệ thống coi các ứng dụng đó như một ứng dụng duy nhất. Bằng cách này, bạn có thể triển khai ứng dụng của mình trong các mô-đun và người dùng có thể tự cập nhật từng mô-đun.
  • Chia sẻ mã/dữ liệu thông qua các quyền: Android cung cấp tính năng thực thi quyền dựa trên chữ ký để một ứng dụng có thể cung cấp chức năng cho một ứng dụng khác được ký bằng một chứng chỉ đã chỉ định. Bằng cách ký nhiều tệp APK với cùng một chứng chỉ và sử dụng các chế độ kiểm tra quyền dựa trên chữ ký, các ứng dụng của bạn có thể chia sẻ mã và dữ liệu một cách an toàn.

Nếu bạn dự định hỗ trợ nâng cấp cho một ứng dụng, hãy đảm bảo rằng khoá ký ứng dụng của bạn có thời hạn hiệu lực dài hơn thời gian tồn tại dự kiến của ứng dụng đó. Bạn nên sử dụng thời gian hiệu lực từ 25 năm trở lên. Khi thời gian có hiệu lực của khoá của bạn hết hạn, người dùng sẽ không thể nâng cấp lên các phiên bản ứng dụng mới một cách liền mạch được nữa.

Nếu bạn dự định phát hành ứng dụng trên Google Play, thì khoá bạn dùng để ký ứng dụng phải có thời hạn có hiệu lực kết thúc sau ngày 22 tháng 10 năm 2033. Google Play thực thi yêu cầu này để đảm bảo rằng người dùng có thể nâng cấp liền mạch các ứng dụng khi có các phiên bản mới.

Bảo mật khoá của bạn

Nếu bạn chọn tự quản lý và bảo mật khoá ký ứng dụng và kho khoá (thay vì chọn sử dụng Tính năng ký ứng dụng của Play), thì việc bảo mật khoá ký ứng dụng là một yếu tố quan trọng đối với cả bạn và người dùng. Nếu bạn cho phép người khác sử dụng khoá, hoặc nếu bạn để kho khoá và mật khẩu của mình ở một vị trí không an toàn và do đó bên thứ ba có thể tìm và sử dụng kho khoá và mật khẩu đó, có thể họ sẽ xâm phạm danh tính tác giả của bạn và làm giảm sự tin tưởng nơi người dùng.

Nếu một bên thứ ba có thể tìm cách lấy được khoá ký ứng dụng của bạn mà bạn không biết hoặc không cho phép, thì họ có thể ký và phân phối các ứng dụng độc hại thay cho ứng dụng chính thống hoặc làm hỏng các ứng dụng của bạn. Những kẻ như vậy cũng có thể ký và phân phối ứng dụng theo danh tính của bạn để tấn công các ứng dụng khác hoặc chính hệ thống, hay có thể làm hỏng hoặc đánh cắp dữ liệu người dùng.

Bạn cần có khoá riêng tư để ký tất cả các phiên bản ứng dụng sau này. Nếu làm mất hoặc để thất lạc khoá, bạn sẽ không thể phát hành bản cập nhật cho ứng dụng hiện có của mình. Bạn cũng không thể tạo lại khoá từng tạo trước đây.

Danh tiếng của bạn với tư cách là một nhà phát triển phụ thuộc vào việc bảo mật khoá ký ứng dụng của bạn đúng cách mọi lúc, cho đến khi khoá hết hạn. Dưới đây là một số mẹo giúp bảo mật khoá của bạn:

  • Chọn mật khẩu mạnh cho kho khoá và khoá.
  • Không cung cấp hoặc cho bất kỳ ai mượn khoá riêng tư của bạn và đừng để những người không có phận sự biết mật khẩu kho khoá và khoá của bạn.
  • Lưu giữ tệp kho khoá có chứa khoá riêng tư của bạn ở một nơi an toàn và bảo mật.

Nhìn chung, nếu bạn làm theo các biện pháp phòng ngừa thông thường khi tạo, sử dụng và lưu trữ khoá, thì khoá sẽ vẫn an toàn.

Xoá thông tin ký khỏi tệp bản dựng của bạn

Khi bạn tạo cấu hình ký, Android Studio sẽ thêm thông tin ký của bạn ở dạng văn bản thuần tuý vào tệp build.gradle của mô-đun. Nếu làm việc theo nhóm hoặc tìm nguồn mở cho đoạn mã của mình, bạn nên di chuyển thông tin nhạy cảm này ra khỏi các tệp bản dựng để người khác không thể dễ dàng truy cập được. Để thực hiện việc này, bạn nên tạo một tệp thuộc tính riêng để lưu trữ thông tin bảo mật và tham chiếu đến tệp đó trong các tệp bản dựng như sau:

  1. Tạo cấu hình ký và chỉ định cấu hình đó cho một hoặc nhiều loại bản dựng. Những hướng dẫn này giả định rằng bạn đã định cấu hình một cấu hình ký ứng dụng cho loại bản dựng phát hành, như mô tả trong phần Định cấu hình quy trình tạo bản dựng để tự động ký ứng dụng ở trên.
  2. Tạo một tệp có tên là keystore.properties trong thư mục gốc của dự án. Tệp này phải chứa thông tin ký của bạn, như sau:
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. Trong tệp build.gradle của mô-đun, hãy thêm mã để tải tệp keystore.properties trước khối android {}.

    Groovy

    ...
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    def keystoreProperties = new Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Kotlin

    ...
    import java.util.Properties
    import java.io.FileInputStream
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    val keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    val keystoreProperties = Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Lưu ý: Bạn có thể chọn lưu trữ tệp keystore.properties của mình ở một vị trí khác (ví dụ: trong thư mục mô-đun thay vì trong thư mục gốc của dự án, hoặc trên máy chủ bản dựng của bạn nếu bạn đang sử dụng công cụ tích hợp liên tục). Trong trường hợp đó, bạn nên sửa đổi mã ở trên để khởi chạy chính xác keystorePropertiesFile bằng cách sử dụng vị trí của tệp keystore.properties thực tế.

  4. Bạn có thể tham chiếu đến các thuộc tính được lưu trữ trong keystoreProperties bằng cú pháp keystoreProperties['propertyName']. Sửa đổi khối signingConfigs của tệp build.gradle của mô-đun để tham chiếu thông tin ký của bản ghi được lưu trữ trong keystoreProperties bằng cú pháp này.

    Groovy

    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }

    Kotlin

    android {
        signingConfigs {
            create("config") {
                keyAlias = keystoreProperties["keyAlias"] as String
                keyPassword = keystoreProperties["keyPassword"] as String
                storeFile = file(keystoreProperties["storeFile"] as String)
                storePassword = keystoreProperties["storePassword"] as String
            }
        }
        ...
      }
  5. Mở cửa sổ công cụ Tạo biến thể và đảm bảo rằng bạn đã chọn loại bản dựng phát hành.
  6. Chọn một tuỳ chọn trong phần Build > Build Bundle(s) / APK(s) (Tạo > Tạo (các) gói/tệp APK) để tạo tệp APK hoặc gói ứng dụng cho bản phát hành. Bạn sẽ thấy dữ liệu đầu ra của bản dựng trong thư mục build/outputs/ cho mô-đun của mình.

Vì các tệp bản dựng của bạn không còn chứa thông tin nhạy cảm nên giờ đây, bạn có thể đưa các tệp này vào bộ điều khiển nguồn hoặc tải những tệp đó lên một cơ sở mã dùng chung. Hãy nhớ để đảm bảo an toàn cho tệp keystore.properties. Trong đó có thể bao gồm cả việc xoá dữ liệu đó khỏi hệ thống kiểm soát nguồn của bạn.