หลังจากที่ RASPBIAN WHEEZY อัพเตดใหม่เป็น RASPBIAN JESSIE ปัญหาที่ตามมาคือ ไม่สามารถสั่งให้ Raspberry pi รัน Script หลังจาก Boot เสร็จ ซึ่งเป็นปัญหาอย่างมากสำหรับมือใหม่ที่เริ่มใช้งาน

วันที่เขียนบทความนี้ Raspbian ได้อัพเดตเป็น RASPBIAN JESSIE WITH PIXEL แล้ว สวยขึ้นเยอะเลย และ Browser ที่ให้มาคือ Chromium ตั้งแต่ต้น

โม้มาเยอะแล้วมาเริ่มกันดีกว่าครับ Go Go Go...... Pekemon Go ผิด

สำหรับใครที่ใช้งานบน RASPBIAN WHEEZY ให้เข้าไปที่

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

สำหรับใครที่ใช้งานบน RASPBIAN JESSIE WITH PIXEL ให้เข้าไปที่

sudo nano ~/.config/lxsession/LXDE-pi/autostart

แล้วเพิ่มคำสั่งที่ต้องการไว้ล่างสุด เช่น ผมต้องการให้เปิด Terminal

@x-terminal-emulator 

สุดท้ายก็ reboot

sudo reboot



หลังจากที่ทำโปรเจคจบมาได้ซักพัก ก็ติดปัญหาหลายๆอย่าง ซึ่งหนึ่งในหลายๆอย่างนั้นก็คือ การสั่งให้ raspberry pi เปิด web browser เมื่อ boot เสร็จ เพื่อให้เปิดหน้า web page ที่ต้องการให้แสดงผล

สิ่งที่สำคัญคือ ต้องเป็น RASPBIAN WHEEZY ส่วนเพราะอะไรนั่นผมก็ไม่ทราบเหมือนกัน สามารถดาวน์โหลดได้จาก Link

เริ่มจากการติดตั้ง Midori browser

sudo apt-get install midori

ติดตั้ง xset

sudo apt-get install x11-xserver-utils

จากนั้นก็เข้าไปแก้ไขไฟล์ autostart

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart

เพิ่มคำสั่ง

# Auto run the browser
@xset s off
@xset -dpms
@xset s noblank
@midori -e Fullscreen -a http://google.com

สุดท้ายก็ reboot

sudo reboot

แค่นี้ก็สามารถเปิด web browser เมื่อ boot เสร็จได้แล้ว

หลังจากห่างหายจากการเขียน Blog มานาน วันนี้เลยจะเสนอ Method ที่ผมเคยใช้งาน
สำหรับบางคนที่ ต้องการ Check ว่าโทรศัพท์เชื่อมต่อ Internet อยู่หรือเปล่า.


public boolean isOnline() {
ConnectivityManager ctm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return ctm.getActiveNetworkInfo() != null && ctm.getActiveNetworkInfo().isConnectedOrConnecting();
}

ค่าที่ได้จากการ return ของ method ก็จะเป็น true , flase
แค่นี้เราก็จะได้ method สำหรับ check การ Connect internet แล้วล่ะครับ

เนื่องจากอยู่กับ IOIO มานานแล้วเลยจัดโครงการ IOIO BOT ขึ้นเป็นโครงการสอนการเขียน Application Android พื้นฐาน และ Android for control IOIO board


วันนี้เป็นบทความ screen brightness ปกติเวลาจะปรับค่าความสว่างของหน้าจอ Android จะต้องทำผ่านการตั้งค่า แต่คราวนี้ จะมาลองเขียน Application เพื่อปรับค่าความสว่างของหน้าจอเองซะเลย

ก่อนอื่นเลยต้อง Create project ขึ้นมาก่อน 

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="109dp" android:layout_marginTop="50dp" android:text="Brightness Screen" /> <SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1" android:layout_marginTop="100dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/seekBar1" android:layout_alignLeft="@+id/textView1" android:layout_marginBottom="48dp" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" />
MainActivity.java
package com.NUrobot.brightnessscreen; import android.app.Activity; import android.content.ContentResolver; import android.os.Bundle; import android.provider.Settings.SettingNotFoundException; import android.provider.Settings.System; import android.util.Log; import android.view.Window; import android.view.WindowManager.LayoutParams; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; public class MainActivity extends Activity { private SeekBar brightbar; //Variable to store brightness value private int brightness; //Content resolver used as a handle to the system's settings private ContentResolver cResolver; //Window object, that will store a reference to the current window private Window window; private TextView txtPerc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); brightbar = (SeekBar) findViewById(R.id.seekBar1); txtPerc = (TextView) findViewById(R.id.textView2); //Get the content resolver cResolver = getContentResolver(); //Get the current window window = getWindow(); //Set the seekbar range between 0 and 255 brightbar.setMax(255); //Set the seek bar progress to 1 brightbar.setKeyProgressIncrement(1);try { //Get the current system brightness brightness = System.getInt(cResolver,System.SCREEN_BRIGHTNESS); } catch (SettingNotFoundException e) { //Throw an error case it couldn't be retrieved Log.e("Error", "Cannot access system brightness"); e.printStackTrace(); } //Set the progress of the seek bar based on the system's brightness brightbar.setProgress(brightness); //Register OnSeekBarChangeListener, so it can actually change values brightbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onStopTrackingTouch(SeekBar seekBar) { //Set the system brightness using the brightness variable value System.putInt(cResolver, System.SCREEN_BRIGHTNESS, brightness); //Get the current window attributes LayoutParams layoutpars = window.getAttributes(); //Set the brightness of this window layoutpars.screenBrightness = brightness / (float)255; //Apply attribute changes to this window window.setAttributes(layoutpars); } public void onStartTrackingTouch(SeekBar seekBar) { //Nothing handled here } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //Set the minimal brightness level //if seek bar is 20 or any value below if(progress<=20) { //Set the brightness to 20 brightness=20; } else //brightness is greater than 20 { //Set brightness variable based on the progress bar brightness = progress; } //Calculate the brightness percentage float perc = (brightness /(float)255)*100; //Set the brightness percentage txtPerc.setText((int)perc +" %"); } }); }}
AndroidMannifest.xml เพิ่ม permission 

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
คลิกขวา >> project >> Run as >> Android application

เรียบร้อย...


.apk file – Android application package file.

.dex file(Dalvik Executable File)  – นามสกุลที่เป็นนามสกุลแบบ Executable File หรือ เป็นไฟล์ที่สามารถ Run (ทำงาน) ได้ด้วยตัวมันเอง เปรียบเทียบได้กับ นามสกุล .EXE บน Windows ของเราๆ เนี่ยแหละ แต่มันเป็น Executable File ที่ทำงานบนระบบ JAVA Dalvik Virtual Machine (Davlik VM) นั่นเอง ซึ่งก็เป็นแกนหลักส่วนนึงของ Android หละครับ Compiled Android application code file.

.ODEX = Optimized Dalvik Executable File . . .ก็คือ ไฟล์ *.DEX ที่ถูกปรับประสิทธิภาพให้ทำงานได้รวดเร็วยิ่งๆ ขึ้นไป หรือ พูดศัพท์ภาษาอังกฤษ ก็คือ Optimize แล้วนั่นเอง

Activity คือส่วนของหน้า User Interface หนึ่งหน้าของ Android ซึ่งรวมไปจนถึงการจัดการต่างๆ ภายในหน้านั้นๆ ระหว่าง User กับตัว Application เช่นการควบคุม Button หรือ View ต่างๆ ของหน้า User Interface ที่ได้กำหนดไว้ใน Activity โดย User Interface อาทิ เช่น หน้าโทรออก, หน้าแสดงเว็บไซต์, หน้าแสดง Contact List, และอื่นๆ

Adb – Android Debug Bridge เป็นเครื่องมือที่ติดมาพร้อมกับตัว Android SDK(Software Development Kit) เพื่อที่จะใช้คำสั่งบางอย่างที่เกี่ยวข้องกับระบบของเครื่อง Android ?ที่เราใช้งานด้วย เนื่องจาก Android มีพื้นฐานมาจาก Linux ทำการเเก้ไขคำสั่งต่างๆต้องทำผ่าน Command Line เหมือนกับ Linux เช่นกัน

เราสามารถพูดได้อีกเเบบหนึ่งคือ ADB เป็นตัวเชื่อมระหว่างเครื่อง Android เเละคอมพิวเตอร์ที่เราใช้งานอยู่ เเละเราสามารถพิมพ์คำสั่งที่เกี่ยวกับระบบต่างๆที่ Command Line เพื่อเเก้ไข Android ของเรานั่นเอง

ADB สามารถทำอะไรได้บ้าง?

-  ติดตั้ง recovery image

-  ถอนการติดตั้งเเอพพลิเคชั่นของระบบที่ไม่สามารถลบได้ด้วยวิธีปกติ

-  รูทเครื่อง Android เพื่อให้ได้สิทธิในการเขียนข้อมูลลง system ของ Android

-  ดึงไฟล์จาก system ของ Android

-  ติดตั้งไฟล์ apk

-  จับภาพหน้าจอจากเครื่อง Android



Intent คือกลุ่มของข้อมูลที่เราสนใจ โดยเราสามารถส่งข้อมูลบางอย่างไปให้ Intent และสั่งให้ Intent ทำงานตามข้อมูลที่ได้รับได้ และเราสามารถสร้าง Intent สำหรับควบคุมข้อมูลเหล่านั้นได้เองต่างหาก

Context: เป็นข้อมูลต่างๆ ของ Application เพื่อให้ตัว Android Application สามารถเจาะจงได้ว่ากำลังใช้งาน หรือกำลังเปิดที่หน้าไหนอยู่ ปกติจะใช้ในรูปแบบ
o this ถ้าหากอยู่ใน Core Method ที่สามารถเรียก Class นั้นๆ ได้
o ClassName.this ถ้าหากอยู่ใน Method อื่นๆ หากต้องการจะเรียกใช้ Context ของ Class ที่กำหนดใช้งานอยู่
o getApplicationContext() เป็นการเรียก Context ซึ่งจะอยู่ตลอดตราบเท่า Application นั้นยังไม่ถูกปิด โดยจะต่างจาก Context แบบ Class ปกติคือ จะหายไปเมื่อทำการปิด หรือจบการทำงานของ Class นั้นๆ ไป

Permission: เป็นการกำหนดสิทธิของตัว Android Application ว่าสามารถทำอะไรได้บ้าง เช่น เชื่อมต่อ Internet, อ่านสถานะของการเชื่อมต่อ Network เป็นต้น

Database: ฐานข้อมูลสำหรับ Android โดยที่ตัว Android จะใช้ฐานข้อมูลชื่อ SQLite

Thread: คือ การทำงานในรูปแบบ Background โดยที่ตัว Application ก็ยังทำงานตามปกติ

debug.keystore: เป็นไฟล์สำหรับการทดลองพัฒนา Application บนเครื่องของเรา ซึ่งเวลาจะ Build File APK (File Application ของ Android) ตัว Project จะไปเรียกไฟล์ debug.keystore นี้ เพื่อทำการอ่านข้อมูลต่างๆ เช่น พวกวันหมดอายุของ Application, ข้อมูลผู้สร้าง Application เป็นต้น

keystore File: เหมือนกับ debug.keystore แต่จะเป็นไฟล์ที่ต้องใช้ในการ Build Application เพื่อนำไปลงทะเบียนใน Android Market

onCreate() — ถูกเรียกเมื่อ Activity ถูกสร้างครั้งแรก เป็น Method ซึ่งจะมีอยู่ทุก Activity หรือ Class ใน Android จะถูกเรียกใช้เมื่อมีการสร้าง Object หรือสร้าง Class นั้นๆ ขึ้นมา โดยส่วนใหญ่ใน onCreate จะเป็นการสร้าง Layout, Reference ID, กำหนด Event เป็นต้น
onStart() — ถูกเรียกเมื่อ Activity ปรากฎให้ User เห็น
onResume() — ถูกเรียกเมื่อ Activity เริ่มปฏิสัมพันธ์กับ User
onPause() — ถูกเรียกเมื่อ Activity ปัจจุบัน ถูกหยุดชั่วคราว และ Activity ก่อนหน้าทำงานต่อ
onStop() — ถูกเรียกเมื่อ Activity ไม่ปรากฏให้ User เห็นแล้ว
onDestroy() — ถูกเรียกเมื่อ Activity ถูกทำลายโดย system (แบบ manual หรือรักษา Mem)
onRestart() — ถูกเรียกเมื่อ Activity ถูกหยุดและ restart อีกครั้ง
Broadcast Receiver – คือส่วนที่จะรับเอา broadcast ต่างๆ มาทำงาน หรือส่ง broadcast นั้นต่อไป การ broadcast ที่ว่านี้ส่วนใหญ่จะเป็นของระบบเองที่ทำการ broadcast มา เช่น เมื่อเครื่องถูกชาร์จไฟ หรือมีการโทรเข้า หรือมีการรับข้อความ หรือจำนวนแบตตารี่ลดลง ถ้ามีเหตุการณ์ต่างๆ พวกนี้เกิดขึ้น ระบบก็จะทำการส่ง broadcast ไปให้รู้โดยทั่วกัน และถ้าในโปรแกรมเราต้องการนำค่าต่างๆ ที่ระบบ broadcast นั้นมาใช้งาน เราก็จะสร้าง Broadcast receivers นี่แหละขึ้นมารับเอาข้อมูลไปทำงาน หรือนอกจากนี้ก็ยังสามารถส่ง broadcast ที่สร้างขึ้นมาเอง ที่นอกเหนือจากที่ระบบมีไว้ก่อนหน้าและส่งไปได้ด้วย.

Content Provider เป็นส่วนของการจัดการข้อมูลต่างๆ ที่ถูกแชร์กันในระบบ ไม่ว่าข้อมูลนั้นจะอยู่ที่ไหนก็ตามจะเป็นไฟล์ของระบบ ใน database ที่อยู่ในระบบ หรือจะเป็นข้อมูลที่ถูกเก็บไว้ในเว็บ และสามารถที่จะแก้ไขข้อมูลต่างๆนั้นได้ ถ้า content provider นั้นให้สิทธิ ยกตัวอย่างเช่น ในระบบของ Android นั้นจะมี content providers ที่เห็นได้ชัดอยู่ตัวหนึ่งคือ content providers เพื่อจัดการข้อมูลของรายชื่อในโทรศัพท์ ทั้งนี้ก็เพื่อให้ app ที่เราเขียนขึ้นใช้งานข้อมูลดังกล่าวได้ผ่าน content provider นั้น นอกจากนี้ content provider ก็ยังสามารถจัดการข้อมูลที่ไม่ได้ทำการแชร์ไว้ แต่ในโปรแกรมเราเองได้อีกด้วย

Service คือส่วนการทำงานที่ไม่มีหน้าจอที่ติดต่อกับผู้ใช้ service นั้นจะทำงานอยู่ในส่วนของ background เช่น โปรแกรมเล่นเพลงต่างๆ ก็จะมีหน้าจอที่ติดต่อกับผู้ใช้ (นั้นคือส่วนของ activities) และเมื่อผู้ใช้เลือกเพลงเสร็จแล้วกดเล่น ไฟล์เพลงก็จะถูกเล่นโดยมีการทำงานแบบ services หลักจากผู้ใช้กด Back หรือ Home หน้าจอของเครื่องเล่นเพลง (activities) ก็จะถูกเก็บไป แต่ในส่วนของ services ที่เล่นเพลงนั้นก็ยังคงเล่นเพลงต่อไป

Dalvik - เป็น Virtual Machine พิเศษที่ออกแบบให้ใช้งานกับ Android เพื่อประหยัดพลังงานในการใช้แบตเตอร์รี่บนอุปกรณ์มือถือที่หน่วยความจำและซี พียูที่จำกัด

DDMS – Dalvik Debug Monitor Service เป็นเครื่องมือแบบ GUI สำหรับช่วย debug โปรแกรมบน  Android สามารถ capture screen, log dump, and process examination capabilities. ถ้าพัฒนาโดยใช้ Eclipse ต้องใช้ ADT Plugin

Drawable resource รวบรวมภาพที่สามารถนำมาใช้เป็นพื้นหลังชื่อหรือส่วนอื่น ๆ ของหน้าจอ drawable ถูกโหลดโดยปกติจะเป็นอีกองค์ประกอบ UI

Layout Resource An XML file that describes the layout of an Activity screen.

OpenGL ES  libraries, complex 3D images. It is harder to use than a Canvas object, but better for 3D objects.

Surface เป็นตัวจัดการระบบแสดงผล และควบคุมบนจอภาพ.

SurfaceView สำหรับวาดรูปภาพ

View ใช้สร้างองค์ประกอบของหน้าจอ Application ที่เราต้องการ

Viewgroup = เป็นกลุ่มของชุดคำสั่งที่เกี่ยวกับการจัดการโครงสร้างของหน้าจอที่แสดงผลในส่วนที่ติดต่อกับผู้ใช้งาน (User Interface)

Widget ชุดคำสั่งโปรแกรมคอมพิวเตอร์ขนาดเล็ก หรือ โปรแกรมสำหรับการควบคุมในการทำงานของเครื่องคอมพิวเตอร์ ในแบบต่าง ๆ  เช่น เป็นหน้าต่าง เล็ก ๆ (windows),(popup) เพื่อให้ผู้ใช้สามารถควบคุมหรือ สั่งการเครื่องคอมพิวเตอร์ให้ทำงาน ในรูปแบบต่าง ๆ เช่น  เรียกใช้งานเครื่อง คิดเลข ในวินโดวส์ ลีนุกซ์ หรือ โอเอสทู เป็นต้น โดยที่สามารถสั่งงานให้ โปรแกรมย่อย ๆ เหล่านั้นทำงานด้วยการกดปุ่มคำสั่ง ด้วยเมาส์ แทนการพิมพ์ ชุดคำสั่ง ซึ่งผู้ใช้งานสามารถติดต่อสื่อสารกับเครื่องคอมพิวเตอร์ได้อย่างสะดวกง่ายดาย     (คำว่า  Widget  มาจากคำภาษาอังกฤษว่า  gadget)

rom << คือตัว OS ที่ใช้ในมือถือเราครับ เหมือนwindows หรือlinux ตอนนี้ที่มีให้โหลดกันก็เต็มไปหมด ทั้ง hero cyanogen jf หรือแม้กระทั่งตัว originalจากทาง googleเอง และต่อไปก็คงมีอีกเยอะ จากค่ายต่างๆที่พัฒนากันขึ้นมาครับ
วิธีดูว่าromตัวนั้นจะลงกับเครื่องเราได้หรือเปล่า
หลักๆเชคก่อนว่า romนั้นสร้างมาเพื่อเครื่องรุ่นไหน G1 Magic Hero หรืออื่นๆ
ถ้าMagic ก็อาจต้องดูอีกว่าเป็น PVT32a หรือ32b

Rom มันจะอัพได้ไม่ได้ ก็ดูตามที่เค้าเขียนว่ารุ่นนี้ support สำหรับboardอะไร รุ่นไหนก็พอแล้วครับ
แล้วก็Romแต่ละตัวมันมีความต่างที่ FWที่เค้าเอามาMod แล้วก็ผู้Modครับ
อย่างที่เห็นหรือเคยได้ยินกันมาก็คงเป็น Original JesusFreak(JF) Cyanogen(CM) Hero(แปลงมาลงmagic) MyHero(แปลงมาลงเมจิกอีกเหมือนกัน) โดยHeroและMyHeroเนี่ยมันก็ต่างกันที่คนที่เอามาModครับ
ซึ่งผมอยากบอกว่านี่แหละครับความน่าปวดหัวของ Android…มันไม่จบ ไม่รู้ว่าอันไหนดีที่สุด ตัวเลือกเยอะเกิน…แต่มันจะเหมาะมากสำหรับพวก Advance ที่เอาromต่างๆเนี่ยมาโมเป็นที่เค้าต้องการได้เอง เรียกว่าโคตร customizeเลยล่ะ

cupcake, donuts, eclaire << เป็นseries ของFirmware ของandroidนะครับ 1.5 1.6 2.0 ตามลำดับ google เค้าวางชื่อของFirmwareต่างๆตามตัวอักษรและชื่อขนมนะครับ โดยเคยมีคนแซวว่า ชื่อขนมที่นานๆขึ้นไปก็จะมีcalories ที่สูงขึ้น และกินทรัพยากรเครื่องสูงขึ้นตามไปด้วยครับ ^^

market << เหมือน app storeของappleครับ เอาไว้browseหาโปรแกรมกว่าหมื่นตัวทั้งฟรีและไม่ฟรีครับ โดยพวกเราจะไม่เห็นของเสียตังค์นะครับ ต้องใช้ MarketEnabler ในการเซทค่าหลอกเครือข่ายว่าเราอยู่เมหาหรือยุโรปซะก่อนถึงจะเห็นครับ

android sdk << (เรียกย่อๆกันว่า sdk) ชุดdevelop kit จากทาง google ที่ออกมาให้นักพัฒนาเค้าเอาไปใช้เขียนโปรแกรมครับ ซึ่งใน sdkนี้ ก็จะประกอบด้วยไฟล์หลายๆอย่างที่คนที่ไม่ใช่นักพัฒนาควรต้องมีไว้เช่น driverของandroid หรือ adb หรือ fastboot ซึ่งจะถูกกล่าวต่อไปข้างล่างนี้ ข้อมูลและdownload android sdkเข้าไปได้ที่

http://android-developers.blogspot.com/index.html

สรุปคำจำกัดความให้ง่ายต่อความเข้าในของมือใหม่ SDK มันก็คือ toolsตัวนึงสำหรับติดต่อจากpc ไปยังมือถือครับ

root << เป็นการhackเครื่องให้สามารถรันคำสั่งระดับ SU(super User)ได้ โดยบางโปรแกรมต้องการเครื่องที่rootแล้ว เพื่อสามารถaccessข้อมูลบางอย่างที่ถูกจำกัดเอาไว้ให้ระดับsuเท่านั้นที่ เข้าถึงได้ครับ เช่น การเปลี่ยนผู้ให้บริการเครือข่ายหลอกmarketให้สามารถโหลดappเสียตังค์ได้ หรือการbackupข้อมูลของเครื่อง โดยการrootนี้สามารถทำได้ทั้งเครื่องในและเครื่องนอกครับ

bricked << ก้อนอิฐ แปลกันตรงๆตัวเลย คือเมื่อไหร่ที่เครื่องคุณบริกแล้ว มันก็คือก้อนอิฐสำหรับทับกระดาษนั่นเอง เพราะมันเจ๊งไปเรียบร้อย คนจะกลัวที่สุดก็ไอ่ตัวนี้แหละ โดยการบริกอาจเกิดได้จากหลายสาเหตุ เช่นเอาromไปใช้ผิดเครื่อง update recoveryไม่สำเร็จ ฯลฯ แต่ถ้าอ่านรายละเอียดให้ดีๆ การบริกนี้ก็ไม่ได้เกิดขึ้นง่ายขนาดนั้นหรอกครับ :D

fastboot << เป็น toolsเอาไว้สำหรับการสั่งรันcommandต่างๆจากเครื่องpc เข้ามือถือ โดยชุดcommand มันจะคนละตัวกับ adb ทำได้ด้วยการรันfastbootบนมือถือ(voldown+power จะเข้าหน้าจอขาวๆ และกด back เพื่อเข้าfastboot usb mode) และcommand คำสั่งผ่าน pc (โดยเราต้องมี androidsdkก่อน และรัน all programs>accessories>command prompt ไปยังfolder androidsdkที่เราทำการ unzipไว้ และเข้าไปfolder tools และทำการรันcommand ต่างๆผ่าน(เช่น fastboot boot recovery.img ซึ่งจะเป็นการบูทเครื่องโดยใช้ข้อมูลจาก recovery.img) คำสั่งต่างๆที่เห็นจากเวปก็เป็นfastbootตัวนี้แหละครับ
ตัวอย่างชุดคำสั่ง
fastboot boot recovery.img
fastboot flash recovery.img
fastboot reboot
โดยคำสั่งเหล่านี้จะได้ได้จาก cmd และมือถือต้องรันในโหมด fastboot usb
สำหรับคนที่เกิดปัญหาทำไรกะเครื่องแล้วเอ๋อ เจ๊ง เปิดไม่ได้ ก็ให้จำอันคำนี้ไว้ครับ “ตราบใดที่ยัง fastbootได้ เครื่องก็จะยังไม่brickครับ” จากคุณ @sugree เพราะมันยังสามารถรันตัวอื่นไปทับได้อยู่เสมอครับ

adb << รันคำสั่ง linux เข้ามือถือเรา เพราะandroidได้ถูกพัฒนามาบนระบบปฎิบัติการlinux เลยใช้คำสั่งของlinuxในการcommandต่างๆ เช่น
adb push fonts /system/fonts << สั่งup fonts เข้ามือถือ
โดยการใช้คำสั่งนี้เราต้องการ android sdkเช่นเดียวกับ fastboot

เพิ่มเติม fastboot และ adb >> ถ้าเราต้องการcommand ไฟล์เข้าไปมือถือ เช่น fastboot bootrecovery.img ไฟล์ที่ต้องการ(recovery.img)นั้นต้องอยู่บนpc นะครับ ผมเสียเวลาไปหลายชม.จากเรื่องง่ายๆนี้ เพราะในบอร์ดต่างประเทศมันบอกว่าให้เอาไปใส่ SD cardกันหมดเลย T^T

วิธีการupdate recovery

http://forum.xda-developers.com/showthread.php?t=529019

recovery << เอาไว้สำหรับ back up, resetเครื่อง, flash romตัวใหม่ หรืออื่นๆอีกหลายอย่าง ตามแต่ recovery version ที่เราflashเข้าไป โดยเข้าไปที่recoveryได้โดยกด home+powerค้างไว้จนกว่าสัญลักษณ์เครื่องจะติดจึงปล่อยได้
ตัวอย่างของ recovery image >> cyanogen recovery image (cm-recovery.img) และ RAv1.2.1H.img
update.zip << ถ้าเป็น recovery เก่าๆที่ยังไม่สามารถอ่านไฟล์หรือรมออื่นนอกเหนือจาก update.zipได้ ก็ต้องทำการrenameรอมที่เราต้องการใช้เป็นupdate.zip เช่น เรามีรอมฮีโร่ที่ต้องการflash ชื่อhero.zip ก็ต้องทำการเปลี่ยนเป็น update.zip ให้recoveryนี้หาไฟล์เจอ แต่ปัญหานี้ได้ถูกแก้ไขใน recovery เวอร์ชั่นใหม่แล้ว ไม่ต้องrenameก็อ่านเจอ
nandroid << เป็นตัวสำหรับ backupขอ้มูลทั้งหมดในเครื่องเรา ในกรณีฉุกเฉินที่เครื่องจะตายแล้ว ก็restoreกลับไปstageเติมที่เราได้ทำการ backupไว้นี้เอง
wipe data/factory reset << ในการ flash rom หรือ updateอะไรต่างๆ เราอาจต้อง wipe data ทั้งหมดในเครื่องทิ้งก่อน โดยการเข้ามาทำใน recoveryเนี่ยแหละครับ

radio << เป็นเวอร์ชั่นของสัญญาณ โดยการทำงานทั้งหมดandroid จะรันบนradioอีกที

partition << การทำpartitionของandroidนี่จะเป็นการทำpartitionเหมือนกับlinuxครับ จุดประสงค์หลักในการแบ่งนี้มาจากการที่คนต้องการให้Appทั้งหลายมันไปรันบนsd cardแทนที่จะเป็นบนเครื่องครับ(ที่มันน้อยยย)
การทำpartition ก็สามารถทำได้ดังนี้

ต้องใช้ adb shell ช่วยครับ แล้วก็ต้องรันadbจากหน้า recoveryด้วยนะครับ

SPL HBOOT << จะได้ยินตัวนี้เสมอเมื่อต้องการupdate rom หรือว่าทำอะไรสำคัญๆกับตัวเครื่อง โดยข้อมูลของHBOOTเครื่องเราจะสามารถเข้าไปดูได้ด้วยการกด vol-down + power สำหรับ magic นะครับ (ของรุ่นอื่นฝากเข้ามาบอกกันด้วยครับ) ขอย้ำนะครับว่าตัวนี้สำคัญ เชคให้ดีๆ โดยเฉพาะ PTV32A 32B เสี่ยงเป็นเสี่ยงตายต่อการbrickมาก

a2sd << มันย่อมาจาก app to SD คือการinstall app ไปลง sd cardนั่นเอง เพราะโดยdefault แล้วandroidมันจะinstall appทั้งหมดลง c: ซึ่งใน G1 มันมีพื้นที่ตรงนี้น้อยมาก เลยทำให้เหล่านักพัฒนาหาทางแก้โดยจับเอาโปรแกรมเหล่านี้ไปรันบน SD cardซะเลยโดยในcyanogen rom เค้าจะทำfunctionนี้มาให้เรียบร้อยแล้วครับ

สิ่งที่พัฒนาเรื่อยๆและต้องคอยupdate
recovery
spl hboot
rom
Three address instructions
- จะมี 2 ตัวถูกดำเนินการ และ 1 ตัวเป้าหมาย
- เราจะเรียกสิ่งนี้ว่า "General register organization"
Ex  X = (A+B) * (C+D)
add t0 ,A ,B # Temp t0 = A+B
add t1 ,C ,D # Temp t1 = C+D
mul X ,t0 , t1 # X = t0*t1

Two address instructions
- ตัวเป้าหมายจะเป็นตัวเดียวกับตัวดำเนินการตัวแรก
Ex  X = (A+B) * (C+D)
mov t0 ,A # Temp t0 = A
add t0 ,B # t0 = t0+B
mov t1 ,C # Temp t1 = C
add t1 ,D # t1 = t1+D
mul t0 ,t1 # t0 = t0*t1
mov X ,t0 # X = t0

One address instructions
- ใช้ AC ในการจัดการข้อมูลทุกๆข้อมูล
Ex  X = (A+B) * (C+D)
load A # AC = A
add B # AC = AC+B
store t0 # Temp t0 = AC
load C # AC = C
add D # AC = AC+D
mul t0 # AC = AC*t0
store X # X = AC




Zero address instructions
- นำ stack มาใช้ โดยมี 2 ตัวดำเนินการคือ pushและ pop
Ex  X = (A+B) * (C+D)
push A # TOS<=A
push B # TOS<=B
add  # TOS<=(A+B)
push C # TOS<=C
push D # TOS<=D
add  # TOS<=(C+D)
mul  # TOS<=(C+D)*(A+B)
pop X # X=TOS

เว็บอ้างอิง : http://www.slideshare.net/sanjeevpatel4x/instruction-format