กำหนดค่าบิวด์

ระบบบิลด์ของ Android จะรวบรวมทรัพยากรของแอป รวมถึงซอร์สโค้ดและแพ็กเกจ เป็น APK หรือ Android App Bundle ที่คุณจะทดสอบ ติดตั้งใช้งาน รับรอง แจกจ่าย

Android Studio ใช้ Gradle ซึ่งเป็นชุดเครื่องมือบิลด์ขั้นสูงเพื่อเปลี่ยนโหมดการทำงานอัตโนมัติ และจัดการกระบวนการสร้าง พร้อมกับให้คุณกำหนด การกำหนดค่าบิลด์ การกำหนดค่าบิลด์แต่ละรายการจะกำหนดชุดโค้ดของตัวเองได้ และทรัพยากรต่างๆ ไปพร้อมกับนำส่วนที่พบได้ทั่วไปในแอปทุกเวอร์ชันมาใช้ซ้ำ ปลั๊กอิน Android Gradle ทำงานร่วมกับชุดเครื่องมือบิลด์ เพื่อให้ กระบวนการและการตั้งค่าที่กำหนดค่าได้ซึ่งมีไว้สำหรับการสร้างและการทดสอบโดยเฉพาะ แอป Android

Gradle และปลั๊กอิน Android Gradle ทำงานแยกจาก Android Studio ช่วงเวลานี้ หมายความว่าคุณสามารถสร้างแอป Android จากใน Android Studio บรรทัดคำสั่งบนเครื่องของคุณหรือในเครื่องที่ไม่ได้ใช้ Android Studio ติดตั้งไว้ เช่น เซิร์ฟเวอร์การรวมอย่างต่อเนื่อง

หากคุณไม่ได้ใช้ Android Studio คุณสามารถเรียนรู้วิธีสร้างและเรียกใช้แอปจาก บรรทัดคำสั่ง เอาต์พุตของบิลด์จะเหมือนกันไม่ว่าคุณ สร้างโปรเจ็กต์จากบรรทัดคำสั่ง บนเครื่องระยะไกล หรือใช้ Android Studio

หมายเหตุ: เนื่องจาก Gradle และปลั๊กอิน Android Gradle ทำงาน แยกต่างหากจาก Android Studio คุณจะต้องอัปเดตเครื่องมือสร้างบิลด์ แยกกัน อ่านบันทึกประจำรุ่นเพื่อดูวิธีอัปเดต Gradle และปลั๊กอิน Android Gradle

ความยืดหยุ่นของระบบบิลด์ของ Android ช่วยให้คุณสร้าง สร้างการกำหนดค่าโดยไม่แก้ไขไฟล์แหล่งที่มาหลักของแอป ช่วงเวลานี้ ช่วยให้คุณเข้าใจวิธีการทำงานของระบบบิลด์ Android และวิธีการทำงานของ ซึ่งจะช่วยให้คุณปรับแต่งและทำให้การกำหนดค่าบิลด์หลายรายการทำงานโดยอัตโนมัติได้ หากคุณ หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการทำให้แอปใช้งานได้ โปรดดูสร้างและเรียกใช้แอป วิธีสร้างแบบกำหนดเอง การกำหนดค่าบิลด์ทันที โดยใช้ Android Studio โปรดดูกำหนดค่าบิลด์ ผลิตภัณฑ์ย่อย

กระบวนการบิลด์

กระบวนการบิลด์ประกอบด้วยเครื่องมือและกระบวนการมากมายที่แปลงโปรเจ็กต์ของคุณ ลงใน Android Application Package (APK) หรือ Android App Bundle (AAB) ให้หน่อย

ปลั๊กอิน Android Gradle สร้างกระบวนการบิลด์ส่วนใหญ่ให้คุณ แต่ก็ทำได้ ในการทำความเข้าใจกระบวนการสร้างบางด้าน เพื่อช่วยให้คุณสามารถปรับ เพื่อตอบสนองความต้องการของคุณ

โปรเจ็กต์ที่แตกต่างกันอาจมีเป้าหมายบิลด์ที่แตกต่างกัน ตัวอย่างเช่น บิลด์สำหรับ ไลบรารีของบุคคลที่สามสร้าง Android Archive (AAR) หรือ Java Archive (JAR) ห้องสมุด อย่างไรก็ตาม แอปคือประเภทโปรเจ็กต์ที่พบบ่อยที่สุดและสร้างขึ้นสำหรับแอป โปรเจ็กต์จะสร้างการแก้ไขข้อบกพร่องหรือเผยแพร่ APK หรือ AAB ของแอปที่คุณทำให้ใช้งานได้ ทดสอบ หรือเผยแพร่ไปยังผู้ใช้ภายนอก

หน้านี้จะมุ่งเน้นที่การพัฒนาแอป แต่หลายขั้นตอนและแนวคิดของบิลด์มีอยู่ในประเภทบิลด์ส่วนใหญ่

อภิธานศัพท์บิลด์ของ Android

Gradle และปลั๊กอิน Android Gradle ช่วยคุณกำหนดค่าด้านต่างๆ ต่อไปนี้ ของบิลด์ของคุณ

ประเภทบิลด์

ประเภทบิลด์จะกำหนดคุณสมบัติบางอย่างที่ Gradle ใช้เมื่อสร้าง และ ทำแพ็กเกจแอปของคุณ โดยทั่วไปประเภทบิลด์จะได้รับการกำหนดค่าสำหรับ ในวงจรการพัฒนา

เช่น ประเภทบิลด์การแก้ไขข้อบกพร่อง จะเปิดใช้ตัวเลือกการแก้ไขข้อบกพร่อง และรับรองแอปด้วยคีย์การแก้ไขข้อบกพร่อง ประเภทบิลด์ที่เผยแพร่อาจย่อ ทำให้ยากต่อการอ่าน (Obfuscate) และรับรองแอปของคุณด้วยรุ่น เพื่อการเผยแพร่

คุณต้องกำหนดประเภทบิลด์อย่างน้อย 1 ประเภทเพื่อ สร้างแอปของคุณขึ้นมา Android Studio สร้างประเภทบิลด์การแก้ไขข้อบกพร่องและรุ่น โดยค่าเริ่มต้น หากต้องการเริ่มปรับแต่งการตั้งค่าแพ็กเกจสำหรับแอป โปรดดูวิธี เพื่อกำหนดค่าบิลด์ ประเภทต่างๆ

รสชาติของผลิตภัณฑ์
รสชาติของผลิตภัณฑ์แสดงถึงแอปเวอร์ชันต่างๆ ที่คุณทำสิ่งต่อไปนี้ได้ ให้แก่ผู้ใช้ เช่น เวอร์ชันฟรีและเวอร์ชันที่ต้องชำระเงิน คุณสามารถ กำหนดรสชาติของผลิตภัณฑ์ให้ใช้โค้ดและทรัพยากรต่างๆ ขณะแชร์ และนำชิ้นส่วนที่พบได้ทั่วไปในแอปทุกเวอร์ชันมาใช้ซ้ำ ผลิตภัณฑ์ รสชาติเป็นตัวเลือกที่ไม่บังคับ และคุณต้องสร้างรสชาติด้วยตนเอง วิธีเริ่มสร้าง เวอร์ชันต่างๆ ของแอปของคุณ โปรดดูวิธีกำหนดค่า รสชาติของผลิตภัณฑ์
ตัวแปรของบิลด์
ตัวแปรของบิลด์คือข้ามผลิตภัณฑ์ของประเภทบิลด์และรสชาติของผลิตภัณฑ์ และ คือการกำหนดค่าที่ Gradle ใช้ในการสร้างแอปของคุณ การใช้ตัวแปรของบิลด์ คุณสามารถสร้างเวอร์ชันแก้ไขข้อบกพร่องของเวอร์ชันผลิตภัณฑ์ในระหว่างการพัฒนาได้ และเวอร์ชันผลิตภัณฑ์ที่ลงนามแล้วของเวอร์ชัน ผลิตภัณฑ์ของคุณสำหรับการจัดจำหน่าย แม้ว่าคุณจะไม่ได้กำหนดค่าตัวแปรของบิลด์โดยตรง แต่คุณจะกำหนดค่า ประเภทและรสชาติของผลิตภัณฑ์ที่ก่อตัวขึ้น กำลังสร้างบิลด์เพิ่มเติม ประเภทหรือเวอร์ชันผลิตภัณฑ์ยังเป็นการสร้างตัวแปรบิลด์เพิ่มเติมอีกด้วย เพื่อเรียนรู้ วิธีสร้างและจัดการตัวแปรของบิลด์ โปรดอ่านกำหนดค่าตัวแปรของบิลด์ ภาพรวม
รายการไฟล์ Manifest
คุณระบุค่าสำหรับพร็อพเพอร์ตี้บางรายการของไฟล์ Manifest ในบิลด์ได้ การกำหนดค่าตัวแปร ค่าบิลด์เหล่านี้จะลบล้างค่าที่มีอยู่ใน ไฟล์ Manifest วิธีนี้มีประโยชน์หากต้องการสร้างตัวแปรหลายรายการ ด้วยชื่อแอปพลิเคชันอื่น เวอร์ชัน SDK ขั้นต่ำ หรือ เวอร์ชัน SDK เป้าหมาย เมื่อมีไฟล์ Manifest หลายรายการ เครื่องมือผสาน รวมการตั้งค่าไฟล์ Manifest
การขึ้นต่อกัน
ระบบบิลด์จะจัดการทรัพยากร Dependency ของโปรเจ็กต์จากระบบไฟล์ในเครื่องของคุณ และจากที่เก็บระยะไกล ซึ่งหมายความว่าคุณไม่ต้องกำหนด ค้นหา ดาวน์โหลด และคัดลอกแพ็กเกจไบนารีของทรัพยากร Dependency ไปยัง ไดเรกทอรีโปรเจ็กต์ ดูข้อมูลเพิ่มเติมได้จากเพิ่มบิลด์ ทรัพยากร Dependency
การลงนาม
ระบบบิลด์ให้คุณระบุการตั้งค่าการรับรองในบิลด์ได้ และสามารถรับรองแอปของคุณโดยอัตโนมัติระหว่างบิลด์ได้ ขั้นตอนได้ ระบบบิลด์จะรับรองเวอร์ชันแก้ไขข้อบกพร่องด้วยคีย์เริ่มต้น ใบรับรองที่ใช้ข้อมูลเข้าสู่ระบบที่รู้จักเพื่อหลีกเลี่ยงการถามรหัสผ่านที่บิลด์ ระบบบิลด์จะไม่รับรองเวอร์ชันที่เผยแพร่ เว้นแต่คุณจะ กำหนดการกำหนดค่าการลงชื่อสำหรับบิลด์นี้อย่างชัดเจน หากไม่ มีคีย์การเผยแพร่ ซึ่งสามารถสร้างได้ตามที่อธิบายไว้ในลงนามแอป บิลด์ที่ลงนามแล้ว จำเป็นสำหรับการจัดจำหน่ายแอปผ่าน App Store ส่วนใหญ่
การลดขนาดโค้ดและทรัพยากร
ระบบบิลด์ช่วยให้คุณระบุไฟล์กฎ ProGuard ที่แตกต่างกันสำหรับ ตัวแปรของบิลด์แต่ละรายการ เมื่อคุณสร้างแอป ระบบบิลด์จะใช้ กฎที่เหมาะสมในการย่อ โค้ดและทรัพยากรโดยใช้เครื่องมือการลดขนาดในตัว เช่น R8 การลดขนาดโค้ดและทรัพยากรจะช่วยลดขนาด APK หรือ AAB ได้
การรองรับ APK หลายรายการ
ระบบบิลด์จะช่วยให้คุณสร้าง APK ต่างๆ ได้โดยอัตโนมัติ แต่ละรายการจะมีเฉพาะโค้ดและทรัพยากรที่จำเป็น สำหรับความหนาแน่นของหน้าจอหรืออินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) สำหรับข้อมูลเพิ่มเติม โปรดดูที่ สร้าง APK หลายรายการ แต่การเผยแพร่ AAB รายการเดียวจะเป็น วิธีการที่แนะนำ เนื่องจากมีการแยกตามภาษานอกเหนือจาก ความหนาแน่นของหน้าจอและ ABI โดยไม่ต้องอัปโหลด และอาร์ติแฟกต์หลายรายการ ลงใน Google Play แอปใหม่ทั้งหมดที่ส่งหลังเดือนสิงหาคม 2021 จะต้องใช้ AAB

เวอร์ชัน Java ใน Android บิลด์

ซอร์สโค้ดของคุณเขียนด้วย Java, Kotlin หรือทั้งคู่ คุณต้องเลือกภาษา JDK หรือ Java จากหลายที่ สำหรับบิลด์ของคุณ ดูเวอร์ชัน Java ในบิลด์ Android เพื่อดูรายละเอียด

ไฟล์การกำหนดค่าบิลด์

คุณต้องทำการเปลี่ยนแปลงอย่างใดอย่างหนึ่งหรือ ไฟล์การกำหนดค่าบิลด์เพิ่มเติม เหล่านี้ ไฟล์ข้อความธรรมดาจะใช้ภาษาเฉพาะโดเมน (DSL) เพื่ออธิบายและ จัดการตรรกะของบิลด์โดยใช้ สคริปต์ Kotlin ซึ่งเป็นกลิ่นอายของภาษา Kotlin คุณยังสามารถใช้ Groovy ซึ่งเป็น ภาษาแบบไดนามิกสำหรับ Java Virtual Machine (JVM) เพื่อกำหนดค่าบิลด์

คุณไม่จำเป็นต้องรู้สคริปต์ Kotlin หรือ Groovy เพื่อเริ่มกำหนดค่า เนื่องจากปลั๊กอิน Android Gradle แนะนำองค์ประกอบ DSL ส่วนใหญ่ ที่คุณต้องการ ดูข้อมูลเพิ่มเติมเกี่ยวกับปลั๊กอิน DSL สำหรับ Android Gradle ได้ที่ เอกสารอ้างอิง DSL สคริปต์ Kotlin ยังต้องอาศัย ข้อมูลเบื้องหลัง Gradle Kotlin DSL

เมื่อเริ่มโปรเจ็กต์ใหม่ Android Studio จะสร้าง ไฟล์เหล่านี้ให้คุณ และป้อนข้อมูลโดยอิงตามค่าเริ่มต้นที่เหมาะสม โปรเจ็กต์ โครงสร้างไฟล์จะมีรูปแบบดังต่อไปนี้

└── MyApp/  # Project
    ├── gradle/
    │   └── wrapper/
    │       └── gradle-wrapper.properties
    ├── build.gradle(.kts)
    ├── settings.gradle(.kts)
    └── app/  # Module
    │   ├── build.gradle(.kts)
    │   ├── build/
    │   ├── libs/
    │   └── src/
    │        └── main/  # Source set
    │            ├── java/
    │            │   └── com.example.myapp
    │            ├── res/
    │            │   ├── drawable/
    │            │   ├── values/
    │            │   └── ...
    │            └── AndroidManifest.xml

มีไฟล์การกำหนดค่าบิลด์ของ Gradle จำนวนหนึ่งที่เป็นส่วนหนึ่งของ โครงสร้างโปรเจ็กต์มาตรฐานสำหรับแอป Android ก่อนจะเริ่ม ในการกำหนดค่าบิลด์ คุณต้องเข้าใจขอบเขตและวัตถุประสงค์ ของแต่ละไฟล์เหล่านี้และองค์ประกอบ DSL พื้นฐานที่ไฟล์เหล่านั้นกำหนด

ไฟล์ Gradle Wrapper

Gradle Wrapper (gradlew) เป็นแอปพลิเคชันขนาดเล็กที่รวมอยู่ใน ซอร์สโค้ดที่ดาวน์โหลดและเปิดใช้ Gradle เอง ซึ่งจะทำให้มีการดำเนินการบิลด์ที่สอดคล้องกันมากขึ้น นักพัฒนาแอปจะดาวน์โหลด แหล่งที่มาของแอปพลิเคชันและเรียกใช้ gradlew การดำเนินการนี้จะดาวน์โหลด Gradle ที่จำเป็น การแจกจ่าย และเปิดใช้ Gradle เพื่อสร้างแอปพลิเคชันของคุณ

ไฟล์ gradle/wrapper/gradle-wrapper.properties มีพร็อพเพอร์ตี้ distributionUrl ที่อธิบายเวอร์ชันของ ใช้ Gradle ในการเรียกใช้บิลด์

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

ไฟล์การตั้งค่า Gradle

ไฟล์ settings.gradle.kts (สำหรับ Kotlin DSL) หรือ ไฟล์ settings.gradle (สำหรับ Groovy DSL) จะอยู่ที่รูท ไดเรกทอรีโปรเจ็กต์ ไฟล์การตั้งค่านี้ระบุที่เก็บระดับโปรเจ็กต์ และแจ้งให้ Gradle ทราบว่าควรใส่โมดูลใดเมื่อสร้าง แอป โปรเจ็กต์แบบหลายโมดูลต้องระบุแต่ละโมดูลที่ควรอยู่ใน งานสร้างขั้นสุดท้าย

สำหรับโปรเจ็กต์ส่วนใหญ่ ไฟล์จะมีลักษณะดังนี้โดยค่าเริ่มต้น

Kotlin

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. The code below
      * defines the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
      google()
      mavenCentral()
  }
}
rootProject.name = "My Application"
include(":app")

ดึงดูด

pluginManagement {

    /**
      * The pluginManagement.repositories block configures the
      * repositories Gradle uses to search or download the Gradle plugins and
      * their transitive dependencies. Gradle pre-configures support for remote
      * repositories such as JCenter, Maven Central, and Ivy. You can also use
      * local repositories or define your own remote repositories. The code below
      * defines the Gradle Plugin Portal, Google's Maven repository,
      * and the Maven Central Repository as the repositories Gradle should use to look for its
      * dependencies.
      */

    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}
dependencyResolutionManagement {

    /**
      * The dependencyResolutionManagement.repositories
      * block is where you configure the repositories and dependencies used by
      * all modules in your project, such as libraries that you are using to
      * create your application. However, you should configure module-specific
      * dependencies in each module-level build.gradle file. For new projects,
      * Android Studio includes Google's Maven repository and the Maven Central
      * Repository by default, but it does not configure any dependencies (unless
      * you select a template that requires some).
      */

    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "My Application"
include ':app'

ไฟล์บิลด์ระดับบนสุด

ไฟล์ build.gradle.kts ระดับบนสุด (สำหรับ Kotlin DSL) หรือ ไฟล์ build.gradle (สำหรับ Groovy DSL) จะอยู่ที่รูท ไดเรกทอรีโปรเจ็กต์ โดยทั่วไปแล้ว จะกำหนดเวอร์ชันทั่วไปของปลั๊กอินที่ใช้ ตามโมดูลในโปรเจ็กต์ของคุณ

ตัวอย่างโค้ดต่อไปนี้อธิบายการตั้งค่าเริ่มต้นและองค์ประกอบ DSL ใน สคริปต์บิลด์ระดับบนสุดหลังจากสร้างโปรเจ็กต์ใหม่แล้ว ให้ทำดังนี้

Kotlin

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id("com.android.application") version "8.5.0" apply false
    id("com.android.library") version "8.5.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.23" apply false
}

ดึงดูด

plugins {

    /**
     * Use `apply false` in the top-level build.gradle file to add a Gradle
     * plugin as a build dependency but not apply it to the current (root)
     * project. Don't use `apply false` in sub-projects. For more information,
     * see Applying external plugins with same version to subprojects.
     */

    id 'com.android.application' version '8.5.0' apply false
    id 'com.android.library' version '8.5.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.9.23' apply false
}