โครงสร้างบิลด์ของ Android

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

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

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

โฟลเดอร์/ไฟล์

ใช้

.gradle

ไดเรกทอรีแคชของโปรเจ็กต์ Gradle

จัดการโดย Gradle และมีการกระจาย Gradle แบบดาวน์โหลด แคชของโปรเจ็กต์ และไฟล์การกำหนดค่า

อย่าเปลี่ยนไฟล์ในไดเรกทอรีนี้

.idea/

ข้อมูลเมตาของโปรเจ็กต์ Android Studio

อย่าเปลี่ยนไฟล์ในไดเรกทอรีนี้

Build.gradle(.kts)

ไฟล์บิลด์รูท

ควรมีเฉพาะการประกาศปลั๊กอินเพื่อตั้งค่าคลาสพาธปลั๊กอินทั่วไปในโปรเจ็กต์ย่อย

โค้ดอื่นๆ ควรอยู่ในการตั้งค่าหรือไฟล์บิลด์ระดับโปรเจ็กต์ที่ซ้อนกัน

gradle.properties

การกำหนดค่าการดำเนินการของ Gradle

ประกอบด้วยพร็อพเพอร์ตี้ Gradle การควบคุมสภาพแวดล้อมของบิลด์ Gradle เช่น ขนาดฮีป การแคช และการดำเนินการแบบขนาน

เรากำหนดพร็อพเพอร์ตี้ชั่วคราวบางอย่างของ Android ไว้ที่นี่เพื่อลดการเปลี่ยนแปลงใน AGP DSL เมื่อมีการเพิ่มและนำออกในภายหลัง

Gralew (linux, Mac)

gradlew.bat (Windows)

ไฟล์ Wrapper ของ Gradle

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

local.properties

การกำหนดค่าเครื่องภายใน

มีพร็อพเพอร์ตี้ที่เกี่ยวข้องกับเครื่องภายใน เช่น ตำแหน่งของ Android SDK

ยกเว้นไฟล์นี้จากการควบคุมแหล่งที่มา

settings.gradle(.kts)

การเริ่มต้นบิลด์ Gradle

มีข้อมูลบิลด์ส่วนกลางสำหรับการเริ่มต้น Gradle และการกำหนดค่าโปรเจ็กต์ เช่น

  • ชื่อโปรเจ็กต์
  • รายการโปรเจ็กต์ย่อยที่จะรวมอยู่ในบิลด์นี้
  • ข้อมูลจำเพาะของที่เก็บเพื่อค้นหาปลั๊กอินและทรัพยากร Dependency
  • การนำเข้าแคตตาล็อกเวอร์ชันภายนอก

Gradle/

↳ libs.versions.toml

แคตตาล็อกเวอร์ชัน

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

↳ Wrapper/

↳ gradle‐wrapper.jar

ไฟล์ปฏิบัติการ Gradle Bootstrapping

ดาวน์โหลดการกระจาย Gradle ที่ระบุ (หากไม่มี) และเรียกใช้การกระจายผ่านอาร์กิวเมนต์ใดๆ

↳ gradle‐wrapper.properties

การกำหนดค่าสำหรับ Gradle Wrapper

ระบุตำแหน่งที่จะดาวน์โหลดการกระจาย Gradle (รวมถึงเวอร์ชันที่จะใช้)

แอป/

ไดเรกทอรีโปรเจ็กต์ย่อย

โปรเจ็กต์ย่อย (หรือที่เรียกว่า "โมดูล" ใน Android Studio) สามารถสร้างแอปพลิเคชันหรือไลบรารีและอาจขึ้นอยู่กับโปรเจ็กต์ย่อยอื่นๆ หรือทรัพยากร Dependency ภายนอก

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

ไดเรกทอรีทั้งหมดอาจเป็นโปรเจ็กต์ย่อยได้ และต้องมีไฟล์ build.gradle(.kts) อย่างน้อย 1 รายการ และรวมอยู่ในบิลด์โดยใช้ settings.gradle(.kts)

↳ build.gradle(.kts)

ไฟล์บิลด์ระดับโปรเจ็กต์ย่อย

ประกาศวิธีสร้างโปรเจ็กต์ย่อยนี้ แต่ละโปรเจ็กต์ย่อยต้องมีไฟล์บิลด์แยกต่างหาก และควรมี

  • ปลั๊กอินที่ใช้สร้างโปรเจ็กต์ย่อยนี้
  • บล็อกการกำหนดค่าที่ปลั๊กอินต้องใช้
  • ทรัพยากร Dependency (ไลบรารีและแพลตฟอร์ม) ที่รวมไว้เมื่อสร้างโปรเจ็กต์ย่อยนี้

คุณไม่ควรรวมตรรกะของบิลด์ (เช่น คำจำกัดความหรือเงื่อนไขของฟังก์ชัน Kotlin) หรือการประกาศงานในไฟล์บิลด์ สร้างตรรกะและงานต่างๆ ควรอยู่ในปลั๊กอินเท่านั้น

↳ src/

ไฟล์แหล่งที่มาของโปรเจ็กต์ย่อย

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

↳ main/

หลัก ชุดแหล่งข้อมูล

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

↳ java/

↳ kotlin/

ซอร์สโค้ด Kotlin และ Java

ไดเรกทอรี java อาจมีซอร์สโค้ด Java และ Kotlin ผสมกัน หากโปรเจ็กต์ย่อยนี้มีเฉพาะโค้ด Kotlin คุณจะเปลี่ยนชื่อไดเรกทอรีนี้ kotlin.

Android
เป็นแพลตฟอร์ม Kotlin-first ได้ ระบบรองรับซอร์ส Java แต่ API ใหม่กําหนดเป้าหมายภาษา Kotlin เราขอแนะนำให้ใช้ Kotlin สำหรับโค้ดใหม่ทั้งหมดและการอัปเดตที่สำคัญของโค้ดที่มีอยู่

↳ res/

ไฟล์ทรัพยากร Android

มีทรัพยากรของแอปพลิเคชัน เช่น ไฟล์ XML และรูปภาพ แอปพลิเคชันทั้งหมดใช้ทรัพยากรพื้นฐานบางอย่าง เช่น ไอคอน Launcher แต่ทรัพยากรจำนวนมาก เช่น เลย์เอาต์และเมนู จะใช้เฉพาะในแอปพลิเคชันแบบมุมมองเท่านั้น เขียนแอปพลิเคชันโดยใช้ทรัพยากร String ที่กำหนดไว้ในไดเรกทอรีนี้

↳ AndroidManifest.xml

ข้อมูลเมตาของแอปพลิเคชัน Android

อ่านโดยตัวจัดการแพ็กเกจ Android เพื่อบอกระบบ

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

↳ androidTest/

การทดสอบอุปกรณ์ ชุดแหล่งที่มา

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

ไฟล์ต้นฉบับทั้งหมดในชุดแหล่งที่มา main พร้อมใช้งานตามแหล่งที่มาในส่วน androidTest

↳ test/

การทดสอบโฮสต์ ชุดแหล่งที่มา

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

ไฟล์ต้นฉบับทั้งหมดในชุดต้นฉบับ main พร้อมใช้งานตามแหล่งที่มาที่อยู่ในการทดสอบ

↳ proguard-rules.pro

กฎการกำหนดค่า R8

กำหนดกฎเพื่อควบคุมการย่อแอปพลิเคชัน การเพิ่มประสิทธิภาพ และการปรับให้ยากต่อการอ่าน (Obfuscation) R8 จะนำโค้ดและทรัพยากรที่ไม่จำเป็นออก เพิ่มประสิทธิภาพรันไทม์ และลดจำนวนโค้ดเพิ่มเติมด้วยการเปลี่ยนชื่อตัวระบุ