3 มกราคม 2559

Published 1/03/2559 by with 0 comment

สร้างแอพ Android ด้วย buildozer ในภาษาไพทอน

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปสร้างแอพ Android ด้วย buildozer ในภาษาไพทอนกันครับ

buildozer เป็นเครื่องมือสำหรับใช้ทำแอพ Android และ IOS ด้วยภาษาไพทอน ถูกพัฒนาขึ้นโดยทีมงาน kivy โดยรองรับทั้ง Python 2 (ส่วน Python 3 ยังมี Bug กับ buildozer อยู่ ทำให้ไม่สามารถใช้งานได้)
ใช้ MIT License

เนื่องจาก buildozer ยังรองรับทั้ง Python 2 และ Python 3 for android ยังอยู่ในช่วงกำลังพัฒนา เนื่องจากผมเริ่มต้นเขียนภาษา Python ที่ Python 3 การเปลี่ยนย้ายมาใช้ Python 2 ผมมีคำแนะนำดังนี้

  1. ตรวจสอบว่าได้ใช้โมดูลที่รองรับทั้ง Python 2 และ Python 3 หรือไม่ (เลือกโมดูลที่รองรับทั้ง Python 2 และ Python 3)

  2. ส่วนโค้ดและไลบรารีต่าง ๆ ตามหลักไวยากรณ์ Python 3 สามารถใช้โมดูล python-modernize ช่วยแปลงโค้ดให้รองรับทั้ง Python 2 และ Python 3 ได้


ในบทความนี้ผู้อ่านต้องทำใน Linux หรือ Mac OS เท่านั้น ผมแนะนำ Ubuntu
สำหรับผู้ใช้งาน VMware & VirtualBox สามารถโหลด Ubuntu มาใช้งานได้เลย จาก http://www.osboxes.org/ubuntu/

เตรียมความพร้อม

  • อินเทอร์เน็ตความเร็วสูง (เนื่องจาก buildozer ต้องใช้ในการโหลด Android SDK และ Android NDK มาติดตั้ง เฉพาะตอนแรก)

  • เนื้อที่มากกว่า 16 GB

  • CPU 1 GHz ขึ้นไป

  • แรมมากกว่า 1 GB


ทำการติดตั้งไลบรารีตามคำสั่งต่อไปนี้
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer oracle-java7-set-default build-essential python-dev python-pip ccache git zlib1g-dev libncurses5:i386 libstdc++6:i386 zlib1g:i386 unzip ant

แล้วทำการติดตั้ง Kivy และ buildozer
sudo pip install cython
sudo pip install buildozer
sudo pip install plyer
sudo add-apt-repository ppa:kivy-team/kivy
sudo apt-get update
sudo apt-get install python-kivy

เมื่อทำการติดตั้งเสร็จแล้ว เรามาลองทำแอพ Android ด้วย buildozer ในภาษาไพทอนกันครับ
ผมทำการสร้างไฟล์ main.py ขึ้นมา โดยมีโค้ดดังนี้

[python]
from kivy.app import App
from kivy.uix.button import Button

class Hello(App):
def build(self):
btn = Button(text='Hello World')
return btn

Hello().run()
[/python]

บันทึกไฟล์ไว้ แล้วเปิด Terminal ใช้คำสั่ง cd ไปยังโฟลเดอร์ที่เก็บไว้ main.py แล้วใช้คำสั่ง
buildozer init

จะได้ไฟล์ buildozer.spec ซึ่งเป็นไฟล์กำหนดรูปแบบการ build โค้ดไพทอนไปเป็น apk
ให้ทำการเปิดไฟล์แล้วทำการแก้ไขโค้ดในไฟล์ดังนี้ (เนื่องจากจะได้ไม่ต้องเสียเวลาใส่ _version_ ทุกไฟล์)
ตรง
# (str) Application versioning (method 1)
version.regex = __version__ = ['"](.*)['"]
version.filename = %(source.dir)s/main.py

ให้ใส่ # เข้าไปเป็น
# (str) Application versioning (method 1)
#version.regex = __version__ = ['"](.*)['"]
#version.filename = %(source.dir)s/main.py

และตรง
# (str) Application versioning (method 2)
# version =

ให้เอา # หน้า version ออกแล้วใช้เลขเวอร์ชั่นเข้าไปหลัง = เป็น
# (str) Application versioning (method 2)
version = 1.0

อธิบายรายละเอียดไฟล์ buildozer.spec แบบย่อ ๆ

  • title ใช้กำหนดชื่อแอพ (ภาษาอังกฤษ)

  • package.name ชื่อ Package ของแอพ

  • package.domain เป็น org.test

  • source.dir ที่ตั้งของโค้ดไพทอน (ค่าพื้นฐานคือที่ตั้งของไฟล์ main.py)

  • source.include_exts นามสกุลไฟล์ที่ถูกรวมไปรวม

  • version เวชั่นของแอพ

  • requirements โมดูล python ที่ต้องการ

  • fullscreen ใช้กำหนดให้แอพเต็มหน้าจอหรือไม่ ถ้าให้เติมให้ 1 ถ้าไม่ ใส่ 0

  • log_level ระดับรายละเอียดของไฟล์ log (0 = error only, 1 = info, 2 = debug (with command output)

  • icon.filename ชื่อไฟล์ icon ของแอพ


เมื่อกำหนดเสร็จแล้วมา build แอพ Android เป็น apk กันครับ
ใช้คำสั่ง
buildozer -v android debug

รอสักครู่ ถ้าไม่มีอะไรผิดพลาด จะได้ไฟล์ apk ในโฟลเดอร์ bin ลองเอาไฟล์ apk ไปติดตั้งแล้วลองรันใน Android กันดูครับ

สร้างแอพ Android ด้วย buildozer ในภาษาไพทอน

การเขียนโค้ดภาษาไพทอนให้สามารถเข้าถึง API ของระบบ สามารถใช้โมดูล plyer เข้ามาช่วยงานเรื่องนี้ได้ครับ อ่านเพิ่มเติม เข้าถึงการทำงานฮาร์ดแวร์ข้ามแพลตฟอร์มด้วย plyer ในภาษาไพทอน

ตัวอย่างแอพที่เขียนในบทความนี้ https://www.dropbox.com/sh/6krehv3wnnb9pea/AAD110J17NAH6_O0iqRfnI4Oa?dl=0

ตัวอย่างแอพที่ใช้ buildozer สร้างแอพ Android ด้วยภาษาไพทอน

ขอให้สนุกกับแอพ Android ที่สร้างจากภาษาไพทอน Python กันดูนะครับ
ถ้าหาก โมดูลนี้สามารถทำงานได้กับ Python 3 ได้เมื่อไร ผมจะมาทำการปรับแก้บทความและแจ้งให้ทราบอีกครั้งครับ
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)