嵌入式系統與 Android系統 Embedded System & Android 楊昌益
Android核心編譯 Ubuntu linux ver.10 HD space >16GB Android系統需三個系統檔 u-boot Linux核心zImage Android系統檔 2018/9/17
安裝Toolchain $mkdir linux_system $cd linux_system Copy CD之/Android1.6/cross_compiler/4.3.1-eabi-armv6-20080707.tar.bz2 $tar jxvf 4.3.1-eabi-armv6-20080707.tar.bz2 $su input password 2018/9/17
#mkdir /usr/local/arm #cp –rf 4.3.1-eabi-armv6 /usr/local/arm/ #exit $export CCACHE_PATH=/usr/local/arm/4.3.1-eabi-armv6/usr/bin-ccache:$CCACHE_PATH (can put it into .bashrc to accelerate compiling) export PATH=$PATH:/usr/local/arm/4.3.1-eabi-armv6/usr/bin:/usr/local/arm/4.3.1-eabi-armv6/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/4.3.1-eabi-armv6/mpfr/lib:/usr/local/arm/4.3.1-eabi-armv6/gmp/lib:/usr/local/arm/4.3.1-eabi-armv6/lib 2018/9/17
安裝Linux kernel Copy CD之/Android1.6/kernel/dma6410xp-linux-2.6.27_100205.tar.bz2 to ~/linux_system $tar jxvf dma6410xp-linux-2.6.27-100205.tar.bz2 $cd dma6410xp-linux-2.6.27 2018/9/17
$make zImage (a new zImage in ./arch/arm/boot) $make dmatek6410_android_defconfig (to produce a new .config for platform) $make clean $make zImage (a new zImage in ./arch/arm/boot) 2018/9/17
Update Java tools $sudo apt-get update (“Enter”, input password) $sudo apt-get install sun-java6-jdk (ask “確定”,press TAB+SPACE $sudo apt-get install flex $sudo apt-get install bison $sudo apt-get install gperf $sudo apt-get install libsdl-dev $sudo apt-get install libesd0-dev 2018/9/17
$sudo apt-get install libwxgtk2.6-dev $sudo apt-get install zlib1g-dev $sudo apt-get install build-essential $sudo apt-get install libncurses5-dev (or sudo ./dmatek_ubuntu.sh) 2018/9/17
安裝Android file system Copy CD之/Android1.6/Android/dma6410xp_android_source_100205.tar.bz2 to ~/linux_system $tar jxvf dma6410xp_android_source_100205.tar.bz2 $cd dma6410xp_android_source 2018/9/17
Open .bashrc to add $source ~/.bashrc export SEC_PRODUCT=generic export SEC_OUTDIR=~/linux_system/dma6410xp_android_source/android_source/filesystem export PATH=~/linux_system/dma6410xp_android_source/script:$PATH $source ~/.bashrc 2018/9/17
$cd linux_system/dma6410xp_android_source/android_source $build_android.sh (needs about 2 hours) $ls –al filesystem/ (you can find ramdisk-uboot.img system.img and userdata.img 3 files) 2018/9/17
$cd. /busybox (Android includes only the basic linux instructments $cd ../busybox (Android includes only the basic linux instructments. Busybox can be inserted if you need the whole linux instructments) $cp –af _install/bin/busybox ../android_source/out/target/product/generic/system/bin $cd ../android_source $build_pre.sh $build_android.sh 2018/9/17
Burn-in image files Burn-in linux kernel and Android file Connect platform with PC by using UART0 Open ASCII Terminal in Windows PC and set 115200,N,8,1,No flow control. Power on platform and hit the space in Terminal 2018/9/17
2018/9/17
Check your PC’s IP address Type “pri” in ASCII Terminal to check ipaddr & serverip Type “setenv ipaddr xx.xx.xx.xx” to set your own IP Type “setenv serverip yy.yy.yy.yy” to set tftp server ip Type “saveenv” to save information 2018/9/17
Run tftpd32.exe in your PC Set correct directory 2018/9/17
Connect platform with PC by using Ethernet In ASCII Terminal, type “tftp 0x50008000 zImage;nand erase 0x600000 0x300000;nand write 0x50008000 0x600000 0x300000 Type “tftp 0x50008000 ramdisk-uboot.img; nand erase 0x900000 0x100000;nand write 0x50008000 0x900000 0x100000 2018/9/17
Type “tftp 0x50008000 system.img; nand erase 0xa00000 0x4300000;nand write.yaffs 0x50008000 0xa00000 0x{filesize} Type “tftp 0x50008000 userdata.img; nand erase 0x6100000 0x1f00000;nand write.yaffs 0x50008000 0x6100000 0x840 2018/9/17
How to write an Android program Hello World Execute “eclipse.exe” in Windows PC Open new project 2018/9/17
2018/9/17
2018/9/17
2018/9/17
“File”->”Restart” (error can be cancelled) Press right-hand button on the mouse in the “Hello World”project 2018/9/17
2018/9/17
2018/9/17
Some features on Eclipse 2018/9/17
2018/9/17
2018/9/17
2018/9/17
2018/9/17
程式中加除錯訊息 透過「Log」函式,在程式碼中加入一個自訂的「記錄點」或「檢查點」 「LogCat」工具查看記錄 2018/9/17
android.util.Log Log.代號(String tag, String msg); Ex: Log.v (VERBOSE) :詳細訊息 Log.d (DEBUG) :除錯訊息 Log.i (INFO):通知訊息 Log.w (WARN): 警告訊息 Log.e (ERROR) :錯誤訊息 Ex: Log.i(“Hello_info”, “測試除錯訊息”) 2018/9/17
2018/9/17
Eclipse快速鍵 自動補齊函式名稱 將程式碼變成註解 自動import類別 函式或變數自動更正 Alt+/ Ctrl+/ Ctrl+Shift+o 函式或變數自動更正 Ctrl+1 2018/9/17
程式運作模型 Java Code R.java Res files Android Package .apk 編譯程式 Task / Process (Application) 安裝程式 2018/9/17
程式目錄架構 2018/9/17
Activity生命週期 應用程式存在與否不是由應用程式本身所自行決定,而是由Android系統透過運行機制決定 2018/9/17
2018/9/17
public void onCreate(){ } public void onStart(){ } public void onResume(){ } public void onPause(){ } public void onStop(){ } public void onRestart(){ } public void onDestroy(){ } Activity 生命週期由「Create」狀態開始,由「Destroy」狀態結束 Create時分配資源,銷毀(Destroy)時釋放資源 2018/9/17
android.app.Activity View findViewById(int id) final CharSequence getTitle() final int getTitleColor() void setTitle(int titleId) / void setTitle(CharSequence title) void setTitleColor(int textColor) void setContentView(int layoutResID) 將layout資源設定呈現在Activity內容中 void finish() :結束Activity 2018/9/17
XML資源文件 strings.xml 2018/9/17
<?xml version="1.0" encoding="utf-8"?> <resources> 版本 編碼方式 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, hello!</string> <string name="app_name">HelloWorld</string> <string name="test">字串測試</string> </resources> 資源檔的開始 字串標籤 字串名稱 字串內容 資源檔的結束 2018/9/17
文字資源使用方法 Java CharSequence str_var1=getResources().getString(R.string.hello); setTitle(str_var1); XML android:text="@string/hello" 引用文字字串 字串名稱 2018/9/17
文字顏色 <color> <color name=“red">#FF0000</color> R:紅色 G:綠色 B:藍色 A:透明度(0:透明 FF不透明[預設]) 16進位表示 #RGB #ARGB #RRGGBB #AARRGGBB 2018/9/17
文字顏色資源使用方法 Java XML int r = getResources().getColor(R.color.red); setTitleColor(r); XML android:textColor="@color/red" 2018/9/17
繪圖元件顏色<drawable> <drawable name="red">#F00</drawable> Java Drawable red =getResources().getDrawable(R.drawable.red); XML android:background="@drawable/red" android:foreground="@drawable/green" 2018/9/17
尺寸<dimen> <dimen name="ten_pixel">10px</dimen> In : 英吋 mm : 公釐 pt : 一點為1/72英吋 dp/dip : 160dpi螢幕的一個像素 sp : 隨螢幕尺寸改變的一個像素 2018/9/17
尺寸資源使用方法 Java float dim=getResources().getDimension(R.dimen.ten_pixel); XML android:textSize="@dimen/ten_pixel" 2018/9/17
<style> <?xml version="1.0" encoding="utf-8"?> <resources> <style name="myStyle"> <item name="android:color">@color/r</item> <item name="android:foreground">@drawable/blue</item> <item name="android:background">@drawable/green</item> <item name="android:textColor">@color/g</item> <item name="android:textSize">@dimen/ten_pixel</item> </style> </resources> 2018/9/17
style資源使用方法 XML Java setTheme(R.style.myStyle); android:theme="@style/myStyle" 2018/9/17
元件佈局 main.xml 2018/9/17
2018/9/17
2018/9/17
佈局方式 LinearLayout RelativeLayout TableLayout FrameLayout 2018/9/17
LinearLayout 線性佈局 標籤:< LinearLayout >,可多層LinearLayout 屬性 android:gravity (元件對齊方式,多個值用|隔開) top, bottom, left, right, center_vertical fill_vertical ,center_horizontal ,fill_horizontal center ,fill 2018/9/17
LinearLayout 屬性 android:orientation (線性方式) android:layout_width (寬度) horizontal vertical android:layout_width (寬度) fill_parent wrap_content 指定大小 android:layout_heigh (高度) 2018/9/17
邊界屬性 android:layout_marginBottom 元件與底部邊線的距離 android:layout_marginLeft 元件與左邊線的距離 android:layout_marginRight 元件與右邊線的距離 android:layout_marginTop 元件與上邊線的距離 2018/9/17
padding屬性 android:padding android:paddingBottom android:paddingLeft 設定四個邊框與元件或文字的距離 android:paddingBottom 設定底部邊框與元件或文字的距離 android:paddingLeft 設定左邊框與元件或文字的距離 android:paddingRight 設定右邊框與元件或文字的距離 android:paddingTop 設定上邊框與元件或文字的距離 LinearLayout margin Button padding 2018/9/17
How to use the LinearLayout to finish the following GUI? 2018/9/17
Method 1 First step 2018/9/17
Modify xml file 2018/9/17
Method 2 2018/9/17
2018/9/17
2018/9/17
2018/9/17
2018/9/17
2018/9/17
RelativeLayout 相對佈局:可指定元件或佈局對齊任一個元件或佈局 屬性 標籤:<RelativeLayout> android:layout_above:將此元件放置在指定ID元件之上 android:layout_above="@id/edit" android:layout_alignBaseline:將此元件的基準線放置在與指定ID元件相同基準線上 android:layout_alignBottom:底部基線 android:layout_alignLeft:左邊線 android:layout_alignParentBottom true:底部基線與主佈局底部基線對齊 android:layout_alignParentLeft true:左邊線與主佈局左邊線對齊 2018/9/17
RelativeLayout 屬性 android:layout_alignParentRight true:右邊線與主佈局右邊線對齊 android:layout_alignParentTop true:上邊線與主佈局上邊線對齊 android:layout_alignRight :將此元件的右邊線放置在與指定ID元件相同右邊線上 android:layout_alignTop:上邊線 android:layout_below :將此元件的上邊線放置在指定ID元件之下 android:layout_centerHorizontal true:將此元件放置於於主佈局的水平置中 2018/9/17
RelativeLayout 屬性 android:layout_centerInParent true:將此元件放置於於主佈局的垂直和水平置中 android:layout_centerVertical true:將此元件放置於於主佈局的垂直置中 android:layout_toLeftOf :將此元件的右邊線放置在與指定ID元件的左邊 android:layout_toRightOf :將此元件的左邊線放置在與指定ID元件的右邊 2018/9/17
其它重要屬性 android:layout_marginBottom android:layout_marginLeft android:layout_marginRight android:layout_marginTop android:layout_width android:layout_heigh … 2018/9/17
How to use RelativeLayout to finish the following GUI 2018/9/17
2018/9/17
2018/9/17
元件 2018/9/17
View TextView ViewGroup EditText Button ViewGroup CheckBox ImageView ImageButton ToggleButton CheckBox RadioButton ViewGroup AdapterView FrameLayout LinearLayout RelativeLayout ListView Spinner Gallery TableLayout 2018/9/17 76
Android API提供的元件 TextView Button ToggleButton ImageButton RadioButton CheckBox … 2018/9/17
TextView 文字元件,顯示文字 標籤:< TextView> 屬性 android:autoLink:讓文字上的連結自動變成可點擊的連結 none web email phone map all 2018/9/17
TextView 屬性 android:gravity:文字對齊方式 android:height android:width android:typeface:字體 normal sans serif monospace android:textStyle bold italic 2018/9/17
TextView 屬性 android:textSize :文字大小 android:textColorLink :連結顏色 android:textColorHighlight :選取文字的顏色 android:textColor :文字顏色 android:singleLine :單行或多行 (true false) android:password: (true false) android:phoneNumber: 電話號碼 (true false) 2018/9/17
TextView 屬性 android:numeric android:lines integer signed decimal android:lines android:hint :當Text是空的時候,就會顯示hint中的文字 android:textColorHint android:digits:除接受數字外,允許此欄位設定的字元 跳脫字元需使用'\\;' android:digits="1234567890.+-*/%\\n()" 2018/9/17
EditText 可輸入文字元件 標籤:< EditText> 繼承TextView,其所具有屬性請參考TextView 2018/9/17
Button 按鈕 標籤:< Button> 繼承TextView,其所具有屬性請參考TextView 2018/9/17
ToggleButton on / off 按鈕 標籤:<ToggleButton> 屬性 android:textOn 開啟時所顯示的文字 android:textOff 關閉時所顯示的文字 android:checked 初始時是選取或未選取 (true, false) 2018/9/17
RadioButton 單選按鈕 標籤:< RadioButton > 多選一時,需在多選的RadioButton標籤外,加上<RadioGroup> RadioGroup屬性請參考佈局屬性 android:orientation 垂直或水平排列 2018/9/17
CheckBox 複選按鈕 標籤:< CheckBox > 屬性請參考TextView 屬性 android:checked 初始時是選取或未選取 (true, false) 2018/9/17
ImageButton 標籤:< ImageButton > 圖片按鈕 屬性 android:src 按鈕上的圖片或色彩 android:adjustViewBounds 調整圖片大小以符合按鈕大小 android:cropToPadding 剪裁圖片配合按鈕大小 android:scaleType 控制圖片大小或位置 matrix、fitXY、fitStart、fitCenter、fitEnd、center、centerCrop、centerInside 2018/9/17
DatePicker 年月日元件 標籤:< DatePicker> 屬性 android:startYear 可選起始年份 android:endYear 可選結束年份 2018/9/17
TimePicker 時間挑選元件 標籤:< TimePicker> 2018/9/17
ListView 標籤:< ListView> 條列式選單 屬性 android:choiceMode 選擇模式 none 正常條列式選單 multipleChoice 多選 singleChoice 單選 android:entries="@array/data“ 選單中的選項,引用陣列 android:divider 分隔線顏色 android:dividerHeight:分隔線高度 2018/9/17
Spinner 下拉式選單 標籤:< Spinner> <Spinner android:id="@+id/S1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:entries="@array/data" /> 2018/9/17
private static final String[] data= new String[]{“5”, “2”, “3”, “4”}; Spinner sp=(Spinner)findViewById(R.id.S1); sp.setAdapter(new ArrayAdapter<String>( this,android.R.layout.simple_spinner_item,data)); 2018/9/17
練習 ─ 排版 請排版成右圖 性別: 男 女 身高: Radio button EditText Spinner包含公尺和公分 計算 2018/9/17 TextView
事件 2018/9/17
View 介面-- OnClickListener 設定元件觸發事件 程式需實作OnClickListener implements OnClickListener 程式中需實作函式onClick(View v) 當按下元件時會執行onClick函式 View v表示觸發這個事件的元件 Button bt=(Button)findViewById(R.id.btn1); bt.setOnClickListener(this); this,表示要在目前這個class(程式)中,實作事件介面 public void onClick(View v) { … } 2018/9/17
Example: Layout: 2018/9/17
2018/9/17
Source java 2018/9/17
2018/9/17
練習 ─ 標準體重計算 根據以下公式計算標準體重 顯示標準體重範圍 性別: 男 女 身高: 男性的標準體重 = [ 身高 ( 公分 ) - 80 ] × 0.7 女性的標準體重 = [ 身高 ( 公分 ) - 70 ] × 0.6 體重比標準體重多百分之十或少百分之十以內均屬於正常範圍 Radio button 性別: 男 女 Spinner包含公尺和公分 身高: EditText 計算 Button 顯示標準體重範圍 2018/9/17 TextView
2018/9/17
Some example for source code 2018/9/17
Installation 2018/9/17
Connecting mobile first time HTC Hero as example Connect HTC using USB cable From “控制台” ->”新增硬體精靈” in windows XP 2018/9/17
2018/9/17
2018/9/17
2018/9/17
Installation executing “ddms.bat” from “android-sdk-windows” In HTC, “設定”->”應用程式”->”未知的來源”設定成”ˇ” In HTC, “設定”->”應用程式”->”開發”選”USB除錯中”和”保持喚醒”設定成”ˇ” In windows XP, please install the following package if your PC connects HTC first time. 2018/9/17
Check USB device in HTC has been “掛載” (在”手機狀態欄”下拉選單) Check “HTC Sync\HTCSync” file in microSD card Execute HTCSync 2018/9/17
Install application In Eclipse, “run as” or “debug as” android application and select your device (emulator or mobile station). 2018/9/17
APK In Eclipse 2018/9/17
2018/9/17
2018/9/17
2018/9/17
2018/9/17
2018/9/17
2018/9/17