มารู้จัก Android Things Os ใหม่ ที่ไม่ใหม่หมดจดจาก Google ตอนที่ 1

Kritsada Arjchariyaphat
Deaware
Published in
3 min readJan 6, 2017

ก่อนหน้านี้ Google ได้ประกาศทำระบบปฏิบัติการสำหรับ IoT ชื่อว่า Brillo ขึ้นมา
แต่ก็ยังไม่เปิดให้นักพัฒนาภายนอกได้ทดลองใช้ซักที

ส่วนตัวผู้เขียนได้มีโอกาสอยู่ในกรุ๊ปนักพัฒนาด้วย ในตอนแรกความตั้งใจของ Brillo นี่เหมือนจะออกมาทางแนว Native C/C++ เป็นหลักทำ API ใหม่และแนวทางการพัฒนาจะคล้ายๆ กับ Embedded Linux รูปแบบปกติ

แต่เมื่อเดือนธันวาคม 2559 Google ก็
ได้เปิดตัวระบบปฏิบัติการใหม่สำหรับงานด้าน Internet of things ที่ชื่อว่า Android things โดยยกมาจาก Brillo นั่นเองแต่เปลี่ยนแนวทางในการพัฒนาใหม่หมดโดยตัดสินใจใช้ภาษา Java สำหรับพัฒนา Application เป็นหลักให้เหมือน Android ปกตินั่นเอง

Android things คืออะไร

Android things ช่วยให้การพัฒนางานทางด้าน Embedded System ที่ต้องมีการเชื่อมต่อสื่อสารระหว่างกันทำได้ง่ายขึ้น ด้วยการสร้างชุดพัฒนาเหมือนกับบน Android

โดยปกติแอพพลิเคชั่น สำหรับงาน Embedded devices ก็มักจะเกี่ยวข้องกับการสั่งงาน Hardware ผ่าน Low level interface เช่น GPIO, I2C, SPI ด้วยเสมอ ยกตัวอย่างเช่นจะทำระบบ Weather station ก็ต้องมาต่อเซนเซอร์ต่างๆ ผ่านอินเทอร์เฟซที่กล่าวไว้ข้างต้น ตรงนี้ก็จะมีไลบรารี่สำหรับจัดการมาให้

แอพพลิเคชั่นบน Embedded devices มักจะโฟกัสไปที่งานอย่างใดอย่างหนึ่ง
และส่วนใหญ่มีแค่แอพเดียวทำงานอยู่บนอุปกรณ์ด้วย เช่นทำ ตู้กดน้ำ ก็โฟกัสไปที่แอพตู้กดน้ำ แต่ทั้งฮาร์ดแวร์ซิสเต็มคือตู้กดน้ำเลย ตรงนี้จะแตกต่างจากการพัฒนา
แอพพลิเคชั่นบน Smart Phone

และ Android things ต้องการให้มีขนาดเล็ก เลยเป็นเหตุผลที่ทำให้ใช้บางคุณสมบัติของ Android ปกติไม่ได้

Things Support Library

ดังที่กล่าวไปข้างต้นพวกฮาร์ดแวร์ IoT หรือ connected embedded devices เนี่ย
ชอบมีการเชื่อมต่อเซนเซอร์ หรือฮาร์ดแวร์ผ่านทาง Low level interface ดังนั้นเลยต้องมีการทำไลบรารี่ซัพพอร์ตตรงจุดนี้เข้ามา

Peripheral I/O API

ใช้สำหรับติดต่อกับ Low level interface โดยตรงโดยอินเทอร์เฟซที่ซัพพอร์ตตอนนี้
มี GPIO, PWM, I2C, SPI, UART หรือก็คือการเรียกใช้อินเทอร์เฟซตรงๆ นั่นแหละ

User Driver API

Android things นั้นมีแนวคิดว่าให้ทำไดรเวอร์ในระดับ User space ไปเลย
ใน kernel ให้ google ดูแลเอง ดังนั้นเลยต้องออกแนวคิด User-Space Drives ขึ้นมาาา

เราจะไม่สามารถเข้าไปแก้ไข Linux kernel หรือ Hardware abstraction layer ได้อีกแล้ว เพราะ Google จะดูแลเองตรงจุดนี้ถือว่า ฮาร์ดคอร์มาก เพราะมันหมายถึงเราไม่สามารถใช้ฮาร์ดแวร์โมดูลตัวอื่นได้เลยนอกจากที่ Google กำหนดไว้เท่านั้น !!!

สรุปในมุมนักพัฒนา User Driver API เอาไว้ใช้งานไดรเวอร์ของฮาร์ดแวร์ต่างๆ นั่นเอง เช่น เซนเซอร์เป็นต้น

ถ้าเซนเซอร์นั้นไม่มีก็เขียนใน User Drivers เพิ่มได้ โดยใช้ Peripheral I/O API เป็นทางผ่านนั่นเอง

คร่าวๆ ในสิ่งที่เปลี่ยนไปจาก Android ในตอนพัฒนา Application

Core Application packages

ด้วยความแตกต่างด้านสถาปัตยกรรมที่ถูกตัดจนแทบไม่เหลืออะไรแล้วพวก system apps ของ Android ที่คอยจัดการ application ก็หายไปด้วย
ดังนั้น common intent ก็อย่าไปใช้รวมไปถึง content provider api ดังต่อไปนี้ด้วย

CalendarContract
ContactsContract
DocumentsContract
DownloadManager
MediaStore
Settings
Telephony
UserDictionary
VoicemailContract

Displays are optional

จอเป็น Optional ไปแล้วเนื่องจาก Embedded devices บางงาน และหลายงานซะด้วยไม่จำเป็นต้องมีจอ เพื่อแสดงผล และเมื่อไม่มีจอแอพของเราก็ยังทำงานได้นะ

แต่ถ้าอยากแสดงผลก็ยังสามารถออกแบบโดยใช้ UI toolkit เหมือนกับการพัฒนาแอพบนมือถือเลย แต่พวก system status bar, navigation buttons ไม่มีครับ

Home activity support

Android things ได้ออกแบบมาให้อุปกรณ์เมื่อเปิดเครื่องแล้วสามารถเข้า application ของเราได้เลยดังนั้นเราเลยสามารถเพิ่ม activity เพื่อบอกให้ระบบรู้ว่าทำงานแล้วเข้าแอพของเราได้เลย

Support for Google services

Android things ก็ได้ความดีในการใช้งาน Google services อีกด้วย โดยเขียนเหมือน Android นั่นแหละ API ที่ซัพพอร์ตและที่ไม่ซัพพอร์ตก็ดูตามตารางนี้

Permissions

การขอ Permissions ในตอนที่รันแอพ (Requesting Permissions at Runtime) จะไม่ซัพพอร์ต เนื่องจาก Embedded devices อาจจะไม่มีจอก็ได้ดังนั้นไม่รู้จะเอาอะไรไปแสดงไดอะลอกให้กดตกลง เลยต้องไปประกาศในแอพตามปกตินั่นเอง

Notifications

ไม่ซัพพอร์ตครับ

สรุปสำหรับ Android things ในเวอร์ชั่น Preview นี้

  1. Brillo ถูกเปลี่ยนเป็น Android things แล้วโดยออกแบบให้เป็น Android ตัวน้อยที่สามารถทำงานได้ทั้งแบบมีหรือไม่มีดิสเพลย์
  2. นักพัฒนาสามารถใช้ Android studio และ Android framework API ในการพัฒนาได้ รวมถึง debug APK บน Android things
  3. System image จะทำให้เฉพาะฮาร์ดแวร์ที่ได้รับการรับรองจาก Android things เท่านั้น และ Google จะดูแลเรื่องของการอัพเดตุฟีเจอร์ความปลอดภัยใหม่ๆ และฟีเจอร์ใหม่ๆ ด้วย โดยที่นักพัฒนาไม่ต้องกังวลเรื่องที่ต้องมานั่งแพทซ์ซอฟต์แวร์ และมานั่งสร้าง System image ใหม่อีกแล้ว
  4. Google play services ก็มีให้ใช้
  5. นักพัฒนา Embedded devices ที่อยากใช้ C/C++ ก็ทำได้โดยใช้ Android NDK toolchains
  6. Android framework จะจัดการไลบรารี่เชื่อมต่อ Peripheral I/O เช่น GPIO, SPI, I2C, UART, SPI มาให้โดยที่เราไม่ต้องกังวลเรื่อง app permission อีกแล้ว

ทีนี้ในฐานะที่ผู้เขียนทำงานทางด้าน Embedded System เลยอยากแชร์ข้อดีข้อเสียคร่าวๆ เท่าที่สัมผัสหน่อย

ข้อดี

  • สามารถเพิ่มนักพัฒนา Embedded devices ได้เป็นจำนวนมากก็มาจากนักพัฒนาแอพพลิเคชั่นบนมือถือนั่นแหละ
  • ลดปัญหาเรื่องการ learnning curve ของ Embedded linux ที่ผู้พัฒนาต้องเข้าใจตั้งแต่ bootloader, kernel หรือระบบต่างๆ ซึ่งส่วนใหญ่จะมาตกม้าตายตอนทำระบบ ได้บอร์ดที่ระบบปฏิบัติการไม่สเถียรมาก็ไปต่อไม่ถูก
  • ไม่ต้องเรียนรู้เรื่องระบบปฏิบัติการ ก็น่าจะเริ่มต้นทำโพรดักซ์ได้
  • เซอร์วิสที่ควรจะมีบน Connected embedded devices อย่างเช่น OTA ( Over the air updates ) โดยต้องควบคุมเวอร์ชั่นของแอพได้ก็มีมา
  • Google services
  • ลดการแตกหน่อของฮาร์ดแวร์และซอฟต์แวร์สำหรับ IoT
  • ไม่ต้องปวดหัวเรื่องเลือก 3rd application บน linux

ข้อเสีย

ถึงตอนนี้ก็ยังมีดราม่าเรื่อง Android things ในกลุ่มนักพัฒนา Embedded devices เป็นจำนวนมากโดยเฉพาะคนทำ Brillo ผมจะหยิบยกประเด็นที่น่าสนใจดังต่อไปนี้

  • มันไม่ยืดหยุ่นเอาซะเลย เมื่อถูกควบคุมระบบปฏิบัติการไปหมด
  • ถ้าระบบปฏิบัติการมีปัญหา สำหรับงานที่รอแก้ปัญหาไม่ได้ก็ต้องรอ Google ซึ่งปกติเราสามารถแก้ไขได้ทันทีในปัจจุบัน ตรงนี้ต้องรับความเสี่ยงกันเอง
  • มันช้ามาก แต่ตรงนี้ถือว่ารอได้เพราะยัง preview อยู่แต่ที่แน่ๆ กินรีซอร์สเยอะขึ้นมาก จากเดิมความตั้งใจของ Google ที่จะให้พอร์ตลงฮาร์ดแวร์ราคาถูกได้ก็ทำใจเลย เพราะตอนนี้ฮาร์ดแวร์ถูกสุดคือ Raspberry PI ซึ่งฮาร์ดแวร์ก็ไม่ใช่เหมาะกับงานหลายๆ ประเภทที่ Embedded device ทำได้
  • งาน Embedded devices ไม่ใช่การพัฒนา software app แล้วจบ แต่มันหมายถึงทั้งระบบได้แก่ ฮาร์ดแวร์ ซอฟต์แวร์ ประกอบขึ้นมาเป็น app หนึ่ง ดังนั้นระบบมันจะค่อนข้างมีความหลากหลายมากตรงจุดนี้ การที่ไม่สามารถทำอะไรกับตัว Os ของ Android things ได้เลยย่อมเป็นปัญหาแน่นอน
  • งานที่เน้นความเร็วในการบูตเช่น ไม่เกิน 5 วินาที บน Linux ก็ทำไม่ได้แล้ว
  • ปัจจุบัน ไม่มีงานไหนที่ Android things ทำได้แต่ซอฟต์แวร์ตัวอื่นในปัจจุบันทำไม่ได้แต่ต้องมีนักพัฒนาที่เข้าใจ Embedded Linux เป็นอย่างดีในทีม

สุดท้ายนี้ ถ้าใครจะศึกษาก็สามารถศึกษาได้เลย แต่ถ้าจะใช้พัฒนาผลิตภัณฑ์แล้วละก็ต้องรอจนกว่าจะออกเวอร์ชั่น stable release และแน่นอนอนาคตแนวทางต้องมีแก้ไข แต่ก็นับว่าเป็นอีกหนึ่งวิธีในการพัฒนา IoT หรือ connected embedded devices ที่น่าสนใจครับ

สำหรับตอนที่สองเดี๋ยวจะมาลองภาคปฏิบัติกันครับ

--

--