Định cấu hình cho mô-đun ứng dụng

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.

Đặ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.

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).

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 RBuildConfig đượ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.

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 androidTesttest 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.gradlecom.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 testNamespacenamespace 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.