Android Studio: cách tạo apk đã ký bằng Gradle?


89

Tôi đã tìm kiếm trên Google và SO nhưng không thể tìm thấy câu trả lời của mình.

Đây là lần đầu tiên tôi làm việc với hệ thống gradle và bây giờ tôi đang ở điểm tạo APK đã ký để tải lên google play (Dự án được nhập từ eclipse).

Bây giờ tôi đã đọc phần ở đây http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks mà bạn nên thêm signingConfigsvàobuild.gradle

Tôi đã thêm những dòng này và bây giờ tôi thấy rằng bạn cần chạy ./gradlew assembleReleasenhưng chạy điều này trong cmd của tôi trả về 'gradle' không được nhận dạng là lệnh nội bộ hoặc lệnh bên ngoài, chương trình có thể hoạt động hoặc tệp hàng loạt. Tôi cũng đã thử nhấp chuột phải vào build.gradle và chạy nó, nói rằng nó đã thành công nhưng khi tôi nhìn vào thư mục build / apk chỉ có một tệp có tênapp-debug-unaligned.apk

Vậy làm cách nào để tạo apk đã ký bằng hệ thống Gradle?



@ScottBarta Đã thực hiện một phần thủ thuật, khi tôi chuyển sang chế độ phát hành và chạy gradle, tôi vẫn gặp lỗi, nhưng bằng cách sử dụng anh ấy xây dựng> tạo apk đã ký thông qua menu, cuối cùng nó đã hoạt động! Cảm ơn tôi đã ủng hộ bạn tại liên kết được cung cấp.
Gooey

ký bằng phiên bản v1 (chữ ký jar) hoặc v2 (chữ ký apk đầy đủ) từ tệp gradle? giải pháp tại đây: stackoverflow.com/questions/57943259/…
user1506104

Câu trả lời:


97

Có ba cách để tạo bản dựng của bạn theo buildType. (Trong trường hợp của bạn, nó là bản phát hành nhưng nó có thể được đặt tên bất cứ thứ gì bạn muốn.)

  1. Chuyển đến Nhiệm vụ Gradle trong bảng điều khiển bên phải của Android Studio và tìm kiếm assembleReleasehoặc assemble(#your_defined_buildtype)trong Nhiệm vụ mô-đun

  2. Đi tới Bản dựng biến thể trong Bảng điều khiển bên trái và chọn bản dựng từ trình đơn thả xuống

  3. Đi tới thư mục gốc của dự án trong File Explore và mở cmd / terminal và chạy:

    Linux: ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    Các cửa sổ: gradlew assembleRelease or assemble(#your_defined_buildtype)

Nếu bạn muốn thực hiện (chỉ) bản phát hành, bạn có thể sử dụng Build> Generate Signed apk. Đối với các kiểu xây dựng khác, chỉ có ba tùy chọn ở trên.

Bạn có thể tìm thấy APK đã tạo trong module/buildthư mục của mình có tên loại bản dựng trong đó.


4
Điều này sẽ chỉ tạo một gói ứng dụng đã ký nếu bạn có cấu hình bản dựng trong build.gradle của mình. Nếu bạn lưu trữ thông tin này trong các công cụ quản lý mã nguồn hoặc chia sẻ nó với những người khác, bạn nên nghĩ đến việc tách chứng chỉ của khóa ký ra khỏi mã nguồn của bạn.
Janusz

Xây dựng> Tạo apk đã ký ... nó đơn giản như vậy
Atul

61

Có thể thực hiện bất kỳ dự án Gradle Android Studio hiện có nào và xây dựng / ký tên từ dòng lệnh mà không cần chỉnh sửa bất kỳ tệp nào. Điều này làm cho nó rất tốt để lưu trữ dự án của bạn trong kiểm soát phiên bản trong khi giữ các khóa và mật khẩu của bạn riêng biệt:

./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD

1
Vì chúng tôi cần chuyển mã nguồn cho đồng hành, đây là cách tốt nhất để giữ bí mật về nội dung kho khóa của chúng tôi. Cảm ơn.
Yeung

2
dù sao cũng biết sự tồn tại của các thuộc tính android.injected.signs. * này chứ?
Tixeon

Tôi nhận được thông tin này từ Xav từ nhóm Android Studio và tôi không biết liệu có bất kỳ biến nào khác như thế này không.
Wayne Piekarski

Tôi đang nhận được java.lang.RuntimeException: com.android.ide.common.signs.KeytoolException: Không thể đọc khóa XXXXXX từ cửa hàng "C: \ Users \ somedirectory \ Desktop \ someKey.jks": Không có khóa nào với bí danh 'XXXXXX' tìm thấy trong kho khóa C: \ Users \ somedirectory \ Desktop \ someKey.jks. Tại sao vậy?
Archie G. Quiñones

39

Bạn có thể sử dụng mã này

android {
   ...
    signingConfigs {
        release {
            storeFile file("../your_key_store_file.jks")
            storePassword "some_password"
            keyAlias "alias_name"
            keyPassword "key_password"
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
        }
    }
   ...
}

sau đó từ thiết bị đầu cuối của bạn chạy

./gradlew assembleRelease

bạn sẽ nhận được apk tại

your-android-app / build / outputs / apk / your-android-app-release.apk


@ozcanovunc vui lòng kiểm tra lại đường dẫn kho khóa của bạn có thể đường dẫn của bạn được xác định sai không.
bhavesh kaila

Khi làm điều này, rất có thể là bạn đã build.gradleđược kiểm soát phiên bản và mật khẩu của bạn cũng vậy! Cân nhắc đi một con đường khác khi bảo mật là quan trọng trong dự án của bạn.
Marco7757

1
Gradle AssemblyRelease không hoạt động. Sử dụng thay vì assembleRelease gradlew
Sathish Gadde


-3

xây dựng menu> tạo apk đã ký


Nếu bạn chạy điều đó, nó cho bạn biết đó không phải là cách để làm điều đó. Bên cạnh đó, nếu tôi tải lên tệp .apk đó, nó sẽ gây ra lỗi nói rằng phát hiện lỗi hoặc một cái gì đó đang bật.
Gooey

11
nó nói rằng gỡ lỗi đang bật ... trong android studio, ở bên trái, sẽ có một tab có nội dung 'phiên bản xây dựng' ... hãy nhấp vào nó và chuyển mọi thứ từ 'gỡ lỗi' sang 'phát hành' ... sau đó , tạo ra ký apk một lần nữa ...
trickedoutdavid

2
Điều này không còn hoạt động! Ví dụ: APK mà nó xây dựng có BuildConfig.DEBUG được đặt thành true. Điều này đã gây ra cho tôi không ít rắc rối, bây giờ bạn phải sử dụng phương pháp gradlew assemblyRelease.
Ben Clayton

@BenClayton Bạn hoàn toàn đúng! Tôi đã lãng phí hàng giờ vì điều này! Một rất khó chịu "lỗi" trong Android Studio - Không kết thúc trong cảnh với rắc rối ...
sjkm

Tôi tự hỏi tại sao bước đơn giản này không thể là cách phù hợp nhất để tạo apk đã ký vì nó đã đề cập rõ ràng. Bước này đã tạo ra ứng dụng và hoạt động hoàn hảo cho tôi mà không gặp bất kỳ sự cố nào. Nhưng rất nhiều câu trả lời khác liên quan đến SO làm tôi bối rối nghĩ rằng những gì tôi đã làm có thể không đúng cách hoặc những gì.
Atul
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.