12/08/2018, 16:12

Android custom build configurations

Build type xác định những thuộc tính nhất định mà Gradle sử dụng khi build và đóng gói app của bạn, và thường được cấu hình cho những stage khác nhau trong quá trình phát triển. Ví dụ như debug type sẽ cấu hình những option dành cho debug và signs APK với debug key, release type sẽ bao gồm những ...

Build type xác định những thuộc tính nhất định mà Gradle sử dụng khi build và đóng gói app của bạn, và thường được cấu hình cho những stage khác nhau trong quá trình phát triển. Ví dụ như debug type sẽ cấu hình những option dành cho debug và signs APK với debug key, release type sẽ bao gồm những option cho việc release, có thể shrink resource, obfuscate code, proguard, signs APK với release key. Mặc định thì Android Studio đã tạo ra 2 loại build type là debug và release. Chúng ta có thể tạo và cấu hình build type ở file build.gradle nằm ở module-level, bên trong block android. Khi bạn tạo module mới, Android Studio sẽ tự động tạo ra debug và release build type cho bạn. Cho dù debug build type không hiện thị ở file config thì Android Studio cũng cấu hình nó với giá trị debuggable là true.

android {
    ...
    defaultConfig {...}
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            applicationIdSuffix ".debug"
        }

        /**
         * Thuộc tính 'initWith' cho phép bạn copy những cấu hình từ build type khác.
         *  Bạn chỉ cần cấu hình cái bạn muốn thay đổi.
         */

        jnidebug {

            // Nó sẽ copy attribute debuggable và debug signing configurations.
            initWith debug

            applicationIdSuffix ".jnidebug"
            jniDebuggable true
        }
    }
}

Bạn có thể tìm thấy tất cả thuộc tính cần thiết để cấu hình build type ở đây http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.BuildType.html

Product flavors đại diện cho nhiều version khác nhau cho app để đưa đến người dùng, ví dụ như là bản free hoặc bản trả phí. Chúng ta có thể customize product flavors để sử dụng code và resources khác nhau, trong khi chia sẻ và sử dụng lại những phần chung cho tất cả versions của app. Product flavors thì không bắt buộc nên nếu muốn dùng thì bạn phải tự tạo nó. Việc tạo product flavors giống với việc tạo build type: thêm chúng vào block productFlavors và cấu hình những cài đặt mà bạn muốn. Product flavors hỗ trợ những thuộc tính giống như defaultConfig - vì thực tế default config thuộc về lớp ProductFlavor. Nghĩa là bạn có thể cấu hình phần base cho tất cả flavors ở defaultConfig block, và mỗi flavor có thể thay đổi bất kỳ giá trị mặc định nào, ví dụ như là applicationId.

android {
    ...
    defaultConfig {...}
    buildTypes {...}
    productFlavors {
        demo {
            applicationIdSuffix ".demo"
            versionNameSuffix "-demo"
        }
        full {
            applicationIdSuffix ".full"
            versionNameSuffix "-full"
        }
    }
}

Ví dụ trên tạo ra "demo" và "full" product flavors và cấu hình applicationIdSuffix và versionNameSufffix. Sau khi tạo và cấu hình cho product flavor, click Sync Now ở thanh thông báo. Sau khi sync thành công, Gradle sẽ tự động tạo variants dựa trên build type và product flavors, và tên hiển thị của chúng ở build variants sẽ là <product-flavor><build-type>. Theo ví dụ ở trên sẽ tạo ra những build variants sau:

  • demoDebug
  • demoRelease
  • fullDebug
  • fullRelease

Bạn có thể chỉ định giá trị cho vài thuộc tính của manifest file khi cấu hình build variant. Những giá trị này sẽ override những giá trị đã tồn tại trong file manifest. Nó hữu ích khi bạn muốn generate ra nhiều APK cho nhiều modules mà với mỗi module thì có tên, minimum SDK version, target SDK version,... khác nhau.

Hệ thống quản lý project dependencies từ local filesystem của bạn và từ remote repositories. Nó ngăn cản bạn tìm kiếm, tải hay copy binary package của dependencies vào thư mục project của bạn.

Hệ thống cho phép bạn chỉ định việc cài đặt signing khi cấu hình build app, và not có thể tự động sign APKs trong suốt quá trình build. Hệ thống signs debug version với key mặc định và known credential để tránh nhập password khi build. Hệ thống không sign release version trừ khi bạn xác định rõ ràng một cấu hình signing cho việc build đó. NẾu bạn không có release key, bạn có thể generate nó ra.

Hệ thống cho phép bạn chỉ định ProGuard rule file cho từng build variant. Hệ thống có thể chạy Proguard để shrink and obfuscate những file class của bạn trong quá trình build.

Hệ thống cho phép bạn tự động build những APK khác nhau mà mỗi APK chỉ contain code và resource cần thiết cho từng độ phân giải màn hình hoặc Application Binary Interface.

Bài viết được dịch hiểu từ https://developer.android.com/studio/build/index.html

0