การสร้างแอป Android ในปี 2025
(dev.to)แนะนำสภาพแวดล้อมการพัฒนาแอป Android ตามมาตรฐานปัจจุบัน
- การบิลด์: gradle
- การตั้งค่าการบิลด์: convention plugin
- การจัดการ dependency: version catalog
- นำ build cache มาใช้
- การวิเคราะห์ประสิทธิภาพการบิลด์: build-scan
- การจัดโครงสร้างโมดูล: แยกตามแต่ละ feature
- เครือข่าย - retrofit
- การแมป json - kotlinx serialization
- การจัดเก็บข้อมูลแบบถาวร - jetpack datastore, room
- DI - koin
- ตัวโหลดรูปภาพ - coil
- UI - compose
- การสื่อสารระหว่าง View และ ViewModel - flow
- การจัดการคุณภาพโค้ด - ktlint , konsist
- การทดสอบหน่วย - junit 4
7 ความคิดเห็น
ขอบคุณสำหรับบทความดีๆ
ในฐานะคนที่ลงเอยมาเป็นวิศวกร build ของแอป Android แบบไม่รู้ตัว ขอลองฝากความเห็นไว้หน่อย..
> ระบบ build : gradle
ถึงจะใหญ่หรือซับซ้อนมากแค่ไหน ก็ต้องใช้ gradle อยู่ดี... (มองไกล)
มีโปรเจ็กต์ด้านล่างนี้กำลังดำเนินอยู่เพื่อปรับปรุงประสิทธิภาพการ build ของ gradle ในโปรเจ็กต์ที่ใหญ่หรือซับซ้อนมาก ดังนั้นถ้าคุณใช้ gradle กับโปรเจ็กต์ขนาดใหญ่ ก็ควรเตรียมการย้ายล่วงหน้าไว้จะดีกว่า
> โครงสร้างโมดูล : แยกตาม feature
ส่วนตัวผมมองว่าไม่มีเหตุผลจำเป็นที่จะต้องเปิดเผย architectural layer ออกมาที่ระบบ build
ในกรณีของแอปที่ผมดูแลอยู่ ผมทำให้ build system มองเห็นโมดูลเป็น feature-api / feature-impl
ถ้าจัดแบบนี้ การเปลี่ยนโค้ดใน feature-impl จะไม่ส่งผลต่อโมดูลอื่นที่อ้างอิง feature-api (แยก dependency ออกจากกัน) จึงช่วยได้มากทั้งกับ incremental build และการเพิ่ม build cache hit rate
> unit test - junit 4
เรื่องนี้ดูเหมือนว่าการตัดสินใจของ Google จะมีบทบาทค่อนข้างมาก
แต่ screenshot testing plugin ที่เพิ่งเปิดตัวล่าสุด กลับ อิงกับ JUnit5 ครับ.
แต่เวลาจะนำเทคโนโลยีใหม่ล่าสุด(?) มาใช้
JUnit4ก็มักจะกลายเป็นตัวถ่วงอยู่บ่อย ๆ เลยส่วนตัวก็มีความหวังเล็ก ๆ ว่าอยากให้ย้ายไปJUnit5กันได้แล้วhttps://docs.gradle.com/develocity/test-distribution/
ถ้าใช้
junit-vintage-engineก็พอจะรันเทสต์junit4บนjunit5ได้โดยแทบไม่ต้องแก้อะไรมาก แต่โอเวอร์เฮดค่อนข้างสูงทีเดียว (ช้าลงราว ๆ 20%)โห เป็นเกียรติของตระกูลฮัตเลยนะ
ผมคือวิลสัน!
อืม.. พูดนอกเรื่องหน่อยว่าในช่วงไม่กี่ปีที่ผ่านมา มีการพบปรากฏการณ์แปลก ๆ ที่สตาร์ตอัปส่วนใหญ่ไปทาง Flutter ขณะที่บริษัทใหญ่ ๆ อย่าง META, OpenAI กลับไปทาง native..
พอดีปีนี้กำลังจะลองทำแอป Android อยู่พอดี เลยเป็นแนวทางที่มีประโยชน์มากครับ 555