Gói ứng dụng khác với gói APK ở chỗ bạn không triển khai được gói ứng dụng cho thiết bị. Định dạng phát hành thay vào đó bao gồm tất cả các tài nguyên và mã đã biên dịch của ứng dụng trong một cấu phần phần mềm bản dựng duy nhất. Sau khi tải gói ứng dụng đã ký lên, Google Play sẽ có mọi thứ cần thiết để tạo và ký APK của ứng dụng, đồng thời phân phối APK cho người dùng.
Bắt đầu
Hầu hết các dự án ứng dụng đều dễ dàng hỗ trợ Android App Bundle.
Đó là vì mô-đun chứa mã và các tài nguyên cho APK cơ sở của ứng dụng là mô-đun ứng dụng tiêu chuẩn. Theo mặc định, bạn sẽ nhận được mô-đun này khi tạo một dự án ứng dụng mới trong Android Studio.
Tức là mô-đun áp dụng trình bổ trợ application
bên dưới cho tệp build.gradle
, cung cấp mã và tài nguyên cho chức năng cơ sở của ứng dụng.
Groovy
// The standard application plugin creates your app's base module. plugins { id 'com.android.application' }
Kotlin
plugins { // The standard application plugin creates your app's base module. id("com.android.application") }
Ngoài việc cung cấp chức năng cốt lõi cho ứng dụng, mô-đun cơ sở còn mang lại nhiều cấu hình xây dựng và các mục trong tệp kê khai. Đây là yếu tố ảnh hưởng đến toàn bộ dự án ứng dụng.
Cấu hình bản dựng mô-đun cơ sở
Đối với hầu hết các dự án ứng dụng hiện có, bạn không cần thay đổi điều nào trong cấu hình bản dựng của mô-đun cơ sở. Tuy nhiên, nếu cân nhắc việc thêm mô-đun tính năng vào dự án ứng dụng, hoặc nếu trước đây bạn đã phát hành ứng dụng bằng nhiều APK, lưu ý một số khía cạnh đối với cấu hình bản dựng của mô-đun cơ sở.
Bản cập nhật ứng dụng và mã phiên bản
Với Android App Bundle, bạn không còn phải quản lý mã phiên bản cho nhiều tệp APK tải lên Google Play nữa. Thay vào đó, bạn chỉ quản lý một mã phiên bản trong mô-đun cơ sở của ứng dụng như sau:
// In your base module build.gradle file
android {
defaultConfig {
…
// You specify your app’s version code only in the base module.
versionCode 5
versionName "1.0"
}
}
Sau khi tải gói ứng dụng lên, Google Play sẽ sử dụng mã phiên bản trong mô-đun cơ sở để gán cùng một mã phiên bản cho tất cả các APK mà ứng dụng tạo ra từ gói đó. Điều này có nghĩa là khi một thiết bị tải xuống và cài đặt ứng dụng, tất cả các APK phân tách cho ứng dụng đó sẽ có cùng một mã phiên bản.
Khi muốn cập nhật ứng dụng bằng mã hoặc tài nguyên mới, bạn phải cập nhật mã phiên bản trong mô-đun cơ sở của ứng dụng và tạo một gói ứng dụng mới đầy đủ. Khi tải gói ứng dụng đó lên Google Play, gói ứng dụng đó sẽ tạo một bộ APK mới dựa trên mã phiên bản mà mô-đun cơ sở chỉ định. Sau đó, khi người dùng cập nhật ứng dụng, Google Play sẽ phân phối các phiên bản cập nhật của tất cả APK hiện được cài đặt trên thiết bị. Điều đó có nghĩa là tất cả các APK đã cài đặt đều được cập nhật lên mã phiên bản mới.
Lưu ý khác
- Ký ứng dụng: Nếu đưa thông tin ký vào tệp bản dựng, bạn chỉ nên đưa thông tin đó vào tệp cấu hình bản dựng của mô-đun cơ sở. Để biết thêm thông tin, vui lòng xem nội dung Định cấu hình Gradle để ký ứng dụng.
- Rút gọn mã: Nếu muốn bật tính năng rút gọn mã cho toàn bộ dự án ứng dụng (bao gồm cả các mô-đun tính năng của dự án), bạn phải thao tác như vậy từ tệp build.gradle của mô-đun cơ sở. Nghĩa là có thể đưa các quy tắc ProGuard tùy chỉnh vào một mô-đun tính năng, nhưng thuộc tính
minifyEnabled
trong các cấu hình bản dựng mô-đun tính năng sẽ bị bỏ qua. - Khối
splits
sẽ bị bỏ qua: Khi tạo gói ứng dụng, Gradle sẽ bỏ qua các thuộc tính trong khốiandroid.splits
. Nếu muốn kiểm soát các loại APK cấu hình mà gói ứng dụng hỗ trợ, hãy sử dụngandroid.bundle
để tắt các loại APK cấu hình. - Tạo phiên bản ứng dụng: Mô-đun cơ sở xác định mã phiên bản và tên phiên bản cho toàn bộ dự án ứng dụng. Để biết thêm thông tin, hãy chuyển tới nội dung về cách Quản lý bản cập nhật ứng dụng.
Bật lại hoặc tắt các loại APK cấu hình
Theo mặc định, khi tạo một gói ứng dụng, gói này sẽ hỗ trợ việc tạo các APK cấu hình cho từng nhóm tài nguyên ngôn ngữ, tài nguyên mật độ màn hình và thư viện ABI. Khi sử dụng khối android.bundle
trong tệp build.gradle
của mô-đun cơ sở, bạn có thể tắt tính năng hỗ trợ cho một hoặc nhiều loại APK cấu hình như trình bày bên dưới:
Groovy
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
Kotlin
android { // When building Android App Bundles, the splits block is ignored. // You can remove it, unless you're going to continue to build multiple // APKs in parallel with the app bundle splits {...} // Instead, use the bundle block to control which types of configuration APKs // you want your app bundle to support. bundle { language { // This property is set to true by default. // You can specify `false` to turn off // generating configuration APKs for language resources. // These resources are instead packaged with each base and // feature APK. // Continue reading below to learn about situations when an app // might change setting to `false`, otherwise consider leaving // the default on for more optimized downloads. enableSplit = false } density { // This property is set to true by default. enableSplit = true } abi { // This property is set to true by default. enableSplit = true } } }
Xử lý các thay đổi về ngôn ngữ
Google Play sẽ xác định tài nguyên ngôn ngữ nào cần cài đặt với ứng dụng dựa trên lựa chọn ngôn ngữ trong phần cài đặt thiết bị của người dùng. Hãy cân nhắc người dùng thay đổi ngôn ngữ hệ thống mặc định sau khi tải ứng dụng xuống. Nếu ứng dụng hỗ trợ ngôn ngữ đó, thiết bị sẽ yêu cầu và tải xuống các APK cấu hình bổ sung cho tài nguyên ngôn ngữ đó từ Google Play.
Đối với ứng dụng cung cấp bộ chọn ngôn ngữ bên trong ứng dụng và tự động thay đổi ngôn ngữ, độc lập với tùy chọn cài đặt ngôn ngữ cấp hệ thống, bạn phải thực hiện một số thay đổi để ngăn sự cố do thiếu tài nguyên. Hãy đặt thuộc tính android.bundle.language.enableSplit
thành false
hoặc cân nhắc việc triển khai tính năng tải ngôn ngữ xuống theo yêu cầu bằng cách sử dụng thư viện Play Core như mô tả trong bài viết Tải tài nguyên ngôn ngữ bổ sung xuống