#import "../PageTemplate.typ": * == สร้างไฟล์แอปพลิเคชันด้วยตนเอง #h(1.7em) โครงงานนี้ใช้แอปพลิเคชันที่สร้างขึ้นมาเอง โดยในการพัฒนาแอปพลิเคชัน อย่างน้อยต้องมีส่วนประกอบดังกล่าวก่อน #set enum(indent: 1.7em) 1. Flutter 2. Git (ซึ่งคุณจะติดตั้งแล้วหากคุณทำตาม@writingFirmware) #h(1.7em) อย่างไรก็ตาม Flutter มีข้อจำกัดว่า มีเพียง Android เท่านั้นที่ไม่ว่าแพลตฟอร์มไหนก็จะสามารถคอมไพล์ไฟล์ `.apk` ออกมาได้ ดังนั้น การสร้างแอปพลิเคชันสำหรับ Linux ต้องทำบน Linux เท่านั้น และการสร้างแอปพลิเคชันสำหรับ Windows ต้องทำบน Windows เท่านั้น === การติดตั้งโปรแกรมเขียนโคด #iii จริง ๆ แล้วนั้น Flutter สามารถทำงานกับโปรแกรมเขียนโคดใดก็ได้ แต่มีโปรแกรมเหล่านี้ที่อาจมีประสบการณ์การพัฒนาที่ดีกว่าโปรแกรมอื่น #set enum(indent: 4.1em) 1. Visual Studio Code (VS Code) 2. Android Studio 3. JetBrains IntelliJ 4. Firebase Studio #iii โครงงานนี้ใช้โปรแกรมเขียนโคด Android Studio เป็นหลักเนื่องจากแอปพลิเคชันโครงงานมี Android เป็นเป้าหมายหลัก และ Android SDK สามารถจัดการได้ง่ายกว่าใน Android Studio #iii การติดตั้ง Flutter สามารถทำได้สองวิธีด้วยกัน คือการติดตั้งผ่าน Visual Studio Code (VS Code) และการติดตั้งด้วยตนเอง โดยหากต้องการใช้ VS Code เป็นโปรแกรมเขียนโคดอยู่แล้ว สามารถติดตั้งผ่าน VS Code ได้เลย แต่ก่อนอื่น ต้องทำการติดตั้งโปรแกรมและไลบรารีพื้นฐานที่จำเป็นสำหรับ Flutter ก่อน === การติดตั้งโปรแกรมและไลบรารีที่จำเป็น 1. สำหรับ Windows ติดตั้ง Git สำหรับ Windows ซึ่งคุณสามารถดูขั้นตอนการติดตั้งได้ที่ https://git-scm.com/install/windows หรือเพียงแค่ใช้คำสั่งด้านล่าง #figure( ```sh winget install --id Git.Git -e --source winget ```, kind: image, caption: [คำสั่งในการติดตั้ง Git], ) 2. สำหรับ Linux โปรดดู@flLinuxDetails สำหรับรายละเอียดแพคเกจและคำสั่งที่ต้องใช้สำหรับระบบต่าง ๆ 3. สำหรับ macOS ใช้คำสั่งต่อไปนี้ในการติดตั้งเครื่องมือ Xcode ต่าง ๆ รวมถึง Git #figure( ```sh xcode-select --install ```, kind: image, caption: [คำสั่งในการติดตั้งเครื่องมือ Xcode], ) === การติดตั้งผ่าน Visual Studio Code #[ #set enum(indent: 4.1em) 1. เปิด VSCode 2. ติดตั้งส่วนขยาย Flutter ซึ่งอยู่ภายใต้ ID `Dart-Code.flutter` ทั้งบน Visual Studio Marketplace และ OpenVSX 3. ติดตั้ง Flutter ด้วย VS Code #listy( indent: 5.5em, numbering: thai-numbering, [เปิด Command Palette ด้วยเมนู _View > Command Palette_ หรือกด Ctrl + Shift + P], [ใน Command Palette พิมพ์ `flutter`], [เลือก _Flutter: New Project_], [VS Code จะให้คุณเลือก Flutter SDK บนคอมพิวเตอร์ของคุณ เลือก _Download SDK_], [เมือหน้าไดอะลอก _Select Folder for Flutter SDK_ แสดงขึ้น เลือกสถานที่ที่คุณอยากติดตั้ง Flutter], [คลิก _Clone Flutter_ โดยในระหว่างการดาวน์โหลด VS Code จะแสดงการแจ้งเตือนนี้ ``` Downloading the Flutter SDK. This may take a few minutes. ``` การดาวน์โหลดนี้จะใช้เวลาสองสามนาที หากคุณเชื่อว่าการดาวน์โหลดหยุดชะงัก คุณสามารถคลิก _Cancel_ แล้วเริ่มต้นการติดตั้งใหม่ได้], [คลิก _Add SDK to PATH_ และเมื่อเสร็จสิ้น จะมีการแจ้งเตือน ``` The Flutter SDK was added to your PATH ```], [VS Code อาจแสดงการแจ้งเตือนเกี่ยวกับการเก็บข้อมูลของ Google หากคุณยินยอม คลิก _OK_], [เพื่อความแน่ใจ กรุณาปิดเทอร์มินัลทุกหน้าต่างหรือรีสตาร์ท VS Code เพื่อให้แน่ใจว่า Flutter จะสามารถใช้ผ่านเทอร์มินัลได้], ) 4. เมื่อเสร็จสิ้น ใช้คำสั่ง `flutter doctor -v` ในเทอร์มินัลที่คุณเลือกเพื่อตรวจสอบการติดตั้ง Flutter ของคุณ หากคำสั่งไม่เจอหรือเกิดข้อผิดพลาดขึ้น ตรวจสอบ https://docs.flutter.dev/install/troubleshoot สำหรับข้อมูลเพิ่มเติม ] === การติดตั้งด้วยตนเอง #iii แนะนำให้ทำตาม https://docs.flutter.dev/install/manual#install-flutter เนื่องจากกระบวนการนี้ต้องใช้ข้อมูลที่ใหม่ล่าสุด #[ #set enum(indent: 4.1em) 1. ดาวน์โหลด Flutter (สามารถหาปุ่มดาวน์โหลดได้จากลิงก์ด้านบน) 2. สร้างโฟลเดอร์สำหรับเก็บ Flutter SDK 3. ทำการแตกไฟล์ที่ดาวน์โหลดมา 4. เพิ่ม Flutter เข้าไปยัง PATH ของคุณ (วิธีการขึ้นอยู่กับระบบปฏิบัติการ) 5. ยืนยันความถูกต้องของการติดตั้งของคุณด้วยคำสั่ง `flutter doctor -v` ] === ข้อมูลเฉพาะแพลตฟอร์ม ==== Android #h(7.3em) ในการพัฒนาแอปพลิเคชัน Android โดยใช้เฟรมเวิร์ก Flutter จำเป็นต้องใช้ส่วนประกอบเครื่องมือพัฒนา Android ดังนี้ #[ #set enum(indent: 7.3em) 1. Android SDK (API Level 36 ณ เวลาที่พิมพ์) 2. Android SDK Build-Tools 3. Android SDK Command-line Tools 4. Android SDK Platform-Tools 5. Android Emulator (ไม่บังคับ) ] โดยแนะนำให้จัดการและติดตั้งเครื่องมือเหล่านี้ผ่าน Android Studio #h(7.3em) ในการติดตั้ง Android SDK ควรติดตั้ง Android SDK ล่าสุดถึงแม้ว่าอุปกรณ์ของคุณจะใช้เวอร์ชันที่เก่ากว่านั้น เพื่อความมั่นใจว่าแอปพลิเคชันจะสามารถใช้กับอุปกรณ์ที่ใหม่ล่าสุดได้ #h(7.3em) แอปพลิเคชัน Android จะมี SDK/API level เป้าหมาย (Target SDK/API level) และ SDK/API level ขั้นต่ำ (Minimum SDK/API level) โครงงานนี้ ณ เวลาที่พิมพ์ ใช้ API level เป้าหมาย 36 (Android 16) และ API level ขั้นต่ำ 24 (Android 7) ซึ่งรวมกันแล้ว แอปพลิเคชัน#jb Android จะสามารถติดตั้งได้บนระบบตั้งแต่ API level ขั้นต่ำจนถึง API level เป้าหมาย หรือก็คือ แอปพลิเคชันในโครงงานนี้สามารถติดตั้งได้ตั้งแต่บนระบบ Android 7 ถึง Android 16 นั่นเอง ===== Java/Kotlin #h(11.3em) Java และ Kotlin เป็นภาษาสำคัญสำหรับการพัฒนาแอปพลิเคชัน Android ถึงอย่างไรก็ตาม แอปพลิเคชัน Flutter นั้นถูกเขียนด้วยภาษา Dart แต่ยังจำเป็นต้องมีโคด Java และ Kotlin เล็กน้อยเพื่อเริ่มต้นแอปพลิเคชัน Flutter #h(11.3em) โดยปกติแล้ว Flutter จะสร้างโคดพื้นฐานขึ้นมาให้สำหรับการเริ่มแอปพลิเคชันแบบพื้นฐาน ดังนั้นจึงไม่จำเป็นต้องมีการเขียนโคด Java หรือ Kotlin เอง แต่ในบางกรณี อาจต้องเขียนโคดเพิ่มเองหากมีความต้องการเข้าถึงฟีเจอร์พื้นฐานระบบที่ Flutter ไม่มี API เพื่อให้เข้าถึงได้และไม่มีแพคเกจเพื่อรองรับฟีเจอร์ที่ต้องการ #h(11.3em) โครงการนี้ใช้ Java 21 (JetBrains Runtime/Azul Zulu OpenJDK) เป็นหลักในการทำงานกับ Gradle แต่แอปพลิเคชัน Android ที่ผลิตออกมานั้น เพื่อให้เข้ากับเวอร์ชันที่เก่ากว่าของระบบปฏิบัติการได้ ใช้ Java 11 ===== Gradle #h(11.3em) Gradle เป็นเครื่องมือสร้างระบบอัตโนมัติสำหรับการพัฒนาซอฟต์แวร์หลายภาษา จัดการงานต่าง ๆ เช่น การคอมไพล์ การแพ็คเกจ การทดสอบ การปรับใช้ และการเผยแพร่ ภาษาที่รองรับ ได้แก่ Java (รวมถึงภาษา Kotlin, Groovy, Scala ที่ใช้ JDK), C/C++ และ JavaScript Gradle พัฒนาต่อยอดจากแนวคิดของ Apache Ant และ Apache Maven และนำเสนอภาษาเฉพาะโดเมนที่ใช้ Groovy และ Kotlin ซึ่งต่างจากการกำหนดค่าโครงการที่ใช้ XML ที่ Maven ใช้ Gradle ใช้กราฟแบบอะไซคลิกกำกับทิศทางเพื่อจัดการการอ้างอิง กราฟนี้ใช้เพื่อกำหนดลำดับของงานที่ควรดำเนินการ Gradle ทำงานบน Java Virtual Machine #h(11.3em) Gradle คือเครื่องมือหลักที่ใช้ในการจัดการโปรเจกต์ Java ส่วนใหญ่ รวมถึงโปรเจกต์ Android โดยในโครงการนี้ จะใช้ Gradle เวอร์ชัน 8.14.3 เป็นหลัก #h(11.3em) โดยปกติแล้ว ผู้พัฒนานั้นไม่มีความจำเป็นที่จะต้องแตะต้อง Gradle ด้วยตนเอง และ Flutter จะทำการจัดการเอง แต่หากมีความจำเป็นต้องใช้คำสั่ง Gradle ด้วยตนเอง จะมีสคริปต์ `gradlew` (หรือ `gradlew.bat` สำหรับผู้ใช้ Windows) ภายในโฟลเดอร์ `android` ของโปรเจกต์ Flutter เสมอเพื่อเรียกใช้ Gradle ที่ถูกดาวน์โหลดมาสำหรับโปรเจกต์นั้น ๆ ==== Linux #h(7.3em) เช่นเดียวกับ Android ที่กล่าวไปข้างต้น Flutter มีการสร้างโคดสำหรับการเปิดแอปพลิเคชันแบบพื้นฐาน แต่สำหรับ Linux แล้วนั้น Flutter ใช้โคด C++ และเฟรมเวิร์ก CMake ในการสร้างรากฐานของแอปพลิเคชัน #h(7.3em) ในการพัฒนาแอปพลิเคชันสำหรับ Linux ต้องติดตั้งโปรแกรมเพิ่มเติม#jb (build dependencies) ขยายความคือ ด้านบนคือสิ่งที่จำเป็นหากมีระบบอื่นเป็นเป้าหมาย แต่หากต้องการพัฒนาแอปพลิเคชัน Linux ต้องติดตั้งโปรแกรมในรายการหน้าถัดไปเพิ่ม #pagebreak() #[ #set enum(indent: 7.3em) 1. GTK 3 (ไลบรารีสำหรับการพัฒนา) 2. pkg-config 3. ไลบรารี GNU Standard C++ v3 4. Clang 5. CMake 6. Ninja ] #h(7.3em) การติดตั้งไลบรารีและโปรแกรมที่กล่าวไปข้างต้นจะแตกต่างกันไปแต่ละการแจกจ่าย Linux และ Flutter ใช้ไลบรารีพื้นฐานดังกล่าวในการทำงานของแอปพลิเคชัน (runtime dependencies) #[ #set enum(indent: 7.3em) 1. GTK 3 2. blkid 3. LZMA ] แต่โดยทั่วไปแล้ว ไลบรารีเหล่านี้ควรถูกติดตั้งมาอยู่แล้วหากคุณใช้ graphical desktop ทั่วไป ===== Debian #afigure( ```sh # Development dependencies: sudo apt install curl git unzip xz-utils zip libglu1-mesa # Linux build dependencies: sudo apt install clang cmake ninja-build pkg-config libgtk-3-dev libstdc++-12-dev # Runtime dependencies: sudo apt install libgtk-3-0 libblkid1 liblzma5 ```, kind: image, caption: [คำสั่งในการติดตั้งรายการแพคเกจต่าง ๆ บน Debian], ) #v(0.5em) ===== Fedora Linux #afigure( ```sh # Development dependencies: sudo dnf install curl git unzip xz zip mesa-libglu # Linux build dependencies: sudo dnf install clang cmake ninja-build pkgconf gtk3 # Runtime dependencies: sudo dnf install gtk3 libblkid xz ```, kind: image, caption: [คำสั่งในการติดตั้งรายการแพคเกจต่าง ๆ บน Fedora Linux], ) ===== Arch Linux #afigure( ```sh # Development dependencies: sudo pacman -S --needed curl git unzip xz zip glu # Linux build dependencies: sudo pacman -S --needed clang cmake ninja pkgconf gtk3 # Runtime dependencies: sudo pacman -S --needed util-linux-libs xz gtk3 ```, kind: image, caption: [คำสั่งในการติดตั้งรายการแพคเกจต่าง ๆ บน Arch Linux], ) #v(0.5em) ==== macOS/iOS #h(7.3em) การพัฒนาแอปพลิเคชันสำหรับ macOS และ iOS นั้นต้องทำบน macOS เท่านั้นและจำเป็นต้องพึ่งพาเครื่องมือ Xcode แต่เนื่องจากในโครงงานนี้ไม่มีผู้ใช้ macOS จึงไม่สามารถสร้างไบนารีสำหรับ macOS และ iOS ออกมาได้ และไม่ใช่เป้าหมายของโครงงานนี้เช่นกัน