tìm hiểu hệ điều hành android và xây dựng ứng dụng minh họa
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Viện Công nghệ Thông tin và Truyền thông
BÁO CÁO ĐỒ ÁN 2
Đề tài:
Tìm hiểu hệ điều hành Android và xây dựng ứng dụng
minh họa
Giáo viên hướng dẫn: ThS Lương Mạnh Bá
Sinh viên thực hiện:
1 Lê Đức Anh SHSV: 20109202
2 Nguyễn Văn Bảo SHSV: 20109209
3 Bùi Văn Chiến SHSV: 20109214
HÀ NỘI – 11/2012
Trang 2MỤC LỤC
I- MỞ ĐẦU 4
II- HỆ ĐIỀU HÀNH ANDROID 4
1 Giới thiệu chung 4
2 Kiến trúc hệ điều hành Android 4
III- PHÁT TRIỂN ỨNG DỤNG CHO HỆ ĐIỀU HÀNH ANDROID 6
1 Tổng quan ứng dụng Android 6
2 Môi trường, công cụ hỗ trợ phát triển 6
2.1 Môi trường phát triển 6
2.2 Cài đặt plugin ADT cho Eclipse 7
2.3 Cài đặt Android SDK 8
2.4 Cài đặt SDK APIs 9
2.5 Cài đặt AVD sử dụng AVD Manager 10
2.6 Công cụ gỡ rối DDMS (Dalvik Debug Monitor Server) 12
2.7 Cài đặt AVD sử dụng dòng lệnh 13
2.8 Sử dụng Android Emulator 14
2.8.1 Cài đặt ứng dụng vào Emulator 14
2.8.2 Làm việc với Disk images trong Emulator 16
2.8.3 Emulator Networking 16
2.8.4 Sử dụng Emulator Console 18
3 Phát triển ứng dụng trên Android 23
3.1 Tạo chương trình Hello World 24
3.2 Thành phần giao diện trong Android 30
3.2.1 View: 30
3.2.2 ViewGroup : 30
3.2.3 Một số thành phần giao diện thông dụng 30
3.2.3.1 Button: 30
3.2.3.2 ImageButton: 31
3.2.3.3 ImageView: 31
3.2.3.4 TextView: 31
3.2.3.5 EditText: 32
3.2.3.6 CheckBox: 32
3.2.3.7 RadioButton và RadioGroup: 33
Trang 33.2.3.8 ListView: 34
3.2.3.9 AutoCompleteTextView: 35
3.2.3.10 Menu Options: 36
3.2.3.11 ProgressBar: 37
3.3 Thao tác với luồng 39
3.4 Thao tác cơ sở dữ liệu sử dụng SQLite 41
3.5 Activity và Intent 43
3.6 Bộ nhớ chia sẻ 45
3.6.1 Shared Preferences 45
3.6.2 Internal Storeage: 47
3.6.3 External Storeage 48
IV- ỨNG DỤNG MINH HỌA 49
V- KẾT LUẬN 55
VI- TÀI LIỆU THAM KHẢO 56
Trang 4I- MỞ ĐẦU
Hiện nay, nhu cầu sử dụng các thiết bị di động ngày càng lớn, kéo theo sự phát triển của các nền tảng di động Trên thị trường đã có rất nhiều hệ điều hành di động như iOS, Window Phone, BlackBerry, Symbian, LiMo, Trong đó, nổi bật phải kể đến là hệ điều hành Android Với đặc tính là nền tảng mã nguồn mở và hoàn toàn miễn phí, Android tạo nhiều thuận lợi cho các nhà phát triển thiết kế ứng dụng di động của mình, giúp nền tảng này ngày càng phát triển hơn nữa
1 Giới thiệu chung
Android là bộ công cụ phần mềm mã nguồn mở dựa trên nhân Linux 2.6 dành cho nền tảng di động được phát triển bởi Google và Open Handset Alliance (tổ chức đa quốc gia
do Google lập, nhằm xây dựng một chiếc điện thoại tốt hơn dựa trên Android) Hàng trăm triệu thiết bị Android trên toàn cầu hiện nay đã minh chứng cho sự phát triển mạnh
mẽ của nền tảng này
Những đặc tính nổi trội của hệ điều hành Android so với các hệ điều hành di động khác:
Android thực sự mở, một nền tảng phát triển dựa trên Linux và mã nguồn mở: Các nhà sản xuất thiết bị và các nhà phát triển yêu thích Android do họ có thể sử dụng và tùy chỉnh nó mà không phải trả tiền bản quyền
Hỗ trợ ngôn ngữ lập trình Java, C/C++
2 Kiến trúc hệ điều hành Android
Trang 5Linux Kernel: Android được xây dựng dựa trên nhân Linux và là một hệ điều hành đa nhiệm
thực sự Nhân Linux cung cấp tầng ảo hóa phần cứng cho Android, giúp Android có thể thích hợp với đa dạng nền tảng phần cứng
Libraries: Các thư viện chia sẻ toàn bộ được viết bằng C/C++, được biên dịch phù hợp với
đặc thù kiến trúc phần cứng sử dụng bởi các thiết bị di động, được cài đặt sẵn bởi nhà sản xuất Một số thư viện quan trọng như:
Surface Manager: Quản lý cửa sổ, hiển thị, hiệu ứng
nhanh (nếu không)
Media codecs: Android chơi được nhiều định dạng video và âm thanh như: AAC, AVC, H.263, MP3, MP4
libraries
Android Runtime: gồm thư viện lõi Java, máy ảo Dalvik (tối ưu hóa cho bộ nhớ hạn chế, cho
phép nhiều VM chạy đồng thời và tạo thuận lợi cho hệ điều hành lõi (Linux) trong bảo mật
và độc lập giữa các tiến trình)
Application Framework: tầng này cung cấp thành phần cấp cao để tạo ứng dụng, mặc định được cài sẵn, nhưng nhà phát triển có thể kế thừa bằng những thành phần của mình Một số
Trang 6 Activity manager: điều khiển vòng đời ứng dụng
các ứng dụng (ví dụ như là danh bạ)
như xâu kí tự, hình ảnh, âm thanh )
Notification manager: quản lý thông báo đến người dùng (ví dụ như: có tin nhắn, lịch, cảnh báo )
Application: Android cung cấp một số các ứng dụng tiêu chuẩn đi kèm thiết bị như: ứng
dụng gọi điện, danh bạ, SMS, Email, bản đồ, trình duyệt, danh bạ, cho nhà phát triển
1 Tổng quan ứng dụng Android
Trong Android, chỉ có một ứng dụng tiền cảnh (foreground application) chiếm toàn bộ màn hình và chờ đợi để người dùng tương tác (ví dụ như ứng dụng Home mỗi khi người dùng mở máy)
Khi người dùng chạy một ứng dụng, Android khởi động và đưa nó ra tiền cảnh Từ ứng dụng này, người dùng có thể đi đến ứng dụng khác, màn hình khác v.v Tất cả chương trình và
màn hình được ghi vào application stack bởi Activity manager Người dùng có thể dùng nút
Back để trở lại màn hình trước đó
Một ứng dụng là một hoặc nhiều activity cộng thêm một tiến trình Linux chứa nó
Các ứng dụng được quản lý chặt chẽ việc sử dụng tài nguyên nhằm tránh lãng phí, xung đột, đảm bảo hiệu năng hệ thống
Ứng dụng Android có phần mở rộng là Apk
Thành phần chính được dùng trong ứng dụng Android
Services: Thành phần chạy ngầm, không có giao diện, dùng để chạy các tác vụ lâu
dài
Content providers: quản lý dữ liệu chia sẻ, truy vẫn dữ liệu Ví dụ việc lấy dữ liệu
trong danh bạ
Broadcast receiver: thành phần thông báo của hệ thống, đón bắt các sự kiện
2 Môi trường, công cụ hỗ trợ phát triển
2.1.Môi trường phát triển
- Eclipse IDE
- Plugin cho Eclipse – ADT
Trang 7- Android SDK
2.2.Cài đặt plugin ADT cho Eclipse
Cách 1:
1 Mở Eclipse, vào help > Install New Software… > chọn Add và điền
https://dl-ssl.google.com/android/eclipse/ vào ô Location
2 Chọn thành phần Deverloper Tool và cài đặt
Cách 2:
1 Tải ADT-20.0.3.zip mới nhất trên http://developer.android.com/tools/sdk/eclipse-adt.html
2 Giải nén, copy toàn bộ file trong thư mục features và plugins vào thư mục tương ứng của thư mục cài đặt Eclipse
Trang 82.3.Cài đặt Android SDK
1 Tải Android SDK dạng file zip tại http://developer.android.com/sdk/index.html
2 Giải nén ra thư mục bất kỳ
3 Mở Eclipse, chọn Window > Preferences, chọn mục Android
4 Tại SDK Location, điền đường dẫn đến thư mục Android SDK vừa giải nén, chọn
OK
Trang 92.4.Cài đặt SDK APIs
1 Trong Eclipse, vào Window > Android SDK Manager
2 Chọn nền tảng API và tiến hành cài đặt
Trang 102.5.Cài đặt AVD sử dụng AVD Manager
1 Trong Eclipse, vào Window > AVD Manager > New…
2 Điền tên máy tại ô Name, chọn nền tảng tại Target, dung lượng thẻ nhớ tại SD Card, kích thước màn hình tại Skin, cấu hình chi tiết tại Hardware,… sau đó ấn
Create AVD
3 Để khởi động AVD, chọn AVD trong list > Start…
Trang 11Figure 1: Giao diện Emulator khi khởi động xong
Trang 122.6.Công cụ gỡ rối DDMS (Dalvik Debug Monitor Server)
DDMS cho phép theo dõi hoạt động trong Emulator, hỗ trợ sửa lỗi, xem, dừng các tiến trình, truy cập hệ thống file, giả lập gửi tin nhắn, gọi điện, GPS, …
Trang 132.7.Cài đặt AVD sử dụng dòng lệnh
Từ cửa sổ dòng lệnh đi vào <sdk>/tools
Hiển thị Target đã được cài đặt, sử dụng lệnh: “android list targets” Nó sẽ quét trong 2 thư mục
<sdk>/platforms/ và <sdk>/add-ons/ và hiển thị kết quả Ví dụ:
Để tạo AVD mới, sử dụng lệnh:
android create avd -n <name> -t <targetID> [-<option> <value>]
name : tên AVD
targetID: id của target trong hệ thống (như ví dụ trên)
[-<option> <value>]: các tùy chọn khác
Ví dụ: android create avd –n my_android –t 2 skin WXGA800
Các file AVD sẽ được chứa mặc định ở ~/.android/avd/ (với Linux/Mac), <user>\.android\avd
(với Window) Để tùy biến ta có thể thêm tùy chọn –p <đường dẫn>
Để tạo SD Card thêm tùy chọn -c <size>[K|M]
Để xóa AVD, sử dụng lệnh: android delete avd -n <name>
Khởi động AVD: sử dụng lệnh emulator -avd <avd_name> [<options>]
Trang 142.8.Sử dụng Android Emulator
Android Emulator để thiết kế, phát triển, thử nghiệm, sửa lỗi ứng dụng Android mà không cần sử dụng thiết bị thật Nó mô phỏng hầu hết phần cứng cũng như phần mềm giống thiết bị thật ngoại trừ việc không thể gọi điện như máy thật
2.8.1 Cài đặt ứng dụng vào Emulator
Đối với môi trường Eclipse + ADT ứng dụng tự động được cài khi Build
Nếu không sử dụng môi trường Eclipse + ADT, ta dùng công cụ adb với cú pháp như sau:
adb install <đường dẫn đến file apk>
Trong trường hợp có nhiều Emulator đang chạy ta xác định Emulator thông qua số hiệu cổng của
nó Ví dụ để cài ứng dụng cho Emulator có số hiệu cổng 5554 ta làm như sau:
adb –s emulator-5554 install <đường dẫn đến file apk>
Nói thêm về quá trình tạo ra file apk
Trang 15Figure 2: Quá trình tạo file apk
(như là các file xml), biên dịch chúng và đồng thời tạo ra file R.java (dùng để quản lý
các thuộc tính được khai báo trong file xml)
Trang 16 Công cụ aidl (Android Interface Definition Language) chuyển đổi aidl interfaces (nếu
có) vào trong Java interfaces
R.java, mã nguồn, cùng với file aidl được biên dịch bởi Java complier cho ra class file
Dex tools sẽ chuyển các file class (kể cả của bên thứ 3) thành Dalvik bytecode
cùng với dex file được đóng gói thành file apk sử dụng apkbuilder
Release cần qua bộ zipalign giúp giảm bộ nhớ sử dụng khi chạy trên thiết bị
2.8.2 Làm việc với Disk images trong Emulator
++File ảnh mặc định (Default image files):
Nếu khi Emulator khởi động mà không tìm thấy file ảnh dữ liệu người dùng (user data image),
nó sẽ tạo mới từ một phiên bản mặc định trong SDK và file ảnh là file chỉ đọc
Có thể thay đổi đường dẫn đến user data image (file userdata.img) bằng cách thêm tùy chọn lúc khởi động là –system <đường dẫn> Ta cũng có thể thay đổi tên của user data image bằng cách thêm tùy chọn khởi động –initdata <file>
++File ảnh khi chạy (Runtime images):
Tại thời điểm chạy, Emulator đọc và ghi dữ liệu vào hai đĩa ảnh userdata-qenu.img và
sdcard.img – mô phỏng phân vùng dữ liệu người dùng và thiết bị lưu trữ gắn ngoài (như SD
Card) trên máy thật Như file ảnh mặc định ở trên, ta cũng có thể thay đổi đường dẫn đến hai đĩa
ảnh này với tùy chọn khởi động –data <đường dẫn> và –sdcard <đường dẫn>, nếu đường dẫn
chỉ có tên file, Emulator sẽ tìm trong thư mục làm việc hiện tại
++File ảnh tạm (Temporary Images):
Emulator tạo hai file ảnh có thể ghi và xóa chúng khi tắt máy đó là:
Phân vùng /cache được khởi tạo rỗng sử dụng bởi trình duyệt để lưu trang web và ảnh Emulator cung cấp tùy chọn –cache <file> để lưu trữ /cache khi tắt máy
2.8.3 Emulator Networking
++Không gian địa chỉ:
Mỗi thực thể Emulator chạy sau một router/firewall ảo, cô lập với giao diện mạng của máy phát triển và với internet; nó không thể nhìn thấy máy của nhà phát triển và các Emulator khác Nó chỉ nhìn thấy các kết nối thông qua router/firewall
Trang 17Router ảo của mỗi thực thể quản lý không gian địa chỉ 10.0.2/24 Địa chỉ trong không gian nay
đã được đặt trước bởi Emulator/router như sau:
Tất cả thực thể Emulator đều được gán giống nhau và giống như trên
++Sử dụng Network Redirection:
Để giao tiếp với Emulator cần phải thiết lập network redirection cho router của nó
Cài đặt sử dụng Emulator console:
1 telnet localhost <port number> : port number là số hiệu cổng của Emulator (thường thấy
trên góc trái cửa sổ Emulator), khi đã kết nối thành công thì đến bước 2
2 add <protocol> : <port> : <guest-port> (protocol có thể là TCP hoặc UDP,
host-port là cổng tại máy nhà phát triển, guest-host-port là cổng của hệ thống mô phỏng)
Ví dụ: redir add tcp:8080:80 sẽ tạo network redirection để mỗi khi thông tin TCP đến
127.0.0.1:8080 tại máy nhà phát triển nó sẽ tự động chuyển tiếp đến hệ thống mô phỏng tại địa chỉ 10.0.2.15:80;
Cài đặt sử dụng ADB
ADB (Android Debug Bridge) tool cung cấp việc chuyển tiếp cổng
Với ví dụ trên, cú pháp là: adb forward tcp:8080 tcp:80
++Cấu hình cài đặt Emulator DNS:
Lúc khởi động, Emulator đọc danh sách DNS server mà hệ thống của nhà phát triển đang dùng, sau đó ánh xạ tối đa 4 địa chỉ DNS server vào trong địa chỉ mô phỏng 10.0.2.3, 10.0.2.4,
10.0.2.5, 10.0.2.6
Trang 18Nếu khởi động từ dòng lệnh, ta có thể thêm tùy chọn –dns-server <danh sách địa chỉ ngăn cách bởi dấu phẩy> để thiết lập DNS cho Emulator
++Kết nối giữa các Emulator:
Để làm được điều này, chúng ta sẽ sử dụng network redirection
Giả sử hai Emulator A và B cùng chạy trên máy nhà phát triển, giả sử A là server, B kết nối đến
A, ta sẽ làm như sau:
1 A sẽ nghe tại 10.0.2.15:<server_port>
2 redir add <protocol> : <local_port> : <server_port>
3 B sẽ kết nối đến 10.0.2.2:<local_port>
++Gọi điện, gửi tin SMS đến Emulator khác:
Emulator tự đông chuyển tiếp cuộc gọi hay SMS bằng số hiệu cổng Để gọi điện hay gửi SMS đến Emulator khác, ta bật ứng dụng gọi điên hoặc nhắn tin lên, thay số máy thật bằng số hiệu cổng của Emulator cần kết nối đến
2.8.4 Sử dụng Emulator Console
Mỗi thực thể Emulator đang hoạt động cung cấp một Console cho phép truy vấn, điều khiển môi trường thiết bị mô phỏng Ví dụ: dùng Console để quản lý port redirection (đã nói đến ở phần trước), các sự kiện, … khi ứng dụng chạy trên Emulator Để truy cập Console ta dùng telnet để kết nối tới cổng của Emulator
Cú pháp: telnet localhost <console-port>
Minh họa:
Trang 19Một thực thể Emulator có một cặp cổng kề nhau: console port và adb port, adb port sẽ lớn hơn
Ví dụ console port là 5554 thì adb port là 5555
Trang 20Lưu ý: Emulator nghe kết nối từ cổng trong khoảng từ 5554-5587, và chỉ chấp nhận kết nối tư local host
++Post Redirection:
Cú pháp: redir <list | add | del>
Chi tiết:
add <protocol> : <host_port> : <guest_port> Thêm mới một port redirection
++Geo Location Provider Emulation (giả lập cung cấp vị trí):
Chúng ta có thể sử dụng Console để thiết lập vị trí địa lý cung cấp cho ứng dụng chạy trong
Emulator sử dụng lệnh geo Lệnh này gửi một thông số vị trí GPS đến Emulator có thể kèm hoặc
không định dạng NMEA 0183 (chuẩn để truyền dữ liệu giữa các thiết bị điện tử trong đó có GPS)
Cú pháp geo <fix | nmea>
Trang 21Chi tiết:
fix <longitude> <latitude> [<altitude>] Cung cấp kinh độ, vĩ độ [độ cao (theo mét)]
được gửi từ một GPS modem mô phỏng (câu phải bắt đầu bằng ‘$GP’, hiện tại chỉ hỗ trợ
status
<unknown|charging|discharging|not-charging|full>
Thay đổi trạng thái của pin
health
<unknown|good|overheat|dead|overvoltage|failure>
Thiết lập sức khỏe pin
Cú pháp: network status
Cú pháp tùy chọn khi khởi động:
emulator -netdelay <giá trị>
Khi Emulator đang chạy, kết nối vào Console và dùng lệnh: network delay <giá trị>
Ví dụ: network delay gprs
Chi tiết:
Trang 22Giá trị Mô tả (đơn vị mili giây)
Cú pháp tùy chọn khi khởi động:
emulator -netspeed <giá trị>
Khi Emulator đang chạy, kết nối vào Console và dùng lệnh: network speed <giá trị>
Trang 23accept <phonenumber> Chấp nhận cuộc gọi từ phonenumber thay đổi
trạng thái sang “active” (nếu trạng thái hiện tại
là “waiting” hoặc “held”)
trạng thái thành “busy” (nếu trạng thái hiện tại
là “waiting”)
thái hiện tại là “active” hoặc “waiting”>
Cú pháp: sms send <senderPhoneNumber> <textmessage>
Cú pháp: vm <start|stop|status>
3 Phát triển ứng dụng trên Android
Trang 243.1.Tạo chương trình Hello World
1 Mở Eclipse > File > New > Project chọn Android Application Project
2 Điền tên ứng dụng…
3 Ấn next liên tiếp, đến phần đặt tên cho Activity, và Layout sau đó Finish
Trang 25Cấu trúc chương trình Hello World
Trang 26Các thư mục:
Src: chứa toàn bộ mã nguồn chương trình Gen: chứa file R.java khi biên dịch Assets: chứa các file âm thanh streaming…
Res: chứa các tài nguyên của chương trình
Drawable: các file ảnh Layout: chứa file xml, quyết định giao diện chương
trình
Menu: chứa file xml thiết kế cho menu Values: chứa các tài nguyên khác như xâu kí tự,
theme style …
File Manifest: định nghĩa cấu trúc, các thành phần
yêu cầu của ứng dụng
Trang 27Ví dụ file manifest:
Một số thành phần trong file manifest:
Bluetooth, Camera, Location, …)
dụ: <uses-permission android:name=”android.permission BLUETOOTH”/>)
Applicaton: đặc tả dữ liệu cho ứng dụng (ví dụ: tiêu đề, icon, theme…)
Activity: mô tả cho Activity chính và các Activity khác
Hình ảnh file main.xml
Trang 28File HelloWorld.java