bundletool

bundletool là công cụ cơ bản mà Android Studio, trình bổ trợ Android cho Gradle và Google Play sử dụng để tạo Android App Bundle. bundletool có thể chuyển đổi một gói ứng dụng thành nhiều tệp APK được triển khai đến thiết bị.

Gói Android SDK (ASB) và các APK của chúng được xây dựng bằng bundletool. Công cụ này cũng có sẵn dưới dạng công cụ dòng lệnh, do đó bạn có thể tự tạo gói ứng dụng và gói SDK và tạo lại bản dựng phía máy chủ của Google Play cho APK của ứng dụng hoặc tệp APK của SDK hỗ trợ thời gian chạy.

Tải bundletool xuống

Nếu bạn chưa có, hãy tải bundletool xuống qua kho lưu trữ GitHub.

Tạo và kiểm thử gói ứng dụng

Bạn có thể sử dụng Android Studio hoặc công cụ dòng lệnh bundletool để tạo Android App Bundle và kiểm thử viêc tạo tệp APK qua gói ứng dụng này.

Tạo gói ứng dụng

Sử dụng Android Studio và trình bổ trợ Android cho Gradle để tạo và ký một tệp Android App Bundle. Tuy nhiên, nếu không thể sử dụng IDE (chẳng hạn do đang sử dụng máy chủ bản dựng liên tục), bạn cũng có thể tạo gói ứng dụng qua dòng lệnh rồi ký gói ứng dụng đó bằng cách sử dụng jarsigner.

Để biết thêm thông tin về việc tạo gói ứng dụng bằng bundletool, hãy xem bài viết Tạo gói ứng dụng bằng bundletool.

Tạo một tập hợp tệp APK từ gói ứng dụng của bạn

Sau khi tạo tệp Android App Bundle, bạn nên kiểm thử cách Google Play sử dụng định dạng này để tạo các tệp APK và cách các tệp APK đó hoạt động khi được triển khai đến thiết bị.

Có hai cách để kiểm thử gói ứng dụng:

Phần này giải thích cách sử dụng bundletool để kiểm thử cục bộ gói ứng dụng.

Khi bundletool tạo các tệp APK qua gói ứng dụng, công cụ này sẽ đưa các tệp APK được tạo vào một vùng chứa có tên là APK set archive (Kho lưu trữ tập hợp tệp APK) với đuôi tệp là .apks. Để tạo một tập hợp tệp APK cho tất cả cấu hình thiết bị mà ứng dụng của bạn hỗ trợ từ gói ứng dụng, hãy sử dụng lệnh bundletool build-apks như minh hoạ dưới đây.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Nếu muốn triển khai các tệp APK đến một thiết bị, bạn cũng cần đưa vào đó thông tin ký của ứng dụng, như được trình bày trong lệnh sau. Nếu bạn không chỉ định thông tin ký, bundletool sẽ cố ký tệp APK của bạn bằng khoá gỡ lỗi.

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

Bảng sau đây mô tả chi tiết hơn các cờ và tuỳ chọn bạn có thể thiết lập khi sử dụng lệnh bundletool build-apks:

Bảng 1. Các tuỳ chọn cho lệnh bundletool build-apks

Cờ cờ
--bundle=path (Bắt buộc) Chỉ định đường dẫn đến gói ứng dụng mà bạn đã tạo bằng Android Studio. Để tìm hiểu thêm, hãy đọc phần Xây dựng dự án của bạn.
--output=path (Bắt buộc) Chỉ định tên của tệp đầu ra .apks, chứa tất cả cấu phần phần mềm APK cho ứng dụng. Để kiểm thử các cấu phần phần mềm trong tệp này trên một thiết bị, hãy làm theo các bước trong phần nội dung về cách triển khai tệp APK sang một thiết bị đã kết nối.
--overwrite Ghi đè mọi tệp đầu ra hiện thời bằng đường dẫn mà bạn chỉ định bằng cách sử dụng tuỳ chọn --output. Nếu không đưa cờ này vào và tệp đầu ra đã tồn tại, sẽ xảy ra lỗi bản dựng.
--aapt2=path Chỉ định một đường dẫn tùy chỉnh đến AAPT2. Theo mặc định, bundletool bao gồm phiên bản riêng của AAPT2.
--ks=path (Tuỳ chọn) Chỉ định đường dẫn đến kho khoá triển khai được dùng để ký các tệp APK. Nếu bạn không đưa cờ này vào, bundletool sẽ tìm cách ký các tệp APK của bạn bằng khoá ký gỡ lỗi.
--ks-pass=pass:password
hoặc
--ks-pass=file:/path/to/file
Chỉ định mật khẩu cho kho khoá của bạn. Nếu bạn chỉ định mật khẩu ở dạng văn bản thuần tuý, hãy hạn định mật khẩu đó bằng pass:. Nếu bạn chuyển đường dẫn đến một tệp chứa mật khẩu, hãy hạn định tệp đó bằng file:. Nếu bạn chỉ định một kho khoá bằng cờ --ks mà không chỉ định --ks-pass, thì bundletool sẽ nhắc bạn nhập mật khẩu qua dòng lệnh.
--ks-key-alias=alias Chỉ định bí danh của khoá ký mà bạn muốn sử dụng.
--key-pass=pass:password
hoặc
--key-pass=file:/path/to/file
Chỉ định mật khẩu cho khoá ký. Nếu bạn chỉ định mật khẩu ở dạng văn bản thuần tuý, hãy hạn định mật khẩu đó bằng pass:. Nếu bạn chuyển đường dẫn đến một tệp chứa mật khẩu, hãy hạn định tệp đó bằng file:.

Nếu mật khẩu này giống với mật khẩu kho khoá, bạn có thể bỏ qua cờ này.

--connected-device Hướng dẫn bundletool tạo các tệp APK nhắm đến cấu hình của một thiết bị đã kết nối. Nếu bạn không đưa cờ này vào, bundletool sẽ tạo các tệp APK cho tất cả cấu hình thiết bị mà ứng dụng của bạn hỗ trợ.
--device-id=serial-number Nếu bạn có nhiều thiết bị được kết nối, hãy sử dụng cờ này để chỉ định mã sê-ri của thiết bị mà bạn muốn triển khai ứng dụng.
--device-spec=spec_json Cung cấp một đường dẫn đến tệp .json chỉ định cấu hình thiết bị mà bạn muốn nhắm đến. Để tìm hiểu thêm, hãy xem phần hướng dẫn cách Tạo và sử dụng tệp JSON chứa thông số kỹ thuật của thiết bị.
--mode=universal Đặt chế độ này thành universal. Sử dụng tuỳ chọn này nếu bạn muốn bundletool tạo một tệp APK duy nhất chứa tất cả mã và tài nguyên của ứng dụng để tệp APK đó tương thích với tất cả các cấu hình thiết bị mà ứng dụng của bạn hỗ trợ.

Lưu ý: bundletool chỉ bao gồm các mô-đun tính năng có chỉ định <dist:fusing dist:include="true"/> trong tệp kê khai trong một tệp APK chung. Để tìm hiểu thêm, hãy đọc về Tệp kê khai mô-đun tính năng.

Vui lòng lưu ý các tệp APK này có kích thước lớn hơn các tệp APK được tối ưu hoá cho một cấu hình thiết bị cụ thể. Tuy nhiên, bạn có thể chia sẻ các tệp APK này một cách dễ dàng với người kiểm thử nội bộ, để kiểm thử ứng dụng của bạn trên nhiều cấu hình thiết bị.

--local-testing Bật gói ứng dụng của bạn để kiểm thử cục bộ. Việc kiểm thử nội bộ cho phép các chu kỳ kiểm thử được lặp lại nhanh chóng mà không cần phải tải lên máy chủ Google Play.

Xem phần Cài đặt mô-đun kiểm thử cục bộ để tham khảo ví dụ về cách kiểm thử việc cài đặt mô-đun bằng cờ --local-testing.

Triển khai tệp APK đến thiết bị đã kết nối

Sau khi bạn tạo một tập hợp tệp APK, bundletool có thể triển khai tổ hợp các tệp APK phù hợp từ tập hợp đó đến thiết bị được kết nối.

Ví dụ: nếu bạn có một thiết bị đã kết nối đang chạy Android 5.0 (API cấp 21) trở lên, thì bundletool sẽ đẩy tệp APK cơ sở, APK mô-đun tính năng và các tệp APK cấu hình cần có để chạy ứng dụng của bạn trên thiết bị đó. Ngoài ra, nếu thiết bị được kết nối của bạn đang chạy Android 4.4 (API cấp 20) trở xuống, bundletool sẽ tìm kiếm một tập hợp tệp APK tương thích để triển khai cho thiết bị của bạn.

Để triển khai ứng dụng từ tập hợp tệp APK, hãy sử dụng lệnh install-apks và chỉ định đường dẫn của tập hợp tệp APK bằng cách sử dụng cờ --apks=/path/to/apks, như minh hoạ trong lệnh sau. Nếu bạn có nhiều thiết bị đã kết nối, hãy chỉ định một thiết bị mục tiêu bằng cách thêm cờ --device-id=serial-id.

bundletool install-apks --apks=/MyApp/my_app.apks

Tạo một tập hợp APK dành riêng cho thiết bị

Nếu không muốn tạo một tập hợp tệp APK cho tất cả các cấu hình thiết bị mà ứng dụng hỗ trợ, bạn có thể tạo các tệp APK chỉ nhắm đến cấu hình của một thiết bị được kết nối bằng cách sử dụng tuỳ chọn --connected-device, như lệnh dưới đây. Nếu bạn có nhiều thiết bị đã kết nối, hãy chỉ định một thiết bị mục tiêu bằng cách thêm cờ --device-id=serial-id.

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Tạo và sử dụng tệp JSON chứa thông số kỹ thuật của thiết bị

bundletool có thể tạo một tập hợp tệp APK nhắm đến một cấu hình thiết bị do tệp JSON chỉ định. Trước hết, để tạo tệp JSON cho thiết bị được kết nối, hãy chạy lệnh sau:

bundletool get-device-spec --output=/tmp/device-spec.json

bundletool tạo tệp JSON cho thiết bị của bạn trong thư mục của công cụ. Sau đó, bạn có thể chuyển tệp này đến bundletool để tạo một tập hợp tệp APK chỉ nhắm đến cấu hình được mô tả trong tệp JSON đó, như sau:

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

Tạo tệp JSON chứa thông số kỹ thuật của thiết bị theo cách thủ công

Nếu bạn không có quyền truy cập vào thiết bị nơi bạn muốn tạo tập hợp tệp APK đích (chẳng hạn, nếu bạn muốn thử ứng dụng của mình trên một thiết bị mà bạn không có sẵn), bạn có thể tạo tệp JSON theo cách thủ công bằng cách sử dụng định dạng sau:

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

Sau đó, bạn có thể chuyển JSON này đến lệnh bundle extract-apks, như mô tả trong phần trước.

Trích xuất các tệp APK dành riêng cho thiết bị cụ thể từ một tập hợp tệp APK hiện có

Nếu bạn hiện có một tập hợp tệp APK và muốn trích xuất từ đó một tập hợp con tệp APK nhắm đến một cấu hình thiết bị cụ thể, bạn có thể sử dụng lệnh extract-apks và chỉ định một tệp thông số kỹ thuật JSON của thiết bị, như sau:

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json

Đo lường kích thước ước tính khi tải xuống của các tệp APK trong một tập hợp tệp APK

Để đo lường kích thước ước tính khi tải xuống của các tệp APK trong một tập hợp tệp APK như chúng sẽ được phân phát nén trên đường dây, hãy sử dụng lệnh get-size total:

bundletool get-size total --apks=/MyApp/my_app.apks

Bạn có thể sửa đổi hành vi của lệnh get-size total bằng cách sử dụng các cờ sau:

Bảng 2. Các tuỳ chọn cho lệnh get-size total

Cờ cờ
--apks=path (Bắt buộc) Chỉ định đường dẫn tới tệp tập hợp tệp APK hiện có với kích thước được đo lường khi tải xuống.
--device-spec=path Chỉ định đường dẫn đến tệp thông số kỹ thuật của thiết bị (từ get-device-spec hoặc được tạo thủ công) để dùng cho việc so khớp. Bạn có thể chỉ định một đường dẫn một phần để đánh giá một tập hợp cấu hình.
--dimensions=dimensions Chỉ định các kích thuớc được sử dụng khi ước tính về kích thước. Chấp nhận danh sách được phân tách bằng dấu phẩy gồm: SDK, ABI, SCREEN_DENSITYLANGUAGE. Để đo lường trên tất cả các phương diện, chỉ định ALL.
--instant Đo lường kích thước khi tải xuống của các tệp APK hỗ trợ phiên bản tức thì (instant-enabled) thay vì tệp APK có thể cài đặt. Theo mặc định, bundletool sẽ đo lường kích thước khi tải xuống của tệp APK có thể cài đặt.
--modules=modules Chỉ định danh sách được phân tách bằng dấu phẩy gồm các mô-đun trong tập hợp APK để xem xét trong hoạt động đo lường. Lệnh bundletool tự động đưa mọi mô-đun phụ thuộc vào tập hợp đã chỉ định. Theo mặc định, lệnh này sẽ đo kích thước khi được tải xuống của tất cả các mô-đun được cài đặt trong lần tải xuống đầu tiên.

Tài nguyên khác

Để tìm hiểu thêm về cách sử dụng bundletool, hãy xem nội dung Gói ứng dụng: Kiểm thử các gói bằng bundletool và Play Console.