Trình bổ trợ Android cho Gradle 2.2.0 (tháng 9 năm 2016)

Phần phụ thuộc:
Mới:
  • Sử dụng Gradle 2.14.1, trong đó có các điểm cải thiện hiệu suất và tính năng mới, đồng thời khắc phục một lỗ hổng bảo mật cho phép đẩy báo cáo đặc quyền cục bộ lên khi sử dụng trình nền Gradle. Để biết thêm chi tiết, hãy xem Ghi chú phát hành Gradle.
  • Nhờ có DSL externalNativeBuild {}, Gradle hiện cho phép bạn liên kết đến các nguồn gốc và biên dịch thư viện gốc bằng CMake hoặc ndk-build. Sau khi xây dựng các thư viện gốc, Gradle sẽ đóng gói vào APK. Để tìm hiểu thêm về cách sử dụng CMake và ndk-build bằng Gradle, hãy đọc bài viết Bổ sung mã C và C++ vào dự án.
  • Khi bạn chạy một bản dựng từ dòng lệnh, Gradle hiện sẽ cố gắng tự động tải mọi thành phần hoặc bản cập nhật SDK bị thiếu mà dự án đang cần. Để tìm hiểu thêm, hãy đọc phần Tự động tải các gói còn thiếu bằng Gradle.
  • Tính năng thử nghiệm mới của hoạt động lưu vào bộ nhớ đệm cho phép Gradle tăng tốc thời gian xây dựng khi chuyển sang định dạng .dex, lưu trữ và tái sử dụng những phiên bản chuyển sang định dạng .dex của thư viện. Để tìm hiểu thêm về cách sử dụng tính năng thử nghiệm này, hãy đọc hướng dẫn Bộ nhớ đệm bản dựng.
  • Cải thiện hiệu suất bản dựng bằng cách sử dụng một quy trình đóng gói mặc định mới có khả năng nén, ký và căn chỉnh nén trong một tác vụ. Bạn có thể quay lại sử dụng các công cụ đóng gói cũ bằng cách bổ sung android.useOldPackaging=true vào tệp gradle.properties. Khi sử dụng công cụ đóng gói mới, bạn không thể thực hiện tác vụ zipalignDebug. Tuy nhiên, bạn có thể tự tạo tác vụ này bằng cách gọi phương thức createZipAlignTask(String taskName, File inputFile, File outputFile).
  • Tính năng ký APK hiện sử dụng Lược đồ chữ ký APK phiên bản 2 cùng tính năng ký JAR truyền thống. Tất cả các nền tảng Android đều chấp nhận APK được tạo từ tính năng trên. Mọi thay đổi đối với những APK này sau khi ký sẽ làm mất hiệu lực chữ ký phiên bản 2 và ngăn không cho cài đặt trên thiết bị. Để vô hiệu hoá tính năng này, hãy thêm đoạn mã sau vào tệp build.gradle cấp mô-đun:

    Groovy

    android {
      ...
      signingConfigs {
        config {
          ...
          v2SigningEnabled false
        }
      }
    }
          

    Kotlin

    android {
      ...
      signingConfigs {
        create("config") {
          ...
          v2SigningEnabled = false
        }
      }
    }
          
  • Đối với các bản dựng multidex, hiện bạn có thể sử dụng quy tắc ProGuard để xác định các lớp Gradle nên tổng hợp thành tệp DEX chính của ứng dụng. Do hệ thống Android tải tệp DEX chính trước khi khởi động ứng dụng, bạn có thể ưu tiên một số lớp nhất định khi khởi động bằng cách biên dịch các tệp này thành tệp DEX chính. Sau khi bạn tạo tệp cấu hình ProGuard dành riêng cho tệp DEX chính, hãy truyền đường dẫn của tệp cấu hình đến Gradle bằng buildTypes.multiDexKeepProguard. Thao tác sử dụng DSL này khác với việc sử dụng buildTypes.proguardFiles (cung cấp quy tắc ProGuard chung cho ứng dụng) và không chỉ định các lớp cho tệp DEX chính.
  • Hỗ trợ thêm tính năng cho cờ android:extractNativeLibs, giúp giảm kích thước ứng dụng khi bạn cài đặt trên thiết bị. Khi bạn thiết lập cờ này thành false trong phần tử <application> của tệp kê khai ứng dụng, các gói Gradle sẽ đóng gói các phiên bản điều chỉnh và không nén của thư viện gốc bằng APK. Thao tác này ngăn PackageManager sao chép các thư viện gốc từ APK sang hệ thống tệp của thiết bị trong quá trình cài đặt và bổ sung lợi ích rút gọn cập nhật delta ứng dụng.
  • Hiện bạn có thể chỉ định versionNameSuffixapplicationIdSuffix cho các phiên bản sản phẩm. (Vấn đề 59614)
Các thay đổi:
  • getDefaultProguardFile hiện trả về các tệp ProGuard mặc định mà Trình bổ trợ Android cho Gradle cung cấp và không còn dùng các tệp này trong SDK Android.
  • Cải thiện hiệu suất và các tính năng của trình biên dịch Jack:
    • Jack hiện hỗ trợ phạm vi kiểm thử của Jacoco khi thiết lập testCoverageEnabled thành true.
    • Cải thiện tính năng hỗ trợ cho trình xử lý chú giải. Trình xử lý chú giải trên classpath, chẳng hạn như bất kỳ phần phụ thuộc compile nào, sẽ tự động được áp dụng cho bản dựng. Bạn cũng có thể chỉ định trình xử lý chú giải trong bản dựng và truyền các đối số bằng cách sử dụng DSL javaCompileOptions.annotationProcessorOptions {} trong tệp build.gradle cấp mô-đun:

      Groovy

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className 'com.example.MyProcessor'
              // Arguments are optional.
              arguments = [ foo : 'bar' ]
            }
          }
        }
      }
          

      Kotlin

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className = "com.example.MyProcessor"
              // Arguments are optional.
              arguments(mapOf(foo to "bar"))
            }
          }
        }
      }
          

      Nếu bạn muốn áp dụng trình xử lý chú giải vào thời gian biên dịch nhưng không đưa tính năng này vào APK, hãy sử dụng phạm vi phần phụ thuộc annotationProcessor:

      Groovy

      dependencies {
          compile 'com.google.dagger:dagger:2.0'
          annotationProcessor 'com.google.dagger:dagger-compiler:2.0'
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
          

      Kotlin

      dependencies {
          implementation("com.google.dagger:dagger:2.0")
          annotationProcessor("com.google.dagger:dagger-compiler:2.0")
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
          
    • Đối với danh sách các thông số bạn có thể thiết lập, hãy chạy lệnh sau từ dòng lệnh:

      java -jar /build-tools/jack.jar --help-properties
      

    • Theo mặc định, nếu kích thước vùng nhớ khối xếp của trình nền Gradle tối thiểu là 1.5 GB, thì giờ đây, Jack sẽ chạy theo quy trình tương tự như Gradle. Để điều chỉnh kích thước vùng nhớ khối xếp trình nền, hãy thêm nội dung sau vào tệp gradle.properties:

      # This sets the daemon heap size to 1.5GB.
      org.gradle.jvmargs=-Xmx1536M