Project Structure บน Android Studio
ผู้ที่หลงเข้ามาอ่านคนใดได้ใช้ Android Studio กันแล้ว ก็จะเห็นว่า Project Structure ของ Android Project ใน Android Studio นั้นมีความแตกต่างกับ Eclipse ADT อยู่พอสมควร (แต่ก็เข้าใจได้ไม่ยาก) ทั้งนี้ก็เพราะว่า Eclipse ADT กับ Android Studio ใช้ Build System ที่ต่างกันนั่นเอง
ว่าแต่บน Android Studio มีไฟล์และโฟลเดอร์อะไรบ้างเนี่ย
ยกตัวอย่างเป็นโปรเจคที่พึ่งสร้างขึ้นมาใหม่ๆบน Android Studio 1.2 โดยจะมีโครงสร้างแบบนี้
สำหรับโปรเจคของผู้ที่หลงเข้ามาอ่าน ถ้ามีลักษณะไม่เหมือนกับในภาพข้างบน ลองเปลี่ยนรูปแบบการแสดงผลให้เป็น Project แทนนะครับ (ปกติโปรแกรมจะเลือกเป็น Android ไว้ให้)
เจ้าของบล็อกขออธิบายแต่ละไฟล์ใน Root Project ก่อนนะครับ นั่นก็คือไฟล์ทั้งหมดที่อยู่ในโฟลเดอร์ MyApplication เพราะว่าเดี๋ยวจะมีไฟล์แยกย่อยลงไปในแต่ละ Module อีก ไว้ค่อยอธิบายทีหลัง
.gradle
: โฟลเดอร์เก็บไฟล์สำหรับ Gradle.idea
: โฟลเดอร์เก็บการตั้งค่าของโปรเจคนั้นๆ เป็นโฟลเดอร์สำหรับ IntelliJapp
: ชื่อ Module ของโปรเจคนั้นๆ (สามารถเปลี่ยนชื่อได้)build
: โฟลเดอร์เก็บไฟล์ต่างๆที่ได้จากการ Build Projectgradle
: โฟลเดอร์สำหรับเก็บไฟล์gradle-wrapper
.gitignore
: ไฟล์ที่มีไว้สำหรับกำหนดชื่อไฟล์ไม่ต้องการให้ Git ทำงานbuild.gradle
: ไฟล์กำหนดการทำงานของ Gradle ว่าจะให้ Build Project อะไรยังไง สามารถกำหนดค่าต่างๆในนี้ได้ เพื่อใช้ในการ Build Projectgradle.properties
: ไฟล์ตั้งค่าสำหรับ Gradlegradlew
: Gradle Script สำหรับบน Unix (Mac และ Linux)gradlew.bat
: Gradle Script สำหรับบน Windowslocal.properties
: ไฟล์กำหนดการตั้งค่าโปรเจค เช่น กำหนด Path ของ Android SDKMyApplication.iml
: ไฟล์สำหรับเก็บรายละเอียดของ Module และ Library ที่ใช้ในโปรเจค เป็นไฟล์สำหรับ IntelliJ โดยจะมีชื่อไฟล์ตามชื่อโปรเจคsettings.gradle
: ไฟล์ระบุโปรเจคย่อยที่ต้องการให้ Gradle ทำงานExternal Libraties
: อันนี้ไม่ใช่โฟลเดอร์ในโปรเจค มีไว้แค่บอก References Libraries และ Platform SDK ที่ใช้ในโปรเจคเท่านั้น
ต้องดูไฟล์และโฟลเดอร์ไหนบ้าง?
เนื่องจากมีไฟล์และโฟลเดอร์โผล่มาเยอะแยะ จนผู้ที่หลงเข้ามาอ่านบางคนไม่รู้ว่าจะต้องดูไฟล์และโฟลเดอร์ไหนบ้าง
ซึ่งเอาเข้าจริงก็จะเหลือแค่นี้
app
: จริงๆคือไม่ได้เป็นแค่โฟลเดอร์app
แต่เจ้าของบล็อกจะหมายถึง Module ทั้งหมดในโปรเจคนั้นๆมากกว่า แต่เนื่องจากโปรเจคตัวนี้พึ่งสร้างจึงมี Module อยู่แค่ตัวเดียว นั่นก็คือapp
.gitignore
: ในกรณีที่ผู้ที่หลงเข้ามาอ่านใช้ Git สำหรับ Version Control จะสามารถกำหนดในไฟล์นี้ได้ว่า ไฟล์หรือโฟลเดอร์ใดบ้างที่ไม่ต้องให้ Git มายุ่ง (อ่านรายละเอียดเพิ่มเติมได้ที่ [Dev] Git ไม่ต้องมายุ่งน่า~!! มาทำความรู้จักกับไฟล์ .gitignore กันหน่อย)build.gradle
: สำหรับกำหนดค่าบางอย่างใน Root Project (เช่น เลือกเวอร์ชัน Gradle ที่จะใช้ในการ Build, กำหนด Gradle Plugin ที่จะใช้ในโปรเจค หรือกำหนดที่อยู่ของ Maven Repository)
ดูไฟล์และโฟลเดอร์ต่างๆที่อยู่ในแต่ละ Module กันต่อ
สำหรับโปรเจคที่พึ่งสร้างขึ้นมาใหม่ก็จะมี Module อยู่แค่ตัวเดียว ชื่อว่า app ดังนั้นเมื่อเปิดโฟลเดอร์ของ Module ดังกล่าวก็จะเจอกับไฟล์และโฟลเดอร์ดังนี้
build
: เหมือนกับโฟลเดอร์ที่อยู่ใน Root Project เลย แต่ว่าโฟลเดอร์นี้จะมีไว้สำหรับเก็บไฟล์และโฟลเดอร์ที่ได้จากการ Build Module นั้นๆ (โฟลเดอร์buid
จะมีแยกย่อยไปตามแต่ละ Module)libs
: โฟลเดอร์เก็บไลบรารีที่เป็นไฟล์.jar
(อยากใช้ไลบรารี.jar
ตัวไหนก็เอามาใส่ไว้ในนี้)src
: โฟลเดอร์เก็บโค๊ดของ Module นั้นๆ.gitignore
: เหมือนกับอันที่อยู่ใน Root Project โดยอันนี้จะเอาไว้กำหนดไฟล์ที่อยู่ใน Module นั้นๆ (ไฟล์.gitignore
จะมีแยกย่อยไปตามแต่ละ Module)app.iml
: เหมือนกับไฟล์.iml
ที่อยู่ใน Root Project แต่ไฟล์นี้จะเก็บรายละเอียดของ Module และ Library ที่ใช้ใน Module ตัวนั้นๆ โดยจะมีชื่อไฟล์ตามชื่อ Modulebuild.gradle
: เหมือนกับไฟล์ที่อยู่ใน Root Project แต่ไฟล์ตัวนี้จะมีไว้กำหนดการทำงานของ Gradle สำหรับ Module ตัวนั้นๆproguard-rules.pro
: กำหนดการทำงานของ ProGuard
สำหรับในแต่ละ Module จะมีแค่ไฟล์ที่มีนามสกุลเป็น .iml
ที่ไม่ต้องไปสนใจ
ดูในโฟลเดอร์ src กันต่อ
เมื่อเปิดโฟลเดอร์ src ก็จะเห็นว่ามีโฟลเดอร์ย่อยอีกสองโฟลเดอร์
androidTest
: มีไว้สำหรับเขียนโค๊ดเพื่อทำ Unit Test ให้กับแอพตัวนั้นๆmain
: สำหรับผู้ที่หลงเข้ามาอ่านมือใหม่ เจ้าของบล็อกขอให้เข้าใจว่ามันคือโฟลเดอร์ที่มีไว้เก็บโค๊ดในแอพนั้นๆ
จริงๆแล้วโฟลเดอร์main
จะเรียกว่า Flavor ซึ่งเจ้า Flavor จะทำให้สามารถแบ่งชุดโค๊ดแยกกันเพื่อ Build ออกเป็นหลายๆแบบได้ (เช่น แอพเวอร์ชันฟรีกับเสียเงินซื้อ) แต่ทว่าโปรเจคที่พึ่งสร้างขึ้นมาใหม่ๆจะมีเพียงแค่ Flavor เดียวเท่านั้น ซึ่งตั้งชื่อว่าmain
ซึ่งเป็น Flavor หลักในการเขียนโค๊ด
โฟลเดอร์ androidTest
อย่างที่บอกไปแล้วว่าโฟลเดอร์นี้มีไว้สำหรับทำ Unit Test ดังนั้นในนี้ก็จะมีแค่ไฟล์ .java
เพื่อเขียนโค๊ดสำหรับทำ Unit Test นั่นเอง
โฟลเดอร์ main
สำหรับไฟล์และโฟลเดอร์โดยพื้นฐานที่อยู่ใน main
ก็จะมีดังนี้
java
: โฟลเดอร์นี้มีไว้เขียนโค๊ด Javares
: โฟลเดอร์เก็บไฟล์ที่ใช้ภายในแอพ เช่น ภาพ เสียง หรืออื่นๆ (Resource Folder)AndroidManifest.xml
: ไฟล์สำหรับตั้งค่าโปรเจค เช่น Activity ที่มีในแอพ หรือ Permission เป็นต้น
ถึงแม้ Structure จะเปลี่ยนแต่ไฟล์หลักๆก็ยังคงเหมือนเดิม
มีผู้ที่หลงเข้ามาอ่านบางคนบอกว่าไม่เข้าใจ Project Structure บน Android Studio เลย เพราะมันไม่เหมือนเดิม
แต่ถ้าดูดีๆก็จะเห็นว่ามันไม่ได้ต่างกันซักเท่าไร การเขียนโค๊ดก็ยังคงทำใน src อยู่ดี และการเก็บไฟล์จำพวกภาพก็จะอยู่ในโฟลเดอร์ res
เช่นกัน และก็มี AndroidManifest.xml
เหมือนเดิม เพียงแค่ย้ายไปอยู่ลึกหน่อยก็เท่านั้น
ที่มีเพิ่มเข้ามาก็จะเป็น build.gradle
เป็นหลัก เพราะไฟล์นี้จะใช้สำหรับกำหนดการ Build Project ซึ่งเป็นหัวใจสำคัญในการใช้เจ้า Build System ที่ชื่อว่า Gradle