การสร้างทรัพยากรในโครงการ Android — RegisterGeneratedResFolder
ในโลกของ Android แนวคิดของรหัสและการสร้างทรัพยากรนั้นเป็นที่รู้จักกันดี การสร้างโค้ดจะใช้ในโครงการส่วนใหญ่ โดยเป็นกลไกหลักที่อยู่เบื้องหลังกริช ห้อง และห้องสมุดอื่นๆ แต่ทรัพยากรล่ะ ตัวอย่างเช่น ในระหว่างกระบวนการสร้าง ไฟล์ของคุณgoogle-services.jsonจะถูกแยกวิเคราะห์และแปลงเป็นvalues.xmlไฟล์ในgeneratedโฟลเดอร์ที่จะใช้โดยไลบรารี Firebase ปรากฎว่าการสร้างและใช้ทรัพยากรที่สร้างขึ้นเองนั้นเป็นเรื่องง่ายตราบใดที่คุณรู้ว่าต้องทำอย่างไรเมื่อมีทรัพยากรเหล่านั้น ดูเหมือนว่าจะค่อนข้างง่าย — คุณสร้างไฟล์ที่จำเป็นและวางไว้ในโฟลเดอร์ที่สร้างขึ้น อย่างไรก็ตาม ต้องใช้งานเพิ่มอีกเล็กน้อย
งาน Gradle สำหรับการแปลงสตริง
มาสร้างงาน Gradle ง่ายๆ ที่แปลงไฟล์ JSON ด้วยสตริงเป็นไฟล์ XML สตริงของ Android และบันทึกผลลัพธ์ลงในgeneratedโฟลเดอร์ เมื่อพิจารณาจากไฟล์อื่นๆ ในไดเร็กทอรีนั้น พาธควรเป็นดังนี้:
app/build/generated/res/${generator}/${sourceSet}/values/strings.xml
แค่นี้ก็น่าจะเพียงพอแล้วใช่ไหม? หากคุณพยายามสร้างแอปโดยใช้ทรัพยากรจากไฟล์ที่สร้างขึ้น แอปจะไม่ทำงาน ทั้ง Android Studio และ Gradle จะไม่รู้จักไฟล์ของคุณในฐานะส่วนหนึ่งของโครงการ มีวิธีที่จะทำให้พวกเขาทำเช่นนั้น
RegisterGeneratedResFolderช่วยเหลือ
มีวิธีการมหัศจรรย์ในBaseVariantอินเทอร์เฟซของระบบการสร้าง Android ที่เรียกว่าregisterGeneratedResFolderทำอย่างนั้น
มันต้องการFileCollectionวัตถุที่ชี้ไปยังโฟลเดอร์ของเราและระบุงานที่สร้างมันขึ้นมา
ความคิดเห็นด้านบนบอกเราว่า Gradle จะเชื่อมต่องานเข้ากับกระบวนการสร้าง ดังนั้นสิ่งที่เราต้องทำคือลงทะเบียนโฟลเดอร์ ที่นี่ควรสังเกตว่าเส้นทางที่ใช้นั้นแตกต่างจากเส้นทางในการจัดเก็บไฟล์ที่สร้างขึ้นจริง
app/build/generated/res/${generator}/${sourceSet}
generateStringsFileงานจะถูกเรียกใช้ก่อนmergeResourcesทำให้ทรัพยากรใหม่ทั้งหมดพร้อมใช้งานสำหรับขั้นตอนการสร้างถัดไปและใน Android Studio คุณยังสามารถเรียกใช้ด้วยตนเองเพื่อสร้างไฟล์ที่จำเป็น ดังนั้นจึงไม่มีข้อผิดพลาด "ไม่พบทรัพยากร" ในขณะที่คุณทำงาน
อะไรต่อไป?
แม้ว่าตัวอย่างข้างต้นจะเพียงพอสำหรับกรณีง่ายๆ แต่ก็มีข้อเสียเปรียบที่สำคัญ นั่นคือ งานจะไม่เพิ่มขึ้น กล่าวอีกนัยหนึ่ง จะมีการรันทุกครั้งที่สร้างโปรเจ็กต์ ซึ่งจะเพิ่มเวลาในการสร้างอย่างหลีกเลี่ยงไม่ได้ นอกจากนี้ ขณะนี้ยังไม่มีวิธีการระบุไฟล์ที่ต้องใช้เป็นอินพุตและโฟลเดอร์สำหรับจัดเก็บผลลัพธ์ เราสามารถแก้ปัญหาแรกได้ด้วยการทำให้งานเพิ่มขึ้น วิธีที่สองแก้ไขได้โดยการเพิ่มอินพุตงานและรวมไว้ในปลั๊กอิน การสร้างปลั๊กอิน แบบกำหนดเองอยู่นอกเหนือขอบเขตของบทความนี้ แต่คุณสามารถค้นหาโค้ดได้ในrepo GitHub ของฉัน
นี่เป็นการเจาะลึกครั้งแรกของฉันเกี่ยวกับระบบการสร้าง Gradle และ Android และฉันหวังว่ามันจะช่วยให้คุณจัดการกับความท้าทายของคุณเองได้ มีความสุขในการเข้ารหัส!





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)