เพิ่มทรัพยากรของแอป

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

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

ใน Jetpack Compose คุณจะกำหนด UI ใน Kotlin แทนเลย์เอาต์ XML อย่างไรก็ตาม คุณยังคงใช้ไดเรกทอรี res/ เพื่อจัดเก็บเนื้อหาแบบคงที่ระดับแอป เช่น ไอคอน แบบอักษร และการแปล ดูวิธีเข้าถึงแหล่งข้อมูลเหล่านี้ในฟังก์ชันที่ประกอบได้ที่แหล่งข้อมูลใน Compose

ดูรายละเอียดเกี่ยวกับวิธีสร้างประเภททรัพยากรที่เฉพาะเจาะจงได้ในหน้าต่อไปนี้

ดูข้อมูลเกี่ยวกับวิธีอ้างอิงทรัพยากรจากโค้ดแอปได้ที่ภาพรวมทรัพยากรของแอป

เพิ่มไฟล์ทรัพยากร XML

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

  1. คลิกโมดูลแอปเป้าหมายในหน้าต่างโปรเจ็กต์ในมุมมองAndroid หรือโปรเจ็กต์
  2. เลือกไฟล์ > ใหม่ > ไฟล์ทรัพยากร Android

    รูปที่ 1 กล่องโต้ตอบไฟล์ทรัพยากรใหม่

  3. กรอกรายละเอียดในกล่องโต้ตอบ
    • ชื่อไฟล์: ป้อนชื่อไฟล์ XML (ไม่จำเป็นต้องมีคำต่อท้าย .xml)
    • ประเภททรัพยากร: เลือกประเภททรัพยากรที่ต้องการสร้าง
    • องค์ประกอบรูท: หากมี ให้เลือกองค์ประกอบรูท XML สำหรับ ไฟล์ ทรัพยากรบางประเภทรองรับองค์ประกอบรูทเพียงประเภทเดียว คุณอาจแก้ไขไม่ได้ ทั้งนี้ขึ้นอยู่กับประเภททรัพยากรที่เลือก
    • ชุดซอร์ส: เลือกชุดซอร์ส ที่คุณต้องการบันทึกไฟล์
    • ชื่อไดเรกทอรี: ต้องตั้งชื่อไดเรกทอรีให้สอดคล้องกับประเภททรัพยากรและตัวระบุการกำหนดค่า อย่าแก้ไขข้อความนี้ เว้นแต่คุณต้องการเพิ่มตัวระบุการกำหนดค่าลงในชื่อไดเรกทอรี ด้วยตนเอง (ใช้ตัวระบุที่ใช้ได้แทน)
    • ตัวระบุที่มี: คุณสามารถเพิ่มตัวระบุได้โดยเลือกตัวระบุจากรายการ แล้วคลิกเพิ่ม แทนที่จะต้องใส่ตัวระบุการกำหนดค่าในชื่อไดเรกทอรีด้วยตนเอง
  4. เมื่อเพิ่มตัวกรองทั้งหมดที่ต้องการแล้ว ให้คลิกตกลง

แทรกทรัพยากร XML ที่ซับซ้อนในบรรทัด

ทรัพยากรที่ซับซ้อนบางอย่างต้องใช้ไฟล์ทรัพยากร XML หลายไฟล์ เช่น แม้ว่า Compose จะมี API ภาพเคลื่อนไหวที่แข็งแกร่ง แต่คุณอาจต้องใช้ภาพวาด Vector Drawable เคลื่อนไหว ซึ่งมีออบเจ็กต์ภาพวาดเวกเตอร์และออบเจ็กต์ภาพเคลื่อนไหว และต้องใช้ไฟล์ XML อย่างน้อย 3 ไฟล์

ในตัวอย่างนี้ คุณสามารถสร้างและเก็บไฟล์ XML แยกกัน 3 ไฟล์ไว้ได้หากต้องการนำไฟล์อย่างน้อย 1 ไฟล์กลับมาใช้ซ้ำ แต่หากใช้ไฟล์ XML สำหรับ AnimatedVectorDrawable นี้เท่านั้น คุณสามารถใช้รูปแบบทรัพยากรอินไลน์ที่ระบุไว้ใน Android Asset Packaging Tool (AAPT) แทนได้ AAPT ช่วยให้คุณกำหนด ทั้ง 3 แหล่งข้อมูลในไฟล์ XML เดียวได้ ดูข้อมูลเพิ่มเติมได้ที่ทรัพยากร XML ที่ซับซ้อนในบรรทัด

เพิ่มไดเรกทอรีทรัพยากร

หากต้องการเพิ่มไดเรกทอรีทรัพยากรใหม่ ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิกโมดูลแอปเป้าหมายในหน้าต่างโปรเจ็กต์
  2. เลือก File > New > ไดเรกทอรีทรัพยากร Android

    รูปที่ 2 กล่องโต้ตอบไดเรกทอรีทรัพยากรใหม่

  3. กรอกรายละเอียดในกล่องโต้ตอบ
    • ชื่อไดเรกทอรี: ไดเรกทอรีต้องมีชื่อที่เฉพาะเจาะจง สำหรับประเภททรัพยากรและชุดค่าผสมของตัวระบุการกำหนดค่า อย่า แก้ไขส่วนนี้ เว้นแต่คุณต้องการเพิ่มตัวระบุการกำหนดค่าลงในชื่อไดเรกทอรี ด้วยตนเอง (ให้ใช้ตัวระบุที่ใช้ได้แทน)
    • ประเภททรัพยากร: เลือกประเภททรัพยากรที่ต้องการให้ไดเรกทอรี มี
    • ชุดซอร์ส: เลือกชุดซอร์สที่คุณต้องการให้มีไดเรกทอรี
    • ตัวระบุที่มี: คุณสามารถเพิ่มตัวระบุได้โดยเลือกตัวระบุจากรายการ แล้วคลิกเพิ่ม แทนที่จะระบุตัวระบุการกำหนดค่าในชื่อไดเรกทอรีด้วยตนเอง
  4. เมื่อเพิ่มตัวกรองทั้งหมดที่ต้องการแล้ว ให้คลิกตกลง

เปลี่ยนไดเรกทอรีทรัพยากร

โดยค่าเริ่มต้น ทรัพยากรจะอยู่ใน module-name/src/source-set-name/res/ เช่น แหล่งข้อมูลสำหรับชุดซอร์สหลักของโมดูลจะอยู่ใน src/main/res/ และแหล่งข้อมูลสำหรับชุดซอร์สของการแก้ไขข้อบกพร่องจะอยู่ใน src/debug/res/

อย่างไรก็ตาม คุณสามารถเปลี่ยนเส้นทางเหล่านี้ไปยังตำแหน่งอื่นๆ (เทียบกับไฟล์ build.gradle) ได้โดยใช้พร็อพเพอร์ตี้ res.srcDirs ในบล็อก sourceSets เช่น

ดึงดูด

android {
    sourceSets {
        main {
            res.srcDirs = ['resources/main']
        }
        debug {
            res.srcDirs = ['resources/debug']
        }
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            res.srcDirs("resources/main")
        }
        getByName("debug") {
            res.srcDirs("resources/debug")
        }
    }
}

นอกจากนี้ คุณยังระบุไดเรกทอรีทรัพยากรหลายรายการสำหรับชุดซอร์สเดียวได้ แล้วเครื่องมือบิลด์จะผสานรวมไดเรกทอรีเหล่านั้นเข้าด้วยกัน เช่น

ดึงดูด

android {
    sourceSets {
        main {
            res.srcDirs = ['res1', 'res2']
        }
    }
}

Kotlin

android {
    sourceSets {
        main {
            res.srcDirs("res1", "res2")
        }
    }
}

ดูข้อมูลเพิ่มเติมได้ที่ชุดซอร์ส

การผสานทรัพยากร

แหล่งที่มาของทรัพยากรในไฟล์แอปสุดท้ายมี 3 แหล่งที่มา ได้แก่

  • ชุดซอร์สหลัก (โดยทั่วไปจะอยู่ใน src/main/res/)
  • ชุดซอร์สของตัวแปรบิลด์
  • ไลบรารี Android (AAR)

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

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

build variant > build type > product flavor > main source set > library dependencies

เช่น หากชุดซอร์สหลักมีข้อมูลต่อไปนี้

  • res/values/strings.xml
  • res/values-es/strings.xml

และประเภทบิลด์การแก้ไขข้อบกพร่องประกอบด้วย

  • res/values/strings.xml

จากนั้นแอปสุดท้ายจะมี res/values/strings.xml จากประเภทบิลด์การแก้ไขข้อบกพร่อง และ res/values-es/strings.xml จากชุดซอร์สหลัก

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