Định cấu hình cho mô-đun ứng dụng | Android Developers
Trang này mô tả các chế độ cài đặt hữu ích cho ứng dụng trong tệp build.gradle
ở cấp mô-đun.
Ngoài việc cung cấp thông tin tổng quan về các thuộc tính quan trọng được đặt trong tệp build.gradle
, hãy tìm hiểu cách:
- Thay đổi mã ứng dụng cho nhiều cấu hình bản dựng.
- Điều chỉnh không gian tên một cách an toàn, không liên quan gì đến mã ứng dụng.
Mục lục bài viết
Đặt mã ứng dụng
Mỗi ứng dụng Android đều có một mã ứng dụng duy nhất trông giống tên gói Kotlin hoặc Java, chẳng hạn như com.example.myapp. Mã này chỉ xác định duy nhất ứng dụng của bạn trên thiết bị và trong Cửa hàng Google Play.
Lưu ý quan trọng:
Sau khi phát hành ứng dụng, bạn tuyệt đối không được thay đổi mã ứng dụng. Nếu bạn thay đổi mã ứng dụng, thì Cửa hàng Google Play sẽ coi lượt tải lên đó là của một ứng dụng hoàn toàn khác. Nếu muốn tải phiên bản mới của ứng dụng lên, bạn phải sử dụng cùng một mã ứng dụng và chứng chỉ ký như khi phát hành ứng dụng lần đầu.
Mã ứng dụng của bạn được xác định bằng thuộc tính applicationId
trong tệp build.gradle
của mô-đun, như minh hoạ dưới đây:
Kotlin
android { defaultConfig { applicationId = "com.example.myapp" minSdk = 15 targetSdk = 24 versionCode = 1 versionName = "1.0" } ... }
Groovy
android { defaultConfig { applicationId "com.example.myapp" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" } ... }
Mặc dù mã ứng dụng trông giống tên gói Kotlin hoặc Java truyền thống, nhưng các quy tắc đặt tên cho mã ứng dụng sẽ bị hạn chế hơn một chút:
- Mã ứng dụng phải có ít nhất 2 phân đoạn (gồm một hoặc nhiều dấu chấm).
- Mỗi phân đoạn phải bắt đầu bằng một chữ cái.
- Tất cả ký tự phải có dạng chữ-số hoặc dấu gạch dưới [a-zA-Z0-9_].
Khi bạn tạo một dự án mới trong Android Studio, applicationId
sẽ tự động được gán tên gói mà bạn chọn trong quá trình thiết lập. Từ giờ trở đi, bạn có thể bật/tắt 2 thuộc tính một cách độc lập, nhưng bạn không nên làm vậy.
Khi đặt mã ứng dụng, bạn nên làm như sau:
- Giữ cho mã ứng dụng giống với không gian tên. Sự khác biệt giữa 2 thuộc tính đôi khi có thể gây nhầm lẫn, nhưng nếu bạn giữ cho chúng giống với nhau thì không cần phải lo lắng nữa.
- Không nên thay đổi mã ứng dụng sau khi phát hành ứng dụng. Nếu bạn thay đổi, Cửa hàng Google Play sẽ coi lượt tải lên tiếp theo là của một ứng dụng mới.
- Xác định rõ mã ứng dụng. Nếu không xác định rõ mã ứng dụng bằng cách sử dụng thuộc tính
applicationId
, thì mã đó sẽ tự động lấy giá trị giống với không gian tên. Điều này có nghĩa là việc thay đổi không gian tên sẽ làm thay đổi mã ứng dụng (thường thì đây là điều bạn không mong muốn).
Lưu ý:
Vì mã ứng dụng này từng được liên kết trực tiếp với tên gói của mã, nên một số Android API sử dụng từ khoá “package name” (tên gói) trong tên phương thức và tên tham số. Đây thực ra là mã ứng dụng của bạn. Ví dụ: phương thức Context.getPackageName()
trả về mã ứng dụng của bạn. Bạn không cần phải chia sẻ tên thực cho gói của mã ở bên ngoài mã ứng dụng của mình.
Chú ý: Nếu bạn đang dùng WebView
, hãy cân nhắc sử dụng tên gói làm tiền tố trong mã ứng dụng; nếu không, bạn có thể gặp sự cố như mô tả trong vấn đề 211768.
Thay đổi mã ứng dụng để kiểm thử
Theo mặc định, các công cụ xây dựng áp dụng một mã ứng dụng cho APK kiểm thử đo lường bằng cách dùng mã ứng dụng đã được thêm .test
vào phần cuối cho biến thể bản dựng đã cho. Ví dụ: APK kiểm thử cho biến thể bản dựng com.example.myapp.free
có mã ứng dụng là com.example.myapp.free.test
.
Mặc dù không cần thiết, nhưng bạn có thể thay đổi mã ứng dụng bằng cách xác định thuộc tính testApplicationId
trong khối defaultConfig
hoặc productFlavor
của mình.
Đặt không gian tên
Mỗi mô-đun của Android đều có một không gian tên dùng làm tên gói Kotlin hoặc Java cho các lớp R
và BuildConfig
được tạo.
Không gian tên của bạn được xác định bằng thuộc tính namespace
trong tệp build.gradle
của mô-đun, như minh hoạ trong đoạn mã dưới đây. Ban đầu, namespace
được đặt thành tên gói mà bạn chọn khi tạo dự án.
Kotlin
android { namespace = "com.example.myapp" ... }
Groovy
android { namespace "com.example.myapp" ... }
Trong khi xây dựng ứng dụng thành gói ứng dụng cuối cùng (APK), các công cụ xây dựng Android dùng không gian tên đó làm không gian tên cho lớp R
đã tạo của ứng dụng (dùng để truy cập vào tài nguyên ứng dụng của bạn).
Ví dụ: Trong tệp bản dựng trước đó, lớp R
được tạo tại com.example.myapp.R
.
Do đó, tên bạn đặt cho thuộc tính namespace
của tệp build.gradle
phải luôn khớp với tên gói cơ sở của dự án, nơi bạn lưu giữ các hoạt động và mã ứng dụng khác. Bạn có thể có các gói phụ khác trong dự án của mình, nhưng các tệp đó phải nhập lớp R
bằng cách sử dụng không gian tên của thuộc tính namespace
.
Để quy trình làm việc đơn giản hơn, bạn nên giữ cho không gian tên giống với mã ứng dụng theo như mặc định.
Lưu ý:namespace
này đại diện cho tên gói Java hoặc Kotlin của ứng dụng, sau khi APK được biên dịch thì thuộc tính package
trong tệp kê khai sáp nhập sẽ đại diện cho
Trong khi thuộc tínhnày đại diện cho tên gói Java hoặc Kotlin của ứng dụng, sau khi APK được biên dịch thì thuộc tínhtrong tệp kê khai sáp nhập sẽ đại diện cho mã ứng dụng duy nhất trên toàn ứng dụng của bạn.
Thay đổi không gian tên
Trong hầu hết các trường hợp, bạn nên giữ cho không gian tên giống với mã ứng dụng theo như mặc định. Tuy nhiên, bạn có thể phải thay đổi không gian tên tại một thời điểm nào đó nếu bạn sắp xếp lại mã hoặc để tránh xung đột về không gian tên.
Trong những trường hợp này, hãy thay đổi không gian tên bằng cách cập nhật thuộc tính namespace
trong tệp build.gradle
của mô-đun không liên quan đến mã ứng dụng. Trước khi bạn thực hiện điều này, hãy đảm bảo mã ứng dụng của bạn được xác định rõ ràng để việc thay đổi không gian tên không làm thay đổi mã ứng dụng. Để biết thêm thông tin về ảnh hưởng của không gian tên đối với mã ứng dụng, vui lòng xem phần Đặt mã ứng dụng.
Nếu bạn đặt các tên khác nhau cho namespace
và Gradle applicationId
, thì các công cụ xây dựng sẽ sao chép mã ứng dụng vào tệp kê khai cuối cùng của ứng dụng khi kết thúc quá trình xây dựng.
Vì vậy, nếu kiểm tra tệp AndroidManifest.xml
của mình sau khi xây dựng, bạn sẽ thấy thuộc tính package
được đặt thành mã ứng dụng. Trên thực tế, Cửa hàng Google Play và nền tảng Android sẽ tìm thuộc tính package
của tệp kê khai sáp nhập để xác định ứng dụng của bạn.
Thay đổi không gian tên để kiểm thử
Không gian tên mặc định cho các nhóm tài nguyên androidTest
và test
là không gian tên chính, trong đó có .test
được thêm vào ở cuối. Ví dụ: nếu thuộc tính namespace
trong tệp build.gradle
là com.example.myapp
, thì không gian tên để kiểm thử sẽ được đặt theo mặc định là com.example.myapp.test
. Để thay đổi không gian tên cho việc kiểm thử, hãy sử dụng thuộc tính testNamespace
như minh hoạ trong đoạn mã sau:
Kotlin
android { namespace = "com.example.myapp" testNamespace = "com.example.mytestapp" ... }
Groovy
android { namespace "com.example.myapp" testNamespace "com.example.mytestapp" ... }
Thận trọng: Đừng đặt testNamespace
và namespace
thành cùng một giá trị, nếu không sẽ xảy ra xung đột không gian tên.
Để tìm hiểu thêm về việc kiểm thử, hãy xem bài viết Kiểm thử ứng dụng trên Android.