ผู้สนับสนุน

วันศุกร์ที่ ๓๐ ตุลาคม พ.ศ. ๒๕๕๒

Compile Chrome บน windows

Update!! อาจจะใช้ไม่ได้แล้ว ที่มา

Android source ๔

ต่อจาก ตอนที่แล้ว [เนื่องจากงง ทำหลายข้อต่อไปไม่ได้ เลยขอข้ามเลย]
ตอนที่แล้วถึงช่วงเพิ่ม memory ให้ eclipse

เมื่อคุณต้องการ sync โปรเจค
ซึ่งกรณีที่จะต้องทำได้แก่ตอนที่คุณใช้ repo sync หรืออื่นๆ เช่น เปลี่ยนแปลงไฟล์ จากนอก eclipse (เช่นไฟล์ .classpath) ดังนั้นคุณต้อง refresh eclipse

  1. Window > show view > navigator
  2. แล้วก็ไปที่ navigator tab > คลิ๊กขวาที่โปรเจค("mydroid" หรืออะไรก็ตามที่คุณตั้งชื่อมัน)
  3. คลิ๊กที่ refresh

Adding apps to the build path
[ไม่ค่อยเข้าใจข้าม... -_-]
Eclipse setup to work on developer tools
[ไม่ค่อยเข้าใจข้าม... -_-]
Eclipse setup to work on DDMS
[ไม่ค่อยเข้าใจข้าม... -_-]

จัด Format ให้ eclipse
  1. คลิ๊กที่ project ของท่าน ("mydroid" หรืออะไรก็ตามที่คุณตั้งชื่อ)
  2. Project>properties
  3. เมนูทางซ้าย Java code style > Formatter
  4. Enable project specific setthings > import
  5. เลือกไฟล์ android-formatting.xml จาก development/ide/eclipse
    [ต้นฉบับบอกว่าให้เพิ่ม
    android.importorder ด้วยแต่ผมหาไม่เจอ]
  6. เลือก Active profile ให้เป็น Android แล้วก็กด OK

Debug emulator ด้วย eclipse
    คุณสามารถที่จะใช้ eclipse ในการ debug emulator ได้ แล้วก็ step ตามการทำงานของ code ได้
[อันนี้ไม่เข้าใจว่า eclipse ได้ไงนะ เพราะต้องเปิด terminal ขึ้นมาเพื่อรัน emu]

cd myandroid/
. build/envsetup.sh
lunch 1 #เพื่อสร้าง emulator
make #ในกรณีที่คุณยังไม่ได้ทำขั้นนี้ ถ้าทำแล้วก็อย่าทำอีกนะมันนาน
emulator #รัน emulator ขึ้นมา ซักพักคุณจะเห็นเครื่อง android emu gui [กด num lock แล้วกด 7 ,9 เพื่อตะแคงมันเล่น]

เปิด terminal อีกอันขึ้นมา แล้วเปิด DDMS ( Dalvik debug manager)

cd myandroid/
. build/envsetup.sh
ddms #เพื่อสร้าง emulator

จะมี console อะไรที่อ่านไม่ค่อยรู้เรื่องขึ้นมา(เป็น gui)

แล้วก็ไปที่ eclipse
  1. เปิด run > debug configurations
  2. คลิ๊กขวาที่ Remote Java Application
  3. ตั้งชื่อให้มัน เช่น android-debug
  4. ตั้งชื่อโปรเจค (ตามปกติมันมันจะมีชื่อโปรเจคเดิมเรามาให้อยู่แล้ว)
  5. เปลี่ยน port เป็น 8700
  6. กด Debug
ปล1. [16:20]ของผมมัน Error อีกแล้ว T^T
ปล2. [16:21]เหตุน่าจะมาจาก เคยลง sdk มาก่อนใน eclipse มาก่อนเพราะฉะนั้นเอามันออกไปซะ
ปล3. [16:36]แต่ก็ยังไม่ได้อยู่ดีเศร้าหว่ะ T^T ใช้แบบบน shell แหละดีแล้ว

port  8700 จะเชื่อมต่อกับ process อะไรก็ตามที่ถูกเลือกอยู่ใน console ของ DDMS ดังนั้นคุณควรจะดูให้ดีว่า DDMS เลือก process ถูกต้องหรือเปล่า[process ที่คุณจะ debug]


คุณอาจต้องการเปิด Debug perspective (Window > Open perspective > Other , Debug > OK) แล้วก็เลือกสลับระหว่าง java กับ debug ได้ที่มุมขวา ของ eclipse ส่วนใช้ยังไงใช้ไม่เป็นอ่ะยัง connect ไม่ได้ (-_-) [ต้นฉบับมีบอก]


เพิ่ม plug in 

eclipse มีระบบ plugin  ที่จะสามารถให้ผู้อื่นสามารถเพิ่มความสามารถให้ IDE ได้ และนี่คือ plugin บางตัวที่ทำให้ eclipse ใช้ง่ายขึ้นเพื่อเขียน android

  • AnyEdit เครื่องมือสำหรับ ฟิกเรื่อง whitespace เมื่อบันทึกไฟล์ คือจะเปลี่ยน tab เป็น space ตัด space หลังบรรทัด และใส่ end-of-line ที่ท้ายไฟล์ [มันต้องเป็น eof end-of-file หรือเปล่าฟระ]

Eclipse มันง๊องแง้ง ทำไงอ่ะ

ดูอีกทีให้ดีว่า:

  • ทำตาม step ถูกต้องหรือเปล่า
  • Your Problems view doesn't show any errors.
  • Your application respects the package/directory structure.

ถ้ายังไม่ได้อีกติดต่อ contact list ของ android หรือไม่ก็ที่ช่อง irc (freenode.net #android) (เคยติดต่อมารอบแล้ว)


Android NDK(เขียนเล่นๆ)

Android NDK

• จำเป็นต้องมี SDK 1.5
• บน windows จำเป็นต้องลง http://www.cygwin.com/ (จะมี  gmake และ gcc มาให้)
• ทำให้เขียน c/c++ เพื่อรันบน android ได้
• native code จะถูกเรียกใช้ผ่าน JNI
• เขียนไม่ดีจะกลายเป็นว่าซับซ้อนกว่าเดิมโดยใช่เหตุเพราะว่ามันต้องรันบน dalvik VM อีกชั้นอยู่แล้ว
• ในอนาคต code ของ native อาจจะใช้ไม่ได้บ้างบางส่วนเพราะว่ามันมียังมีการปรับอยู่เรื่อยๆ
• ต้องเขียน android.mk และ application.mk เองด้วย
• c++ ใช้ .cpp เป็นพื้นฐาน สามารถ config ให้รับ .cxx อื่นๆ ได้
• ประกอบด้วย
    ∘ cross-toolchains  ( compilers, linker, etc) ที่สามารถสร้าง native ARM binaries บน Linux, OSX, Windows(ที่มี Cygwin)


NDK แบบคร่าวๆ
หลังจากโหลด ndk มาและแตกไฟล์ออกมาจะมีโครงสร้าง dir ดังนี้

code c/c++ จะเขียนใน dir sources/ และเมื่อ compile แล้วจะได้ผลออกมาที่ dir out/ และ apps/
โดย
  • code ที่เขียนออกมาจะไม่ได้กลายเป็น app โดยตรง
  • เมื่อ compile แล้วมันจะสร้าง lib native ให้อยู่ใน apps/
  • เรียกผ่าน JNI ของ android อีกทีหนึ่ง 

    จากรูป libs/armeabi/lib[name].so เป็นสิ่งที่เมื่อ compile code c/c++ แล้ว NDK จะสร้างให้ และ dir อื่นๆ  src/, assets/ , res/ , bin/, gen/ เป็นสิ่งที่ต้องสร้างขึ้นมาโดยเป็น project android ทั่วไปโดยจะเรียกใช้ native c/c++ ผ่านทาง lib เท่านั้น
    โดยที่เราจะต้องเขียน Application.mk (makefile) และ AndroidManifest.xml เพิ่มเติมเองเพื่อให้มันเรียกใช้ได้


    sources/ จะมี Android.mk ที่เป็นตัวกำหนดว่าต้อง build หรือ compile ไฟล์ใด dir ใดบ้าง เพราะฉะนั้นมันจะมีอยู่แทบทุก subdir
สำหรับ code ของ c/c++ ที่เขียนใน sources จะมีลักษณะที่ทำไว้ให้  jni เรียกได้ด้วย แล้วไฟล์ที่ว่านั้นอาจจะไปเรียก code c อื่นๆ ก็ได้
** second.c **
#include "first.h" // เรียกใช้ func อื่น
#include <jni.h> // เรียก jni

jint
Java_com_example_twolibs_TwoLibs_add( JNIEnv*  env, // Java_com_example_twolibs_TwoLibs_ < คือชื่อ pkg และ class, add คือชื่อ method
                                      jobject  this,
                                      jint     x,
                                      jint     y ) // argument พื้นฐานคือ JNIEnv*  env,jobject  this argument เพิ่มเติมคือ jint x, jint y
{
    return first(x, y);    // เรียกใช้ function จากไฟล์อื่น (first.c)
}

** first.c **
#include "first.h"

int  first(int  x, int  y)
{
    return x + y;
}

** first.h **
#ifndef FIRST_H
#define FIRST_H

extern int first(int  x, int  y);

#endif /* FIRST_H */
หมายเหตุ  Java_com_example_twolibs_TwoLibs_add <<คือ JNI นี่เอง

และจะเรียกใช้ผ่าน JNI ได้ในลักษณะนี้
package com.example.twolibs;

import ...


public class TwoLibs extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        /* do something */
        int       x  = 1000;
        int       y  = 42;
        // dynamically load the library at runtime
        // before calling the native method.
        System.loadLibrary("twolib-second");
        int  z = add(x, y);

        /* show z output */
    }

    public native int add(int  x, int  y);
}

STABLE lib ที่สามารถเรียกใช้ได้
C standard, <stdlib.h>, <stdio.h>, etc...  และ <pthread.h><math.h>
C++ <cstddef>   <new>   <utility>   <stl_pair.h>

C lib เฉพาะของ android <android/log.h>

Zip
<zlib.h> <zconf.h>
เริ่มใช้ android NDK
1. ตรวจสอบ system requirement
  • SDK 1.5
  • GNU Make 3.81 ขึ้นไป ทดสอบโดยการ พิมพ์ make -v
2. Download NDK แล้วทำการรัน setup script
    build/host-setup.sh
3. เขียน source แล้วเก็บไว้ที่ source/<mysrc>/...
4. เขียน sources/<mysrc>/Android.mk เพื่ออธิบาย source code ให้ NDK build ได้ถูกต้อง
    - เขียน source code
5. เขียน apps/<myapp>/Application.mk เพื่ออธิบายโปรแกรม และ native code มันจำเป็นต้องใช้กับ  NDK build system
   - เขียน app ที่เรียก native code
6. Build Native code ด้วย คำสั่ง make APP=<myapp> ที่ root dir ของ NDK
7. Generate .apk ด้วย Eclipse
Configurating the NDK