Development

มาเขียน C++ บน Android กันเถอะ

หลายคนอาจจะบอกว่ามี SDK ที่เป็น Java แล้วจะมาเขียน C++ อีกทำไมกัน ส่วนตัวผมชอบ C++ เพราะความสามารถส่วนนึงของมันที่สามารถพอร์ท ไปรันที่อื่นได้ และเรืองความเร็วที่ให้ความเร็ว ได้ดีอย่างเช่นเกมส์ต่างๆ ที่รันบนเครื่องเรา ส่วนมากแล้วก็เขียนด้วย C++ และก็พอร์ทมาจากเครื่องอื่นเยอะพอสมควร แต่วันนี้ผมคง Guide ไปไม่ถึงหรอกนะครับ เรื่อง เขียนเกมส์เพราะผมไม่ใช้คนเขียนเกมส์ เข้าเรื่องๆ……
ตอนนี้ Android NDK ก็ไปซะ R4 ล่ะหลายคนก็งงอีกว่า NDK คืออะไรจริงๆแล้วมันคือตัว Compile C++ โดยสามารถใช้ JNI call โปรแกรมนี้ ให้สามารถนำไปทำงานบนเจ้าหุ่นเขียวได้นั่นเองครับ

หลายคนอาจจะบอกว่ามี SDK ที่เป็น Java แล้วจะมาเขียน C++ อีกทำไมกัน ส่วนตัวผมชอบ C++ เพราะความสามารถส่วนนึงของมันที่สามารถพอร์ท ไปรันที่อื่นได้ และเรืองความเร็วที่ให้ความเร็ว ได้ดีอย่างเช่นเกมส์ต่างๆ ที่รันบนเครื่องเรา ส่วนมากแล้วก็เขียนด้วย C++ และก็พอร์ทมาจากเครื่องอื่นเยอะพอสมควร แต่วันนี้ผมคง Guide ไปไม่ถึงหรอกนะครับ เรื่อง เขียนเกมส์เพราะผมไม่ใช้คนเขียนเกมส์ เข้าเรื่องๆ……
ตอนนี้ Android NDK ก็ไปซะ R4 ล่ะหลายคนก็งงอีกว่า NDK คืออะไรจริงๆแล้วมันคือตัว Compile C++ โดยสามารถใช้ JNI call โปรแกรมนี้ ให้สามารถนำไปทำงานบนเจ้าหุ่นเขียวได้นั่นเองครับ

ผมใช้ Windows 7 เป็นตัวลงมือในการทำครั้งนี้นะครับ

สิ่งที่ต้องเตรียม ก่อนลงมือนนะครับ
ทำให้เครื่องตัวเองมี Emulator และสามารถ Run android SDK ได้ตามคุณ jumbo_cs
ที่เคยได้ Post ไว้ตาม Link นี้ https://droidsans.com/node/4568

Android NDK http://developer.android.com/sdk/ndk/index.html For Windows นะคับ
Cygwin 1.77 มั้งครับตอนนี้ http://www.cygwin.com

เริ่มกันเลยครับ

1. หลังจาก Download android-ndk-r4b-windows.zip มาจาก Android Deverper นะครับ
จับมันแตกไฟล์ลงบนเครื่องเราซะ ผมเอาไว้ที่
C:AndroidEngineandroid-ndk-r4b

2. Install Cygwin ครับ ลงปกติตามรูปครับ

หา Server ของ Jp น่าจะเร็วสุดแล้วมั้งครับถ้าเชื่อมจากบ้านเรา

เพิ่ม Package make โดยการค้นหา แล้วเลือก make ให้ติดตั้งเข้ามาด้วยใน cygwin

เป็นอันเสร็จครับสำหรับการติดตั้ง

การ Build .c ผ่าน Cygwin
1. เอา Project HelloJNI มาทดสอบ ถ้าตั้ง path ตามผมน่าจะอยู่ที่ C:AndroidEngineandroid-ndk-r4bsampleshello-jni ให้ copy ทั้ง folder hello-jni เอาทั้ง Folder ไปด้วยนะครับ ให้ไปไว้ที่ C:AndroidEngineandroid-ndk-r4bproject

2. เปิด Cygwin ขึ้นมาจะได้หน้าตาแบบนี้ครับ

3. ใช้คำสั่ง CD ไปยัง path ของโปรแกรม
ซึ่งน่าจะอยู่ที่
/cygdrive/c/AndroidEngine/android-ndk-r4b/project/hello-jni

4. build ด้วย ndk-build
โดยพิมพ์
../../ndk-build

5. Source Code ของภาษา C จะอยู่ที่
C:AndroidEngineandroid-ndk-r4bprojecthello-jnijnihello-jni.c
ส่วน Binary จะอยู่ที่
C:AndroidEngineandroid-ndk-r4bprojecthello-jniobjlocalarmeabi

ถ้าไม่ Error ต่อไปเราต้องใช้ Eclipse เพื่อทำให้ โปรแกรมที่เขียนด้วย C ตัวนี้เป็น APK เพื่อติดตั้งลงบน Android ได้

อย่างที่บอกขั้นตอนนี้คุณต้องทำตามคุณ jumbo_cs ให้ได้ก่อนนะครับ

1. เปิด Eclipse ครับ

2 New Project แล้วเลือก Andoid Project ครับ

3. เลือก Create Project form Exist Source
แล้วเลือก Path ไปที่ C:AndroidEngineandroid-ndk-r4bprojecthello-jni ที่เราสร้างไว้
แล้วเลือก Build Target ที่ต้องการครับ 1.5.16 2.1 อันนี้แล้วแต่สะดวกครับ แล้วกดถัดไปจนจบ Finish.

4.ทำการรัน ผ่าน Emulator ที่สร้างไว้ คือเราต้อง New Emulator ให้ตรงกับ Build Target นะครับ
เป็นอันเสร็จพิธีครับ ลอง Run As -> Android Application ตามรูปนะครับ

5. ผลของการรันผ่าน Emulator ก็จะมีคำว่า Hello โผล่มาครับ

…… อ่านเพิ่มเติมได้ที่
http://developer.android.com/sdk/ndk/index.html

ส่วนใครสนใจเรื่องเขียนเกมส์ตอนนี้ผมลองเอา irrlicht ที่มีฟรั่่งเขาพอร์ท มาเพื่อใช้กับ Android กำลังทดสอบอยู่ ว่างๆ จะมาเขียนวิธีใช้ให้ฟังกันนะครับ หรือถ้าสนใจ ลองเข้าเว็บนี้ดูครับ
http://irrlicht.sourceforge.net/
http://gitorious.org/irrlichtandroid/
http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=37235&postdays=0&postorder=asc&start=0&sid=6a7a639bd02d45a1297006b139e6d57f

18 Comments

  1. ToomTam

    ToomTam Post on September 29, 2010 at 11:26 pm

    #37555

    รูปใหญ่ไปหน่อย โทษทีคับ…..

  2. dahoba

    dahoba Post on September 30, 2010 at 1:16 am

    #37585

    แหล่ม!

  3. Rice Cooker

    plaumkamon Post on September 30, 2010 at 5:39 am

    #37638

    ละเอียดจัง แหล่มมาก

  4. tanit9999

    tanit9999 Post on September 30, 2010 at 6:12 am

    #37650

    รู็สึกว่าเกมส์ มันจะมีคนทำ framework ไว้สร้างเกมส์บนแอนดรอย ผมอ่านผ่านๆอะครับใช้ openGL ตอนแรกจะเขียนโปรแกรมบนแอนดรอย แต่มันติดตรงที่ ถ้าจะทำเกมส์ก็ใหญ่เกินจะทำคนเดียว และเวลาก็ไม่ค่อยเยอะ เลยกำลังหาความคิดว่าจะทำอะไรดีที่มันน่าสนใจ ยากจริงๆเลยขั้นตอนเนี้ย

  5. ToomTam

    ToomTam Post on September 30, 2010 at 8:46 am

    #37681

    ครับ Game Engine มีคนทำไว้หลายตัวครับ แต่ส่วนมากจะใช้ Java หมดครับ ส่วน C++ นี่ยังไม่เจอครับหรือถ้าใครเจอแนะนำด้วยนะครับ

  6. wArEzAn

    wArEzAn Post on September 30, 2010 at 10:46 am

    #37693

    จะมีใครทำ myDroidsans เหมือน Engadget หรือ 1000ทิพย์ บ้างใหมหนอ …

    • tanit9999

      tanit9999 Post on October 1, 2010 at 8:31 am

      #38002

      เข้าหน้าเว็ปดีกว่านา อิอิ ได้อารมกว่า นิดๆ

    • nuuneoi Post on October 1, 2010 at 8:33 am

      #38003

      มี………

      อุ้ย พูดอะไรออกไป XD

    • bangdew

      bangdew Post on October 1, 2010 at 5:41 pm

      #38060

      เย้ รออยู่เลย

    • wArEzAn

      wArEzAn Post on October 1, 2010 at 8:15 pm

      #38110

      วันก่อนขอฟอนต์จากคุณ nuuneoi ยังไม่ได้เอาไปใส่เลย

      ผมต้องทำ keyboardview ใหม่ แอบอู้นิดนุง งุงิงุงิ …

  7. tonhor

    tonhor Post on October 1, 2010 at 8:47 am

    #38007

    ขอบคุณนะครับสำหรับบทความ

  8. yonprawes

    yonprawes Post on October 1, 2010 at 1:41 pm

    #38019

    ขอบคุณครับ

  9. EspanolSD

    EspanolSD Post on October 1, 2010 at 5:38 pm

    #38059

    JAVAก็ cross platform อยู่แล้วนะครับ เพียงแต่ชุดคำสั่งของ android sdk หรือ ndk เมื่อถูก build ออกมาเป็น app จะต้อง execute อยู่บน android platform ดังนั้น เรื่องภาษาไม่น่าจะเป็นข้อได้เปรียบว่าเขียนด้วยภาษาอะไร อยู่ที่เราถนัดมากกว่า

    สำหรับ framework แบบ wysiwyg ที่ใช้สำหรับพัฒนาเกมตามที่มีคนแนะนำไว้ใน rep ก่อนหน้าที่ดีๆก็มี
    -unity engine ฟรีตราบใดที่ app ไม่ commercial
    ลองดูกันนะครับ

    ขอบคุณบทความนี้เขียนได้ละเอียดดีครับ

    • ToomTam

      ToomTam Post on October 1, 2010 at 9:03 pm

      #38117

      unity ก็น่าสนใจดีนะครับเครื่องไม้เครื่องมือครบด้วยดีมากๆเลย
      เสียเรื่องเดียวถ้าจะทำขาย ต้องเสียตังด้วย เสียไม่พอดันเยอะด้วยนี่ซิครับเหอะๆ

      จริงๆ java cross ได้ก็จริงครับ แต่ถ้าเราเขียน java สำหรับ android ซึ่งปกติเราก็มักใช้ class android.* จะถูกใช้เยอะ เวลาเอาไปรันเครื่องอื่นก็ต้องมาไล่แก้ส่วนนี้ครับ ส่วน c ก็แก้เหมือนกันแต่เหนื่อยน้อยกว่าเพราะมักจะต้องแก้ที่ path ที่ใช้อ้างถึงไฟล์ แล้วก็พวกอุปกรณ์ต่อพ่วงต่างๆ ไม่ก็คำสั่ง c ซึ่งบางเครื่องปรับแต่งมาไม่เหมือนกัน แต่นี่ผมหมายถึงกรณีของเกมส์นะครับ ถ้า App ยังไงเขียนด้วย java ก็ดีกว่าครับ

  10. Nutza2499

    Nutza2499 Post on October 1, 2010 at 8:34 pm

    #38118

    มีโปร APP เขียน JAVA มั้ยคร้าบบบบบ อยากได้มากๆเลยอะคับ ^^

  11. Phitsanu

    Phitsanu Post on October 2, 2010 at 12:48 am

    #38195

    ขอบคุณครับ

  12. afterdead Post on November 25, 2010 at 1:07 am

    #53142

    เย้ ! จบ

  13. sensor

    sensor Post on December 11, 2010 at 5:37 pm

    #58333

    ขอบคุณครับ เป็นแนวทางในการเิริ่มต้นที่ดีมากๆเลย : )

Leave a Reply

To Top