ผู้ที่หลงเข้ามาอ่านคนใดได้ใช้ 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 : โฟลเดอร์เก็บการตั้งค่าของโปรเจคนั้นๆ เป็นโฟลเดอร์สำหรับ IntelliJ
  • app : ชื่อ Module ของโปรเจคนั้นๆ (สามารถเปลี่ยนชื่อได้)
  • build : โฟลเดอร์เก็บไฟล์ต่างๆที่ได้จากการ Build Project
  • gradle : โฟลเดอร์สำหรับเก็บไฟล์ gradle-wrapper
  • .gitignore : ไฟล์ที่มีไว้สำหรับกำหนดชื่อไฟล์ไม่ต้องการให้ Git ทำงาน
  • build.gradle : ไฟล์กำหนดการทำงานของ Gradle ว่าจะให้ Build Project อะไรยังไง สามารถกำหนดค่าต่างๆในนี้ได้ เพื่อใช้ในการ Build Project
  • gradle.properties : ไฟล์ตั้งค่าสำหรับ Gradle
  • gradlew : Gradle Script สำหรับบน Unix (Mac และ Linux)
  • gradlew.bat : Gradle Script สำหรับบน Windows
  • local.properties : ไฟล์กำหนดการตั้งค่าโปรเจค เช่น กำหนด Path ของ Android SDK
  • MyApplication.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 ตัวนั้นๆ โดยจะมีชื่อไฟล์ตามชื่อ Module
  • build.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 : โฟลเดอร์นี้มีไว้เขียนโค๊ด Java
  • res : โฟลเดอร์เก็บไฟล์ที่ใช้ภายในแอพ เช่น ภาพ เสียง หรืออื่นๆ (Resource Folder)
  • AndroidManifest.xml : ไฟล์สำหรับตั้งค่าโปรเจค เช่น Activity ที่มีในแอพ หรือ Permission เป็นต้น

ถึงแม้ Structure จะเปลี่ยนแต่ไฟล์หลักๆก็ยังคงเหมือนเดิม

มีผู้ที่หลงเข้ามาอ่านบางคนบอกว่าไม่เข้าใจ Project Structure บน Android Studio เลย เพราะมันไม่เหมือนเดิม

แต่ถ้าดูดีๆก็จะเห็นว่ามันไม่ได้ต่างกันซักเท่าไร การเขียนโค๊ดก็ยังคงทำใน src อยู่ดี และการเก็บไฟล์จำพวกภาพก็จะอยู่ในโฟลเดอร์ res เช่นกัน และก็มี AndroidManifest.xml เหมือนเดิม เพียงแค่ย้ายไปอยู่ลึกหน่อยก็เท่านั้น

ที่มีเพิ่มเข้ามาก็จะเป็น build.gradle เป็นหลัก เพราะไฟล์นี้จะใช้สำหรับกำหนดการ Build Project ซึ่งเป็นหัวใจสำคัญในการใช้เจ้า Build System ที่ชื่อว่า Gradle