1. MOBILE PROGRAMMING
Lập trình trên thiết bị di động
2/9/2012 Huỳnh Công Thịnh – congthinh@ptithcm.edu.vn 1
2. TẠI SAO NÊN THEO NGÀNH NÀY?
Tháng 7/2008, Apple ra mắt AppStore. Đến nay, App Store
đã có hơn 400,000 ứng dụng với 10 tỷ lƣợt tải về, dẫn đầu
ngành về dịch vụ ứng dụng cho di động.
Ovi Store của Nokia, Android Market của Google, App World
của Blackberry , Huawei Technology.
2/9/2012 2
3. TẠI SAO NÊN THEO NGÀNH NÀY?
AppStore: 400,000 ứng dụng với 10 tỉ lƣợt tải về
OviStore: 55,000 ứng dụng, 760 triệu download
Android Market: 200,000 ứng dụng, 4,5 tỉ download
App World: 30,000 ứng dụng, 3 triệu download/ngày
Huawei Technology: 80.000 ứng dụng
$ = 7 tỷ USD >>> 30 tỷ USD trong 3 năm tới
2/9/2012 3
4. CÁC MOBILE OS
iOS
Android
Tizen
Windows Phone 7
Blackberry OS & Qnx
WebOS
MeeGo
Symbian.
2/9/2012 4
9. GIAO DIỆN NGƯỜI DÙNG
Lấy ứng dụng làm trung tâm.
Mọi biểu tƣợng ứng dụng có thể di
chuyển hoặc xóa đƣợc.
Nổi bật với các Widget.
Notification bar…
2/9/2012 9
10. ANDROID, IOS, WINDOWS PHONE…
Sự kết hợp phần cứng và phần mềm
hoàn hảo.
Màn hình thoáng đãng với các biểu
tƣợng ứng dụng dàn ngay hàng thẳng
lối rõ ràng.
11 màn hình chính.
Nâng cấp với Notification bar.
2/9/2012 10
11. ANDROID, IOS, WINDOWS PHONE…
Thay vì lấy ứng dụng làm trung tâm,
nhƣ với các nền tảng iOS và Android,
Microsoft sử dụng khái niệm mới,
gọi là hub (trung tâm), để tổ chức
nội dung trong Windows Phone 7.
Mỗi hub là một bộ sƣu tập các ứng
dụng cùng nhóm.
2 màn hình chính.
2/9/2012 11
16. GOOGLE ANDROID
Là gì ?
Open Source OS
Linux kernel (2.6)
Mobile platform (smartphone)
Liên minh OHA (Open Handset Allien): HTC, LG, Samsung,
Motorola, T-Mobile, Sprint, NVIDIA, Intel, Broadcom, Qualcom,…)
17. GOOGLE ANDROID
Có gì nổi bật ?
Full web (Html/html5, javascript, flash)
Game 2D/3D
Đa điểm (Multi touch)
Đa luồng (Multi thread)
Wifi, 3G, GPS, Sensor,…
Media (Video fullHD, MPeg4, H.264, Mp3, Acc, Ogg,…)
18. GOOGLE ANDROID
Lịch sử phát triển:
Google mua Android Inc 17-8-2005
Ra mắt cộng đồng tháng 11-2007, thành lập OHA
(Open Handset Allien)
Phiên bản 1.0 ra mắt tháng 9-2008, T-Mobile G1
Phiên bản 1.1 ra mắt tháng 2-2009
21. GOOGLE ANDROID
Thị phần (Toàn cầu)
Thị phần Android toàn cầu
Android
150 triệu điện thoại 34% 40% iOs
Phone 7
500.000 lƣợt active/ngày
Others
2% 24%
22. GOOGLE ANDROID
Thị phần (Việt Nam)
Thị phần Android tại Việt Nam
2.93
200.000 android device 2.32 0.52
0.36
5.39
Android
5 triệu vào năm
2015
28.71 Symbian
WM7/WM
BlacBerry
Linux
iOS
59.76
Maemo/Meego
29. GOOGLE ANDROID
Tiếp cận thế nào ?
Sản xuất device
Sản xuất ứng dụng, game
Cung cấp giải pháp: nhúng, mini board,..
30. GOOGLE ANDROID
Lợi nhuận từ đâu ?
Sản xuất device:
Bán device to end user
Sản xuất ứng dụng, game:
Bán qua Android Market, Vimarket, F-Store,..
Free và thu lợi nhuận từ quảng cáo in app
Outsoucing cho đối tác nước ngoài
Cung cấp giải pháp: nhúng, mini board,..
Nghiên cứu và bán giải pháp
Outsourcing
35. PHÁT TRIỂN ỨNG DỤNG
Chuẩn bị những gì ?
Logic lập trình
Java, C/C++ language
Khái niệm lập trình trên mobile
Kiến thức căn bản về Android OS
Các cộng cụ phát triển
36. PHÁT TRIỂN ỨNG DỤNG
Công cụ phát triển ?
Android SDK (Software Development Kit) - Free
Android NDK (Native Development Kit) - Free
Eclipse / Netbean IDE - Free
Windows / Linux (Ubuntu,…)
Máy ảo/ máy thật chạy Android
38. PHÁT TRIỂN GAME
Chuẩn bị những gì ?
Tƣ duy đồ họa căn bản
Kiến thức về đồ họa 2D/3D
(sprite, camera, projector, model, animation, Texture…)
OpenGL/ES
Game engine
39. PHÁT TRIỂN GAME
Công cụ phát triển ?
Công cụ tạo hình: map, nhân vật, vật thể, bối cảnh
Công cụ lập trình
Tập trung vào C/C++ language
Game engine / Game framework
Máy ảo/ máy thật chạy Android: debug, kiểm thử
40. PHÁT TRIỂN GAME
Game engine:
AndEngine (andengine.org): 2D, java (Free)
Libgdx (code.google.com/p/libgdx/) : Java (JNI) (Free)
Unity (unity3d.com/unity): 3D, C#, C++
42. DOWNLOAD ECLIPSE
IDE cho lập trình: Eclipse
Download: http://www.eclipse.org/downloads/
Vào link bên trên, download eclipse classic v ề rồi giải nén.
43. CÀI ĐẶT ADT PLUGIN
• Mở Eclipse lên, bấm vào Help Install new software.
• Ở form hiện ra, chọn Add…
• Ở mục Name, nhập tên gì cũng đƣợc, ví dụ nhƣ ADT plugin
• Ở mục Location, nhập vào link: http://dl-
ssl.google.com/android/eclipse/
• Sau đó bấm OK, chọn hết tất cả rồi bấm next cho đến lúc
xong.
44. CÀI ĐẶT ANDROID SDK
Có thể xem hƣớng dẫn cài đặt gốc tại đây
http://developer.android.com/sdk/installing.html
Muốn cài đặt of fline:
http://dl-ssl.google.com/android/repository/repository.xml
http://dl-ssl.google.com/android/repository/<package name>
45. CÀI ĐẶT ANDROID SDK
Tải Android SDK tại link này
http://developer.android.com/sdk/index.html (nhớ chú ý là
nó chia ra Window, Mac và Linux)
Mở Eclipse window preferences Android trong mục
SDK location chọn Browse đƣa đƣờng dẫn đến thƣ mục
SDK bấm apply.
46. CÀI ĐẶT ANDROID SDK
Eclipse window Android SDK and AVD manager
Available packages chọn và cài hết (hơi lâu một chút) hoặc
bạn có thể chỉ chọn mấy cái liên quan đến Android 1 .6 thôi
cũng đƣợc (API level 4).
47. CÀI ĐẶT ANDROID SDK
Sau khi xong thì bấm vào Installed packages
48. TẠO MỘT ĐIỆN THOẠI ẢO (AVD)
• Eclipse window Android SDK and AVD manager ở cái
cửa sổ mới đó, chọn mục Virtual devices bấm nút New…
• Mục Name: đặt tên gì cũng đƣợc
• Mục target: chọn API level 4
• Sdcard size: bạn gõ vào 1024 (hoặc có thể cao hơn)
• Sau đó bấm Create AVD.
49. TẠO MỘT PROJECT MỚI
Ở màn hình eclipse, bấm File New Project Android
Android Project Next
Hoặc trên thanh công cụ bấm vào icon nhƣ trong hình
50. TẠO MỘT PROJECT MỚI
Ở màn hình kế nhập liệu vào các ô nhƣ sau:
Project name: HelloWorld (tên project hiển trị trên eclipse cũng sẽ là
thƣ mục chứ ứng dụng trong workspace)
Application name: Hello World (tên ứng dụng sẽ hiện thị trên điện
thoại)
Package name: org.multiuni.android.hellowrold (tên của package sẽ
chứa source code, tƣơng tự trong java
http://en.wikipedia.org/wiki/Java_package#Package_naming_conve
ntions)
51. TẠO MỘT PROJECT MỚI
Create activity: HelloWorldActivity (tạo một lớp con của lớp
Activity, dùng để hiển thị một màn hình ở đây là màn hình HelloWorld
của chúng ta)
Min SDK version: 4 (tức SDK 1.6, ở đây chúng ta khai báo là ứng
dụng này có thể đáp ứng đƣợc phiên bản SDK cũ nhất là phiên bản
nào)
Sau khi hoàn tất bấm Finish, project mới đã đƣợc tạo.
52. CẤU TRÚC MỘT PROJECT
Thƣ mục src chứa source code ứng dụng. Gồm các package
và các class.
Thƣ mục gen chứa các file tự động phát sinh (mà thƣờng
gặp nhất là R.class)
Thƣ mục res để chứa các resource dùng trong ứng dụng
(thông qua ID)
Thƣ mục assets chứa các resource file mà ứng dụng cần
dùng (dƣới dạng file)
53. CẤU TRÚC MỘT PROJECT
File Manifest là file khai báo thông tin về ứng với hệ thống
(nhƣ ứng dụng gồm những màn hình nào, có service nào… xin
các quyền gì, phiên bản bao nhiêu, dùng từ SDK phiên bản
nào…)
Ngoài ra còn có file thƣ viện.
54. CHẠY ỨNG DỤNG HELLO WORLD
Với ứng dụng vừa tạo nếu có báo lỗi thì bạn sửa lại thông số
cho ứng dụng nhƣ sau: bấm chuột phải vào project
Properties Java compiler Compiler compliance settings:
1 .6
55. CHẠY ỨNG DỤNG HELLO WORLD
Bấm Ctrl + F11 để chạy ứng dụng, sẽ hiện lên emulator
56. TẠO UI TRỰC TIẾP TỪ CODE
Code ban đầu của ứng dụng:
public class HelloWorldActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
57. TẠO UI TRỰC TIẾP TỪ CODE
Sửa lại nhƣ bên dƣới rồi chạy lại (nếu thấy báo lỗi thiếu thƣ
viện, thử bấm Ctrl + Shift + O)
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
}
58. THỬ XỬ LÝ SỰ KIỆN
Ở code bên trên, đổi TextView lại thành Button.
Button bt = new Button(this);
Sau đó, implement phƣơng thức xử lý sự kiện khi user click
vào nút này
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),
"Hello
World", Toast.LENGTH_LONG).show();
}
});
59. MỘT SỐ PHÍM TẮT
Để import các thƣ viện còn thiếu bấm Ctrl + Shift + O
Để xóa một dòng code bấm Ctrl + D
Để hiển thị bảng suggestion bấm Ctrl + Space
Để comment một dòng code Ctrl + /
60. THỬ XOAY MÀN HÌNH
Tạo 1 project mới tên là Orientaion.
Sau đó, bấm phải chuột vào thƣ mục res new Folder
nhập tên folder là layout-land (nhập chính xác)
61. THỬ MỘT CHÚT VỀ XOAY MÀN HÌNH
Trong thƣ mục layout ban đầu có file main.xml, copy file
đó, cho vào thƣ mục layout-land, vậy là mỗi thƣ mục đều có
một file main.xml
Ở mỗi file main trong 2 thƣ mục đó, đều có đoạn này:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=“@string/hello"
/>
62. THỬ MỘT CHÚT VỀ XOAY MÀN HÌNH
Các bạn sửa cái nội dung android:text trong đoạn xml
lại, để cho 2 file main đó có 2 nội dung text khác nhau là
đƣợc.
Chạy chƣơng trình, sau khi màn hình hiển thị, bấm Ctrl + F11
(Ctrl bên trái) thử xem kết quả.
63. KẾT THÚC
Tham khảo bản tiếng Anh tại link này:
http://developer.android.com/resources/tutorials/hello -
world.html
Có thể thử các view khác nhau và xử lý một số sự kiện khác
nhƣ sự kiện long click, sự kiện touch, sự kiện focus… trên
các đối tƣợng view nhƣ
Button, TextView, ImageView, ImageButton…
64. THIẾT KẾ GIAO DIỆN TRÊN ANDROID
Trong Android, dùng Activity để hiển thị màn hình.
Mỗi activity sẽ chứa các View theo dạng cấu trúc cây, nghĩa là
một Layout gốc chứa các view/layout con bên trong hoặc chỉ
có 1 view duy nhất (lƣu ý Layout cũng là một view).
Có thể thiết kế giao diện trong code java hoặc trong file xml
trong thƣ mục layout.
67. MỘT SỐ THUỘC TÍNH CƠ BẢN
Layout_width, layout_height: chiều rộng của view (fill_parent
là to bằng kích thƣớc của layout chứa view này, wrap_content
là vừa đủ nội dung cần hiển thị của view)
Orientation: với LinearLayout, việc sắp xếp các view là nằm
kề nhau theo hàng ngang hoặc hàng dọc, ta khai báo
orientation để chọn sắp theo kiểu nào (horizontal/vertical)
68. MỘT SỐ THUỘC TÍNH CƠ BẢN
Gravity: thuộc tính này qui định các view nằm bên trong layout
sẽ đặt theo vị trí nào so với layout (trung tâm, trái, phải, trên
dƣới…)
Weight: để các view phan chia tỉ lệ diện tích hiển thị trên màn
hình (tỉ lệ tính theo weight của từng view trên tổng số
weight, các view ko khai báo weight thì sẽ xem qua width và
height)
69. VÍ DỤ CƠ BẢN
Vào link này lấy code cho vào ứng dụng:
http://developer.android.com/resources/tutorials/views/hello
-linearlayout.html
70. THỰC HÀNH
Làm một layout hiển thị nhƣ trong hình:
Các bƣớc nhƣ sau:
Phân tích thành phần layout trên giấy
Phân tích đặc điểm các view
Add thêm resource ảnh
Thử trƣớc với với tab layout (khi view file xml trong eclipse)
Đƣa vào thực thi trên máy, đánh giá
71. MỘT SỐ LOẠI LAYOUT KHÁC
FrameLayout: các view bên trong đƣợc qui định vị trí bằng
khoảng cách so với biên trái và trên so với layout, các view
có thể đè lên nhau.
RelativeLayout: các view đƣợc thiết kế dựa trên quan hệ
giứa chúng với nhau và với layout chứa chúng.
AbsoluteLayout: dành cho bạn nào làm nhiều với C#, nhƣng
không khuyến khích với Android.
…
72. LƢU Ý KHI THIẾT KẾ GIAO DIỆN
Hạn chế độ sau của cây
Với các Layout phức tạp, đừng dùng RelativeLayout
Nên chèn vào dữ liệu tạm để xem trƣớc layout hiển thị ra
sao bên tab layout (trong eclipse), nhƣng xong rồi thì nhớ
xóa dữ liệu tạm đi.
FrameLayout có vấn đề với background
Muốn tìm thuộc tính gì, bấm “android:” rồi đợi suggestion xổ
ra xem.
73. THỰC HÀNH NHANH
Thử thực hành các ví dụ sau:
http://developer.android.com/resources/tutorials/views/hello -
formstuff.html
http://developer.android.com/resources/tutorials/views/hello -
webview.html
74. LIST
Rất hay dùng trong Android. Đặc biệt các ứng dụng cần lƣu
trữ và hiển thị nhiều dữ liệu.
List là một danh sách các view thông thƣờng có cùng dạng
layout đặt liền nhau.
75. APIDEMOS
Mở ứng dụng ApiDemos đã có sẵn:
New android project Create project from existing source Browse
mở thƣ mục SDK platforms android-1.6 samples
ApiDemos OK Finish.
Mở thƣ mục project trong eclipse src mở
com.example.android.apis.view mở file List1.java
76. LIST1
Trong code của List1 , các bạn tách bạch phần tạo mới
ArrayAdapter ra nhé
ArrayAdapter adapter = new
ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings);
setListAdapter(adapter);
Adapter dùng để kết nối dữ liệu cần đƣa vào list với layout
hiển thị và cung cấp cho ListView hiển thị.
77. LIST1
Với đoạn tạo một adapter, ta phân tích ra:
this: context, lúc nào làm view cũng cần rồi
android.R.layout.simple_list_item_1: layout để hiển thị mỗi item
trong list, ở đây chỉ có một TextView
mStrings: mảng các chuỗi kí tự, là dữ liệu cần hiển thị
Sau khi tạo xong adapter, truyền vào cho list hiển thị.
78. LIST1
Tạo một project mới, copy code List1 bỏ qua, rồi làm thêm
các thao tác sau:
Tạo 1 file layout có 1 TextView và 1 ImageView
Trong TextView thêm dòng này
android:id=“@+id/text”
Sửa lại đoạn tạo mới adapter cho nó dùng cái layout vừa tạo. (tìm
xem có cái constructor nào giúp chỉ chính xác đến cái TextView
trong layout hay ko)
Dạng này: ArrayAdapter(Context context, int resource, int
textViewResourceId, T[] objects)
Chạy ứng dụng