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

Trang này mô tả các tùy chọn cài đặt ứng dụng hữu ích trong tệp build.gradle cấp mô-đun mà bạn có thể muốn bật/tắt. 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, chúng tôi còn mô tả cách để bạn:

  • Thay đổi ID ứng dụng cho các cấu hình xây dựng khác nhau.
  • Điều chỉnh không gian tên một cách an toàn, độc lập với ID ứng dụng.

Đặt ID ứng dụng

Mỗi ứng dụng Android đều có một ID ứng dụng duy nhất như kiểu tên gói Java, chẳng hạn như com.example.myapp. ID 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. Sau khi phát hành ứng dụng, bạn không được thay đổi ID ứng dụng. Nếu bạn muốn tải một phiên bản mới của ứng dụng lên, ID ứng dụng đó (và giấy chỉ mà bạn ký với ứng dụng đó) phải giống với lần phát hành ban đầu — nếu bạn thay đổi ID ứng dụng, Cửa hàng Google Play sẽ hiểu rằng phiên bản được tải lên là một ứng dụng hoàn toàn khác.

ID ứng dụng của bạn được xác định bởi thuộc tính applicationId trong tệp build.gradle của mô-đun, như minh họa dưới đây:

Groovy

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 15
        targetSdk = 24
        versionCode = 1
        versionName = "1.0"
    }
    ...
}

Mặc dù ID ứng dụng giống kiểu tên gói Java truyền thống (không gian tên mã của bạn), các quy tắc đặt tên cho ID ứng dụng sẽ hạn chế hơn một chút:

  • Tên này 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 bao gồm cả chữ và 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 theo kiểu Java 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 hai thuộc tính một cách độc lập, nhưng chúng tôi không khuyến khích điều này.

Dưới đây là đề xuất của chúng tôi khi bạn cài đặt ID ứng dụng:

  • Giữ nguyên ID ứng dụng như không gian tên. Sự khác biệt giữa hai thuộc tính đôi khi có thể gây nhầm lẫn, nhưng nếu bạn giữ nguyên hai thuộc tính thì bạn không cần phải lo lắng.
  • Đừng thay đổi ID ứng dụng sau khi phát hành ứng dụng. Nếu bạn thay đổi ID ứng dụng, Cửa hàng Google Play sẽ hiểu rằng ứng dụng được tải lên tiếp sau đó là một ứng dụng mới.
  • Xác định rõ ID ứng dụng. Nếu không xác định rõ ID ứng dụng bằng cách sử dụng thuộc tính applicationId, ID đó 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 ID ứng dụng, việc này thường không phải ý định của bạn.

Lưu ý: ID ứng dụng từng được liên kết trực tiếp với tên gói của mã; vì vậy, một số API của Android sử dụng từ khóa "tên gói" trong tên phương thức và tên thông số, nhưng đây thực chất là ID ứng dụng của bạn. Ví dụ: phương thức Context.getPackageName() trả về ID ứng dụng của bạn. Bạn không cần phải chia sẻ tên gói thực của mã bên ngoài ID ứng dụng của bạn.

Chú ý: Nếu bạn đang sử dụng WebView, hãy cân nhắc sử dụng tên gói làm tiền tố trong ID ứng dụng; nếu không, bạn có thể gặp sự cố như mô tả trong số phát hành 211768.

Thay đổi ID ứng dụng để kiểm thử

Theo mặc định, các công cụ xây dựng áp dụng một ID ứng dụng cho APK kiểm thử đo lường bằng cách sử dụng ID ứng dụng cho biến thể xây dựng đã cho, kèm theo .test. Ví dụ: APK kiểm thử cho biến thể xây dựng com.example.myapp.free có ID ứng dụng là com.example.myapp.free.test.

Mặc dù không cần thiết, bạn có thể thay đổi ID ứ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, được sử dụng làm tên gói Java cho các loại 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ư hiển thị trong đoạn mã dưới đây. Ban đầu, namespace được đặt thành tên gói theo kiểu Java mà bạn chọn khi tạo dự án.

android {
    namespace 'com.example.myapp'
    ...
}

Trong khi xây dựng ứng dụng của bạn vào gói ứng dụng (APK) cuối cùng, công cụ xây dựng của Android sử dụng không gian tên cho hai phần:

  • Các phần này áp dụng tên này làm không gian tên cho loại R.java được 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 xây dựng trước, loại R được tạo tại com.example.myapp.R.

  • Các loại này sử dụng tên này để phân giải mọi tên loại tương đối được khai báo trong tệp kê khai.

    Ví dụ: Trong tệp xây dựng trước, một hoạt động được khai báo là <activity android:name=".MainActivity"> được giải quyết là com.example.myapp.MainActivity.

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 nền của dự án, nơi bạn lưu giữ các hoạt động và ID ứng dụng khác. Tất nhiên, bạn có thể có các gói phụ khác trong dự án, nhưng các tệp đó phải nhập loại R.java bằng cách sử dụng không gian tên từ thuộc tính namespace.

Để quy trình công việc trở nên đơn giản hơn, bạn nên giữ nguyên không gian tên giống với ID ứng dụng của minh, theo mặc định.

Thay đổi không gian tên

Bạn nên giữ nguyên không gian tên và ID ứng dụng giống nhau vì các giá trị này theo mặc định. Tuy nhiên, bạn có thể cần phải thay đổi không gian tên tại một số điểm nếu bạn đang sắp xếp lại mã hoặc để tránh xung giữa các không gian tên. Trong những trường hợp này, bạn có thể 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) độc lập với ID ứng dụng. Trước khi bạn thực hiện điều này, hãy đảm bảo rằng ID ứng dụng của bạn được xác định rõ để việc thay đổi không gian tên không làm thay đổi ID ứng dụng theo không gian tên mới đổi. Để biết thêm thông tin về ảnh hưởng của không gian tên đối với ID ứng dụng, hãy xem phần Đặt ID ứng dụng.

Nếu bạn có tên khác cho namespace và Gradle applicationId, hãy nhớ rằng các công cụ xây dựng sẽ sao chép ID ứng dụng vào tệp kê khai cuối cùng của ứng dụng vào cuối bản dựng. Vì vậy, nếu bạn kiểm tra tệp AndroidManifest.xml của mình sau khi xây dựng, bạn không phải ngạc nhiên tại sao thuộc tính package lại được đặt thành ID ứng dụng. Cửa hàng Google Play và nền tảng Android thực sự tìm cách xác định ứng dụng của bạn thông qua thuộc tính package của tệp kê khai sáp nhập.