KHÁI NIỆM, LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN ANDROID
Trang 1MỤC LỤC
CÁC TỪ VIẾT TẮT 4
DANH MỤC HÌNH ẢNH 5
TÓM TẮT 7
ABSTRACT 8
CHƯƠNG 1 GIỚI THIỆU TỔNG QUAN 9
1 GIỚI THIỆU 9
2 MỤC TIÊU CẦN ĐẠT ĐƯỢC 10
3 KHÓ KHĂN 12
4 HƯỚNG GIẢI QUYẾT 13
5 PHẠM VI ĐỀ TÀI 13
7 BỐ CỤC CỦA QUYỂN LUẬN VĂN 14
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 15
1 KHÁI NIỆM, LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN ANDROID .15 1.1 Khái niệm Android 15
1.2 Lịch sử hình thành và phát triển 15
1.3 Lịch sử cập nhật 17
2 MÁY ẢO DALVIK 18
3 KIẾN TRÚC CỦA ANDROID 19
3.1 Tầng ứng dụng 19
3.2 Application framework 20
3.3 Library 20
3.4 Android Runtime 21
3.5 Linux kernel 22
4 ANDROID EMULATOR 22
5 HƯỚNG DẪN CÀI ĐẶT ANDROID VỚI ECLIPSE 23
5.1 Download Android SDK 23
Trang 25.2 Tích hợp Android SDK vào Eclipse 25
5.3 Android Virtual Device (Emulator) 26
5.4 Một số chức năng cần biết khi lập trình Android với Eclipse 27
6 CÁC THÀNH PHẦN TẠO NÊN MỘT ỨNG DỤNG ANDROID 28
6.1 AndroidManifest.xml 36
6.2 File R.java 38
7 CHU KỲ ỨNG DỤNG ANDROID 43
7.1 Chu kỳ sống thành phần 43
7.2 Activity Stack 43
7.3 Các trạng thái của chu kỳ sống 44
7.4 Chu kỳ sống của ứng dụng 45
7.5 Các sự kiện trong chu kỳ sống của ứng dụng 45
7.6 Thời gian sống của ứng dụng 46
7.7 Thời gian hiển thị của activity 46
7.8 Các phương thức của chu kỳ sống 46
8 XML TRONG ANDROID 49
9 MULTIMEDIA 55
9.1 Giới thiệu gói android.media 59
9.2 Giới thiệu class android.media.MediaPlayer 60
9.3 Playing audio, video 65
9.4 Giới thiệu lớp android.media.MediaRecorder 71
10 GIỚI THIỆU VỀ ANDROID GRAPHICS 74
10.1 Các lựa chọn khi vẽ đồ họa 74
10.2 Vẽ với Canvas 75
CHƯƠNG 3 PHẦN ỨNG DỤNG 85
1 ĐẶC TẢ BÀI TÓAN 85
3 MỤC TIÊU CẦN ĐẠT ĐƯỢC 86
4 HƯỚNG GIẢI QUYẾT 86
Trang 35 SƠ ĐỒ USECASE, SƠ ĐỒ CLASS 86
5.1 Sơ đồ usecase, sơ đồ class giữa các thành phần giao diện 86
5.2 Thông tin các Class 87
6 ĐẶC TẢ CHỨC NĂNG 89
6.1 Chức năng đăng ký thông tin 89
6.2 Chức năng đăng nhập 89
6.3 Chức năng lấy lại mật khẩu đã mất 90
6.4 Chức năng thay đổi mật khẩu 90
6.5 Chức năng chơi cờ ca rô online 90
6.6 Chức năng chat 90
6.7 Chức năng xem thông tin người chơi 90
7 QUÁ TRÌNH ĐÁNH CỜ CA RÔ ONLINE CỦA HAI NGƯỜI CHƠI 91
8 VẼ BÀN CỜ 91
9 GIỚI THIỆU CON ROBOT (BOT) 94
10 GIAO DIỆN GAME ĐÁNH CỜ CA RÔ 95
PHẦN KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 99
1 Kết luận 99
1.1 Kết quả đạt được của nhóm 99
1.2 Kết quả đạt được của cá nhân 99
2 Hướng phát triển 100
TÀI LIỆU THAM KHẢO 101
Trang 4CÁC TỪ VIẾT TẮT
API - Application programming interface
ROBOT hay BOT - Xem chương 3 mục 9
TCP/IP - Transmission Control Protocol/ Internet Protocol
Trang 5DANH MỤC HÌNH ẢNHChương 2
Hình 2.2: Cấu trúc stack hệ thống Android Trang 19
Hình 2.11: Tích hợp Android SDK vào Eclipse Trang 26
Hình 2.13: Chu trình sống của một Service Trang 32
Hình 2.14: Truyền dữ liệu giữa 2 Activity Trang 35
Hình 2.16: Các Action đã được định nghĩa sẵn trong Intend Trang 36
Hình 2.19: Các trạng thái của chu kỳ sống Trang 45
Hình 2.20: Các sự kiện của một ứng dụng Trang 46
Hình 2.21: Các phương thức chu kỳ sống của ứng dụng Trang 47
Trang 6Hình 2.25: RelativeLayout Trang 53
Hình 2.28: Sơ đồ lớp android.media.MediaPlayer Trang 61
Hình 2.30: sơ đồ lớp android.media.Mediarecorder Trang 72
Chương 3
Hình 3.2: Sơ đồ class mức khái niệm mối quan hệ giữa các Activity Trang 87
Hình 3.4: Sơ đồ tuần tự vẽ bàn chơi game online Trang 92
Trang 7TÓM TẮT
Ngày nay, người sử dụng điện thọai di động không chỉ để thực hiện những cuộc gọithông thường mà còn sử dụng cho nhiều mục đích khác như: tán gẫu, duyệt web,nghe nhạc, và xem truyền hình trực tiếp qua mạng Ngày nay, điện thọai di độngcần phải hỗ trợ được đa phương tiện để được coi là một thiết bị sử dụng đa phươngtiện Trong quyển báo cáo này chúng ta sẽ nghiên cứu làm cách nào để làm choAndroid có thể phát tập tin âm thanh, xem video, và ghi lại âm thanh
Một trong những tính năng chính của Android là bạn có thể dễ dàng phát triển cácứng dụng android trên nền tảng ứng dụng di động Điều này thực sự nổi bật vớiviệc tạo ra các giao diện trực quan hấp dẫn (chẳng hạn như trong chương 3) Trongquyển báo cáo này chúng ta sẽ nghiên cứu làm cách nào để tạo ra giao diện đồ họabằng cách sử dụng Android’d Graphic API
Nếu bạn đã từng làm việc với đồ họa trong JAVA, bạn có thể sẽ tìm thấy các API
đồ họa và cách làm việc với đồ họa trong Android cũng rất quen thuộc
Trang 8ABSTRACT
Today people use their cell phones for almost everything but phone calls, fromchatting, to surfing the web, to listening to music, and even to watching livestreaming TV Nowadays cell phones need to support multimedia to even beconsidered a usable device In this book we are going to look how you can useAndroid to play audio files, watch video, and even record sound
One of the main features of Android that you should have picked up on by now ishow much easier it is to develop Android applications than mobile applicationplatforms This really stands out in the creation of visually appealing UIs andmetaphors, but there is a limit of what can be done with typical Android UIelements (such as those discussed in chapter 2 head 10) In this chapter we aregoing to look at how to create graphics using Android’s Graphic API
If you have ever worked with graphics in Java, you will most likely find theGraphics API and how graphics work in Android familiar
Trang 9CHƯƠNG 1 GIỚI THIỆU TỔNG QUAN
1 GIỚI THIỆU
Nói về ý nghĩa và tầm quan trọng của điện thoại di động (ĐTDĐ), chúng ta có thểtóm gọn rằng đây là phương tiện liên lạc cá nhân không thể thiếu trong cuộc sốnghàng ngày Vì quá hiện đại, quá nhiều tính năng mà người ta có thể tích hợp vàoĐTDĐ Ngày nay, ĐTDĐ đang ngày càng khẳng định vai trò sống còn của mìnhtrong xã hội phát triển đặc biệt với thế hệ những người trẻ tuổi, năng động Nó gắn
bó với cuộc sống đến mức ngoài chức năng của một phương tiện liên lạc, ĐTDĐ đãtrở thành phương tiện để giải trí với nhiều chức năng hấp dẫn, phương tiện lưu giữnhững thông tin cá nhân một cách an toàn dù chỉ tương đối
Hệ điều hành Android nổi bật với khả năng hoạt động ổn định và linh hoạt, có thểchạy nhiều ứng dụng một lúc linh hoạt, mượt mà Android còn hỗ trợ cài đặt khônggiới hạn số lượng tài khoản email Bạn có thể cài cả account mail cá nhân nhưGmail hoặc các mail outlook phục vụ cho công việc
Với một bộ công cụ phát triển phần mềm (SDK) linh động, số lượng các ứng dụngdành cho Android đang tăng từng ngày Ngoài ra, các nhà phát triển ứng dụng còn
có thể làm việc với các hãng sản xuất linh kiện để có thể xây dựng các ứng dụngphù hợp và tối ưu đặc biệt dành cho Android (Chẳng hạn như Gameloft bắt taycùng Qualcomm để cho ra mắt những tựa game tối ưu cho thế hệ vi xử lýSnapdragon)
Có một bộ công cụ phát triển phần mềm (SDK) miễn phí và mã nguồn mở cũng làmột điềm mạnh của Android Mọi người có thể download SDK và tạo các ứngdụng cho riêng mình Sau đó, các nhà phát triển có thể đăng tải ứng dụng của mìnhtrực tiếp với Android Market của Google, hoặc thông qua các trang chia sẻ ứngdụng thứ ba
Ngoài ra, các nhà phát triển ứng dụng trên Android còn cho phép người dùng phảnhồi các ý kiến đóng góp về các sản phẩm của mình, dựa vào đó giúp các sản phẩmđược trở nên hoàn thiện và phù hợp với yêu cầu người sử dụng hơn
Đây được xem là điểm mạnh để Android có thể phát triển ứng dụng và game trênnền tảng của riêng mình, giúp vượt lên đối thủ chính là iOS của Apple, vốn có mộtnền tảng lập trình ứng dụng không được mở và linh hoạt như Android
Android là “mỏ vàng” cho các nhà phát triển ứng dụng
Trang 10Với số lượng các ứng dụng miễn phí lớn, cùng với lượng người dùng các ứng dụngđông đảo hơn so với các nền tảng, các nhà phát triển ứng dụng của Android dễdàng nhận được các khoản đầu tư lớn.
Hiện nay, Android đang là sự lựa chọn hàng đầu cho những nhà phát triển ứngdụng mới, và với xu thế này, số lượng ứng dụng và game trên Android sẽ tăng lênđáng kể trong tương lai
Ngày nay, việc chơi game online không còn là nhu cầu giải trí đơn thuần mà nó đãdần trở thành một xu hướng Nhưng việc xây dựng một game online theo mô hìnhtruyền thống thì quá tốn kém nhất là chi phí để mua sắm một server và chi phí bảotrì server game là rất lớn
IRC là dịch vụ cho phép mọi người trên khắp hành tinh có thể gặp gỡ, trao đổithông tin với nhau mà không cần phải gặp trực tiếp Dịch vụ này rất phát triển, cóđến hàng triệu người trên khắp thế giới sử dụng dịch vụ này
IRC được xây dựng trên họ giao thức mạng phổ biến nhất là TCP/IP lý do việc sửdụng họ giao thức này là tính chính xác, tin cậy, phổ biến, thích hợp cho các cuộcthảo luận từ xa và nó hoàn toàn miễn phí
Với những tính năng đó của IRC thì chúng ta có thể xây dựng một server game mà
ít tốn chi phí hơn, và có thể phục vụ cho nhiều game với cùng một hoặc nhiềuserver IRC mà không tốn chi phí cho server Vì vậy vấn đề đặt ra là ta phải xâydựng một giao thức dựa vào server IRC, mà nó có thể cho phép những người khácxây dựng game một cách dể dàng, nhanh chóng, và triệt để tài nguyên hệ thốngserver IRC bằng cách dựa vào giao thức chúng tôi đã đề ra
Với những ưu điểm trên về cả phần cứng, phần mềm lẫn khả năng phát triển ứngdụng, Android sẽ là hệ điều hành di động dành cho game thủ trong tương lai, trong
đề tài này, chúng tôi sẽ xây dựng trò chơi đánh cờ ca rô online trên nền tảngAndroid và tận dụng sức mạnh của hệ thống server với các vấn đề giải quyết nhưsau:
- Một giao thức hỗ trợ xây dựng trò chơi đối kháng dựa trên giao thức IRC,
giao thức này sẽ tận dụng tối đa sức mạnh mà server IRC mang lại
- Tìm hiểu lập trình mạng trên hệ điều hành Android.
- Xây dựng trò chơi đánh cờ ca rô hỗ trợ chơi online trên hệ điều hành
Android
2 MỤC TIÊU CẦN ĐẠT ĐƯỢC
Mỗi thành viên trong nhóm cần tìm hiểu và thực hiện đề tài riêng cũa mỗi người,sau đó cả nhóm sẽ cùng nhau thực hiện một đề tài chung Nội dung công việc sẽđược nêu rõ sau đây:
Trang 11Tên đề tài của từng thành viên trong nhóm:
Thái Thành Tín thực hiện đề tài - Tìm hiểu cơ chế lập trình mạng dướiAndroid
Trương Thiện Thành thực hiện đề tài - Xây dựng khung nền cho trò chơitrên Android dựa trên giao thức IRC
Lê An thực hiện đề tài - Lập trình đa phương tiện (Multimedia) trên nền tảngAndroid
Mục tiêu của cả nhóm:
Các đề tài sẽ làm việc cộng tác với nhau để xây dựng chương trình minh họa làmột trò chơi đối kháng giữa hai người trên hai máy điện thọai di động Android.Cả nhóm chúng tôi quyết định thực hiện trò chơi đánh cờ ca rô online trên thiết
Thời gian
PH00 Xây dựng chương
trình minh họa cho
trò chơi đối kháng
giữa hai người trên
hai máy điện thoại
Android
Xây dựng chương trình minhhọa cho trò chơi đối khánggiữa hai người trên hai máyđiện thoại Android
- Cài đặt các giao thức lên tròchơi đánh cờ ca rô online
- Xây dựng BOT quản lýngười dùng
TháiThanh Tín
TrươngThiệnThành
2 tháng
Trang 12code trong IRC, chi tiết chotừng message.
- Tìm hiểu cách thức xâydựng giao thức thông quawebsite, đề tài luận văn vềIRC
- Bắt đầu xây dựng giao thức
từ những bước cơ bản nhất
và hoàn thiện dần dần
- Cài đặt con bot, dùng xchat,icechat để kiểm tra giao thứcvừa cài đặt
PH03 Lập trình đa phương
tiện trên nền tảng
Android
- Tìm hiểu lập trình đaphương tiện dưới Android
Trong điều kiện thực tế thờigian nghiên cứu có hạn nêntôi chỉ nghiên cứu những thưviện lập trình Multimedia vàGraphics hỗ trợ trực tiếp choviệc thiết kế một ứng dụngđơn giản minh họa việc pháttập tin media trên thiết bịAndroid
- Xây dựng trò chơi đánh cờ
ca rô trên nền tảng Android
hỗ trợ hai người chơi onlinetrên thiết bị sử dụngAndroid
- Cài đặt các giao thức lên tròchơi ca rô
Lê An 2 tháng
Trang 13- Việc lập trình đa phương tiện và lập trình game trên nền tảng Android còn
quá mới mẻ
- Bộ giả lập SDK hỗ trợ tốt cho việc lập trình nhưng còn quá chậm và không
hỗ trợ tốt việc lập trình đa phương tiện cho lắm vì một số phần cứng bị giớihạn
- Server IRC không hỗ trợ việc quản lý người dùng trên đó nên đó cũng là
một khó khăn lớn đối với chúng tôi
4 HƯỚNG GIẢI QUYẾT
Tìm hiểu “trò chơi đối kháng giữa hai người” là gì?
Các trò chơi như cờ ca rô, cờ tướng, cờ vua, cờ vây… được gọi là trò chơi đốikháng, nó là trò chơi diễn ra giữa hai đối thủ để giành chiến thắng Nói chung cáctrò chơi này đều có một đặc điểm chung là mỗi đối thủ phải tìm đường đi ngắn nhất
để giành chiến thắng
Đặc điểm của các trò chơi này như sau:
- Có hai đối thủ, mỗi đối thủ chỉ đi một nước khi tới lượt
- Các đối thủ đều biết thông tin về tình trạng trận đấu
- Trận đấu không kéo dài vô tận, mà phải có thắng, thua hoặc hòa
Tìm hiểu cách thức xây dựng trò chơi đối kháng truyền thống
Một mô hình trò chơi đối kháng online truyền thống là một mô hình dạng server Mô hình cần một server game để quản lý thông tin người dùng và hỗ trợ chogame, các client được cài đặt một chương trình chơi game hay còn gọi là gameclient, các game có thể là cờ tướng, cờ vây, cờ carô, …
client-Xây dựng kịch bản trò chơi
Nghiên cứu lập trình đa phương tiện trên Android
Xây dựng con robot (bot – xem chương 3 phần 9) để quản lý thông tin ngườidùng và hỗ trợ game
Thiết kế giao diện, xây dựng game đánh cờ ca rô
Nghiên cứu lập trình mạng trên android
Cài đặt các giao thức vào game, hòan thiện con robot
Viết báo cáo
5 PHẠM VI ĐỀ TÀI
Nội dụng quyển báo cáo này sẽ tập trung chủ yếu vào phần phát triển các ứng dụng
đa phương tiện (Multimedia) trên nền tảng Android, đề tài được thực hiện với một
số mục tiêu:
Trang 14- Nghiên cứu qua kiến trúc của Android.
- Tìm hiểu bộ phát triển ứng dụng Android SDK
- Nghiên cứu lập trình đa phương tiện (Multimedia), lập trình Graphics trênnền tảng Android
- Xây dựng chương trình minh hoạ là một trò chơi đối kháng (trò chơi đánh cờ
ca rô) giữa hai người trên thiết bị sử dụng hệ điều hành Android
6 BỐ CỤC CỦA QUYỂN LUẬN VĂN
Nội dung quyển luận văn được chia làm 3 chương:
Chương 1: Giới thiệu tổng quan
Giới thiệu tổng quan về đề tài và sự cần thiết của việc nghiên cứu đề tài này, đồngthời cũng nêu lên mục tiêu và hướng tiếp cận Cuối cùng là nêu lên tổng quan vềnội dung của từng chương trong quyển luận văn này
Chương 2: Phần lý thuyết
Trình bày các khái niệm chính trong đề tài cụ thể là:
Khái niệm, lịch sử hình thành và phát triển của Android
Tìm hiểu máy ảo Dalvik
Tìm hiểu kiến trúc của Android
Android Emulator
Hướng dẫn cài đặt bộ SDK hỗ trợ lập trình Android với eclipse
Các thành phần tạo nên một ứng dụng của Android
Chu kỳ ứng dụng Android
Tìm hiểu XML trong Android
Tìm hiểu gói Android.media
Tìm hiểu lớp android.media.MediaPlayer và lớp
android.media.MediaRecorder làm một ví dụ đơn giản minh họa
Giới thiệu về Android Graphics
Tìm hiểu sử dụng các đối tượng trong gói android.graphics để vẽ
Chương 3 Phần ứng dụng
Đặc tả việc xây dựng trò chơi
Các hình ảnh minh họa
Trang 15Phần thảo luận kết quả, nêu những vấn đề chưa được giải quyết hướng phát triển.
Trang 16Google công bố hầu hết các mã nguồn của Android theo bản cấp phép Apache Hệđiều hành Android bao gồm 12 triệu dòng mã; 3 triệu dòng XML, 2.8 triệu dòng
mã C, 2.1 triệu mã Java và 1.75 triệu dòng mã C++
1.2 Lịch sử hình thành và phát triển
Ban đầu, Android là hệ điều hành cho các thiết bị cầm tay dựa trên nền tảng Linux
do công ty Android Inc (California, Mỹ) thiết kế Công ty này sau đó được Googlemua lại vào năm 2005 và bắt đầu xây dựng Android Platform Các thành viên chủchốt tại ở Android Inc gồm có: Andy Rubin, Rich Miner, Nick Sears, and ChrisWhite
Hình 2.1 Android timeline
Trang 17Và sau tiếp, vào cuối năm 2007, thuộc về Liên minh Thiết bị Cầm tay Mã Nguồn
mở (Open Handset Alliance) gồm các thành viên nổi bật trong ngành viễn thông vàthiết bị cầm tay như:
Texas Instruments, Broadcom Corporation, Google, HTC, Intel, LG, MarvellTechnology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, SprintNextel, T-Mobile, ARM Holdings, Atheros Communications, Asustek ComputerInc, Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp, and Vodafone Group,… Mục tiêu của Liên minh này là nhanh chóng đổi mới để đáp ứng tốt hơn cho nhucầu người tiêu dùng và kết quả đầu tiên của nó chính là nền tảng Android Androidđược thiết kế để phục vụ nhu cầu của các nhà sản xuất thiết, các nhà khai thác vàcác lập trình viên thiết bị cầm tay Android là hệ thống nền tảng phần mềm dànhcho điện thoại di động bao gồm hệ điều hành, các phần tử giao tiếp trung gian(midleware) và các ứng dụng chính (key applications)
Nền tảng di động Android của Goolge ngày càng trở nên hiện thực và đang là mộtđối thủ nặng ký cho những gã khổng lồ như Microsoft, Apple, RIM, Cuộc chiến
đã rõ ràng hơn khi mà Google tung ra bộ công cụ phát triển phần mềm SDK(Software Development Kits) cho Android Bộ SDK sẽ giúp các nhà phát triểnphần mềm hiểu rõ hơn về Android và tạo nên các sản phẩm phần mềm cho dòngthiết bị này Bộ SDK được thiết kế để cho phép các nhà phát triển “mở rộng, thaythế, tái sử dụng” các thành phần phần mềm, có nhiều công cụ debug, thư viện, dự
án mẫu Có một plug-in tích hợp SDK với nền tảng phát triển Eclipse (từ Eclipse3.2 trở về sau)
Phiên bản SDK lần đầu tiên phát hành vào tháng 11 năm 2007, hãng T-Mobilecũng công bố chiếc điện thoại Android đầu tiên đó là chiếc T-Mobile G1, chiếcsmartphone đầu tiên dựa trên nền tảng Android Một vài ngày sau đó, Google lạitiếp tục công bố sự ra mắt phiên bản Android SDK release Candidate 1.0 Trongtháng 10 năm 2008, Google được cấp giấy phép mã nguồn mở cho AndroidPlatform
Khi Android được phát hành thì một trong số các mục tiêu trong kiến trúc của nó làcho phép các ứng dụng có thể tương tác được với nhau và có thể sử dụng lại cácthành phần từ những ứng dụng khác Việc tái sử dụng không chỉ được áp dụng chocho các dịch vụ mà nó còn được áp dụng cho cả các thành phần dữ liệu và giaodiện người dùng
Vào cuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi làAndroid Dev Phone 1 có thể chạy được các ứng dụng Android mà không bị ràngbuộc vào các nhà cung cấp mạng điện thoại di động Mục tiêu của thiết bị này là
Trang 18cho phép các nhà phát triển thực hiện các cuộc thí nghiệm trên một thiết bị thực cóthể chạy hệ điều hành Android mà không phải ký một bản hợp đồng nào Vàokhoảng cùng thời gian đó thì Google cũng cho phát hành một phiên vản vá lỗi 1.1của hệ điều hành này Ở cả hai phiên bản 1.0 và 1.1 Android chưa hỗ trợ soft-keyboard mà đòi hỏi các thiết bị phải sử dụng bàn phím vật lý Android cố định vấn
đề này bằng cách phát hành SDK 1.5 vào tháng Tư năm 2009, cùng với một số tínhnăng khác Chẳng hạn như nâng cao khả năng ghi âm truyền thông, vật dụng, vàcác live folder
1.3 Lịch sử cập nhật
Android đã trải qua một số các cấp nhật kể từ lần đầu phát hành Những cập nhậtnày nhìn chung có nhiệm vụ vá các lỗ hổng và thêm các tính năng mới vào hệ điềuhành
Khả năng ghi lại và xem video thông qua chế độ máy ghi hình (camcorder)
Tải video lên YouTube và ảnh lên Picasa trực tiếp từ điện thoại
Bàn phím ảo mới với khả năng đoán trước văn bản
Hỗ trợ bluetooth A2DP và AVRCP
Khả năng tự động kết nối với một thiết bị Bluetooth trong một khoảng cách nhất định
Các widget và thư mục (folder) mới có thể chuyển đến The Home screens
Trang 19Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động Android.
Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik (dex).Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc độ xử
lý Dalvik đã được thiết kế và viết bởi Dan Bornstein, người đã đặt tên cho nó saukhi đến thăm một ngôi làng đánh cá nhỏ có tên là Dalvík ở đảo Eyjafjörður, nơi màmột số tổ tiên của ông sinh sống
Từ góc nhìn của một nhà phát triển, Dalvik trông giống như máy ảo Java (JavaVirtual Machine) nhưng thực tế thì hoàn toàn khác Khi nhà phát triển viết một ứngdụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java Sau
Trang 20đó, nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi đượcứng dụng này trên Android thì nhà phát triển phải thực thi một công cụ có tên là
“dex” Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dexbytecode "Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế ảothực thi các ứng dụng Android
3 KIẾN TRÚC CỦA ANDROID
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android.Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây
Hình 2.2: Cấu trúc stack hệ thống Android
3.1 Tầng ứng dụng
Hình 2.3: Applications
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: contacts,browser, camera, Phone,… Tất cả các ứng dụng chạy trên hệ điều hành Androidđều được viết bằng Java
3.2 Application framework
Trang 21Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho các nhàphát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo Nhàphát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập,các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanhtrạng thái.
Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử dụng bởicác ứng dụng lõi Các kiến trúc ứng dụng được thiết kế để đơn giản hóa việc sửdụng lại các thành phần; bất kỳ ứng dụng có thể xuất bản khả năng của mình vàứng dụng nào khác sau đó có thể sử dụng những khả năng (có thể hạn chế bảo mậtđược thực thi bởi khuôn khổ) Cơ chế này cho phép các thành phần tương tự sẽđược thay thế bởi người sử dụng
Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, bao gồm:
Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng để thiết kế phầngiao diện ứng dụng như: gridview, tableview, linearlayout,…
Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứngdụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng đó.Một “Resource Manager” cung cấp truy xuất tới các tài nguyên không phải là mãnguồn, chẳng hạn như: localized strings, graphics, và layout files
Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị các customalerts trong status bar
Activity Manager được dùng để quản lý chu trình sống của ứng dụng và điềuhướng các activity
Hình 2.4: Application Framework
3.3 Library
Android bao gồm một tập hợp các thư viện C/C++ được sử dụng bởi nhiều thànhphần khác nhau trong hệ thống Android Điều này được thể hiện thông qua nềntảng ứng dụng Android Một số các thư viện cơ bản được liệt kê dưới đây:
Trang 22System C library: a BSD-derived implementation of the standard C system library
(libc), tuned for embedded Linux-based devices
Media Libraries - trên nền tảngPacketVideo's OpenCORE; the libraries support
playback and recording of many popular audio and video formats, as well as staticimage files, including MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị.
LibWebCore - a modern web browser engine which powers both the Android
browser and an embeddable web view
SGL - the underlying 2D graphics engine.
3D libraries - an implementation trên nền tảngOpenGL ES 1.0 APIs; the libraries
use either hardware 3D acceleration (where available) or the included, highlyoptimized 3D software rasterizer
FreeType - bitmap and vector font rendering.
SQLite - a powerful and lightweight relational database engine available to all
Trang 23Hình 2.6: Android Runtime
3.5 Linux kernel
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi như security,memory management, process management, network stack, and driver model.Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng và phần cònlại của phần mềm stack
Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool (ADT).Các Android coder sẽ cần phải sử dụng công cụ IDE (Integrated DevelopmentEnveronment) này để phát triển, debugging và testing cho ứng dụng Tuy nhiên,các coder cũng có thể không cần phải sử dụng IDE mà thay vào đó là sử dụngcommand line để biên dịch và tất nhiên là vẫn có Emulator như thường
Android Emulator được trang bị đầy đủ hầu hết các tính năng của một thiết bị thật.Tuy nhiên, một số đã bị giới hạn như là kết nối qua cổng USB, camera và video,nghe phone, nguồn điện giả lập và bluetooth
Android Emulator thực hiện các công việc thông qua một bộ xử lý mã nguồn mở,công nghệ này được gọi là QEMU (http://bellard.org/qemu/) được phát triển bởiFabrice Bellard
Tháng 12 năm 2010 thì bản cập nhật Android 2.3 cũng chính thức được Googlegiới thiệu với nhiều tính năng mới, tập trung vào việc phát triển game, đa phươngtiện và phương thức truyền thông mới Android 2.3 có tên mã là Gingerbread, hiện
bộ SDK Android 2.3 dành cho các nhà phát triển cũng đã được Google phát hành
Trang 24Hình 2.7: Android emulator
Mới đây nhất vào ngày 22 tháng 2 năm 2011, phiên bản Android 3.0 mới mã làHoneycomb chỉ dành riêng cho máy tính bản được Google phát hành Và thiết bịđầu tiên chạy hệ điều hành này là Motorola Xoom
5 HƯỚNG DẪN CÀI ĐẶT ANDROID VỚI ECLIPSE
Hình 2.8: Các phiên bản SDK
Trang 25Bước 2: Giải nén file zip bạn vừa tải về Chạy SDK Setup.exe Tiếp theo cửa sổ
Choose Packages to Install xuất hiện Nếu cửa sổ này trống rỗng -> Cancel.-> Quay
về cửa sổ Android SDK and AVD manager -> Chọn Setting, đánh dấu vào ô Force
https:// -> Chọn Available Packages
Hình 2.9: SDK và AVD Manager
Bước 3: Đánh dấu các Packages bạn muốn tải: Documents chính là phần Javadoc
mô tả hoạt động của các phương thức và các lớp (phần này chắc chắn không thểthiếu rồi), Sample là các đoạn code mẫu, SDK Platform ứng với các phiên bản hệđiều hành (2.2 - API level 8, 2.1 - API level 7, ), và Google API để phát triển cácphần mềm liên quan đến dịch vụ của Google (như Google Map nếu bạn muốn lậptrình liên quan đến GPS).Các bạn có thể tải hết nếu thích, còn muốn tối ưu thì cóthể đánh dấu như tôi (lưu ý USB drivers chỉ dành cho người sử dụng Windows vàmuốn phát triển ứng dụng test bằng điện thoại thật).-> Install Selected-> Install->Cửa sổ Install hiện ra
Trang 26Hình 2.10: Instal SDK
5.2 Tích hợp Android SDK vào Eclipse
Bước 1: Tải Eclipse nếu bạn chưa có Mọi người có thể phân vân không biết tải
bản nào cho phù hợp, nhưng theo ý kiến của tôi thì có thể dùng 1 trong 2 bản sau:Eclipse for Java Developers, hoặc Eclipse for Java and Report Developers
Bước 2: Khởi chạy Eclipse, vào Help -> Install new softwares.
Chọn Add, gõ vào ô Name tên bạn muốn và Location gõ vào địa chỉ để tải về ADT:HTML Code:
https://dl-ssl.google.com/android/eclipse/
hoặc
HTML Code:
http://dl-ssl.google.com/android/eclipse/
Trang 27nếu https không hoạt động Ngoài ra bạn cũng có thể tải thẳng ADT về máy theolink http://dl.google.com/android/ADT-0.9.7.zip sau đó chọn Archive và browse tớifile này (lưu ý không giải nén)-> OK-> Check vào phần dưới ô Name (sẽ hiện radòng Developer Tools).
Bước 3: Next, next, Accept, next, Finish (như Install mọi chương trình bình
thường)
Bước 4: Eclipse -> Windows -> Preferences -> AndroidNhấn nút Browse và chỉnh
đường dẫn tới thư mục của Android SDK bạn tải lúc trước.-> Apply-> OK
Hình 2.11: Tích hợp Android SDK vào Eclipse
5.3 Android Virtual Device (Emulator)
AVD là máy ảo cho developer phát triển ứng dụng Để tạo 1 AVD bạn vàoWindows -> Android SDK and AVD Manager -> Virtual Devices chọn New.->Cửa sổ Create new AVD hiện ra, bạn điền thông tin cho AVD bạn muốn: Name:Tùy ý (nhưng chỉ được sử dụng các ký tự "a-z", "A-Z", ".-_", nghĩa là cả khoảngtrắng cũng ko đc) Target: Chọn phiên bản hệ điều hành bạn muốn (thường tôi tạo
Trang 28một Android 1.6 và một Android 2.2 để test) SD Card: gõ vào Size SD card ảo choAVD, hoặc chỉnh tới file đã có sẵn Nhiều AVD có thể dùng chung 1 Sdcard (chỉcần tạo lần đầu, các lần sau chỉnh đường dẫn tới file đó).Skin: có thể để Default (HVGA) hoặc chọn kích cỡ màn hình bạn muốn Chỉ cầnquan tâm tới 3 option: HVGA (phân giải 320-480 như G1, G2, i5700 ), QVGA(240-320 như HTC Wildfire ), WVGA854 (480-854 như Milestone,NexusOne )-> Create AVD.
Hình 2.12: Tạo một AVD mới
5.4 Một số chức năng cần biết khi lập trình Android với Eclipse
- Debug cho ứng dụng Android: Nhiều người chuyển từ J2SE hoặcJ2ME sang Android sẽ ngạc nhiên vì câu lệnh debug kinh điển System.out.println()không còn in ra trên cửa sổ Console nữa Google đã thay thế nó bằng Logcat, mộtcửa sổ ghi lại toàn bộ hoạt động của hệ điều hành Để mở Logcat, trước tiên các
Trang 29bạn chọn Window -> Open Perspective -> Debug Nếu ko thấy option Debug thìchọn Other và tìm Debug trong cửa sổ mới hiện ra Sau đó chọn tab Debug mớixuất hiện ở góc trên bên phải của Eclipse (xem hình) Theo kinh nghiệm của tôi thìtốt nhất là Maximize Logcat ra luôn cho dễ quan sát.Cảm nhận ngày xưa khi mới
sử dụng Logcat là rối và khó dùng Nhưng càng về sau tôi càng quen và thấy nótiện hơn Console nhiều, vì Console chỉ đưa ra thông báo do chúng ta gọi, cònLogcat thì đưa cả luôn những thông báo của hệ điều hành, giúp chúng ta nắm được
hệ điều hành đang làm gì, gọi đến cái gì, khởi chạy những gì
- File Explorer của Android:File Explorer là một chức năng hữu íchGoogle đưa vào giúp chúng ta quản lý file trong sd card và cả file system data (chỉquản lý được của emulator, không thể truy nhập system data của thiết bị thật) FEgiúp bạn dễ dàng đưa file vào / lấy file ra trong sdcard ảo của emulator, xóa cơ sở
dữ liệu của chương trình để khởi tạo lại (only emulator) Mở FE bằng cách vàoWindow -> Show View -> Others -> Android -> File Explorer Tôi để FE trong cửa
sổ Debug cho tiện quản lý
- Device của Android: Device cũng là một chức năng hữu ích nữatrong Android giúp bạn quản lý thiết bị ảo cũng như thật của tôi Mở Device bằngcách vào Window -> Show View -> Device hoặc vào Window -> Show View ->Others -> Android -> Device Chức năng tôi thường sử dụng nhất của device làScreen Capture, cực kỳ tiện để lấy ảnh minh họa làm thuyết trình
6 CÁC THÀNH PHẦN TẠO NÊN MỘT ỨNG DỤNG ANDROID
Việc hiểu được các thành phần (component) tạo nên một ứng dụng Android là rấtcần thiết cho việc lập trình Các thành phần này được chia làm 6 loại bao gồm:
1 Activity: hiểu một cách đơn giản thì Activity là nền của một ứng dụng Khi khởi
động một ứng dụng Android nào đó thì bao giờ cũng có một main Activity đượcgọi, hiển thị màn hình giao diện của ứng dụng cho phép người dùng tương tác.Khởi động một Activity bằng cách dùng Intent có hai cách:
Khai báo tường minh: cung cấp chính xác thông tin của activity cần gọi (nếucùng ứng dụng chỉ cần cung cấp tên class, nếu ứng dụng khác nhau thì cungcấp tên package, tên class)
VD:
Intent intent = new Intent(getApplicationContext(), TargetActivity.class);startActivity(intent);
Trang 30 Khai báo không tường minh: cung cấp thao tác cần làm gì, với loại dữ liệunào, thao tác thuộc nhóm nào… hệ thống sẽ tìm activity tương ứng để khởiđộng.
Với cách khởi động activity không tường minh, bạn cần biết một chút vềIntent-filter
Intent-filter sẽ giúp một activity (chung hơn là một thành phần ứng dụng)đăng ký với hệ thống tôi có thể làm được thao tác gì, trong nhóm nào,với loại dữ liệu nào
Như vậy khi intent và intent-filter khớp nhau, activity sẽ được hệ thốngkhởi động
VD: Đoạn code bên dưới sẽ khởi động một activity nào đó đăng có khả năng xemảnh
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivity(intent);
Tính liên lạc giữa 2 activity
Khi chuyển sang một Activity khác ta có thể gửi kèm dữ liệu trong intent đó nhưsau:
Trang 312 Service: Service là 1 trong 4 thành phần chính trong 1 ứng dụng Android
(Activity, Service, BroadcastReceiver, ContentProvider) thành phần này chạy tronghậu trường và làm những công việc không cần tới giao diện như chơi nhạc,download, xử lí tính toán…
Một Service có thể được sử dụng theo 2 cách:
Nó có thể được bắt đầu và được cho phép hoạt động cho đến khi một ngườinào đó dừng nó lại hoặc nó tự ngắt Ở chế độ này, nó được bắt đầu bằng cách gọiContext.startService() và dừng bằng lệnh Context.stopService() Nó có thể tự ngắtbằng lệnh Service.stopSelf() hoặc Service.stopSelfResult() Chỉ cần một lệnhstopService() để ngừng Service lại cho dù lệnh startService() được gọi ra bao nhiêulần
Service có thể được vận hành theo như đã được lập trình việc sử dụng mộtInterface mà nó định nghĩa Các người dùng thiết lập một đường truyền tới đốitượng Service và sử dụng đường kết nối đó để thâm nhập vào Service Kết nối nàyđược thiết lập bằng cách gọi lệnh Context.bindService() và được đóng lại bằngcách gọi lệnh Context.unbindService() Nhiều người dùng có thể kết nối tới cùngmột thiết bị Nếu Service vẫn chưa được khởi chạy, lệnh bindService() có thể tùy ýkhởi chạy nó Hai chế độ này thì không tách biệt toàn bộ Bạn có thể kết nối vớimột Service mà nó đã được bắt đầu với lệnh startService() Ví dụ, một Service nghenhạc ở chế độ nền có thể được bắt đầu bằng cách gọi lệnh startService() cùng vớimột đối tượng Intent mà định dạng được âm nhạc để chơi Chỉ sau đó, có thể là khingười sử dụng muốn kiểm soát trình chơi nhạc hoặc biết thêm thông tin về bài háthiện tại đang chơi, thì sẽ có một Activity tạo lập một đường truyền tới Service bằngcách gọi bindService() Trong trường hợp như thế này, stopService() sẽ không thực
sự ngừng Service cho đến khi liên kết cuối cùng được đóng lại
Giống như một Activity, một Service cũng có các phương thức chu kỳ thời gian màbạn có thể cài đặt để kiểm soát những sự thay đổi trong trạng thái của nó Servicechỉ có 3 phương thức được gọi đến trong chu trình sống là:
Trang 32một luồng và bắt đầu chơi nhạc onCreate(),và sau đó luồng chơi nhạc sẽ dừng lại ởonCreate(), Active lifetime của một Service bắt đầu bằng một lệnh tới onStart().Đâylà phương thức được chuyển giao đối tượng Intent mà đã được thông qua để tớistartService() Service âm nhạc sẽ mở đối tượng Intent để quyết định xem sẽ chơiloại nhạc nào và bắt đầu phát nhạc Không có callback tương đương nào cho thờiđiểm Service ngừng lại – không có phương thức onStop() Các phương thứconCreate() và onDestroy() được gọi cho tất cả các Service dù chúng có được bắtđầu bằng Context.startService() hoặc Context.bindService() hay không Tuy nhiên,onStart() chỉ được gọi ra đối với các Service bắt đầu bằng startService() Nếu mộtService cho phép những Service khác kết nối với nó thì sẽ có thêm các phươngthức callback dành cho Service đó để thực hiện.
IBinder onBind(Intent intent) boolean onUnbind(Intent intent) void onRebind(Intent intent)
Hàm callback onBind() thông qua đối tượng Intent đã đựoc truyền đến bindService
và onUnbind() được chuyển giao đối tượng mà đã được chuyển đến Nếu Serviceđang được chỉ định (binding), onBind() quay trở lại kênh thông tin mà người dùng
sử dụng để tương tác với Service Phương thức onUnbind() có thể yêu cầuonRebind() được gọi nếu một người dùng kết nối với Service
Biểu đồ dưới đây minh họa cho các phương thức callback giành cho một Service
Hình 2.13: Chu trình sống của một Service
Trang 33Mặc dù, nó phân tách các Service được tạo ra thông qua startService với cácService mà được tạo ra bằng bindService() Hãy nhớ rằng bất kì Service nào, cho
dù nó được khởi tạo như thế nào thì nó vẫn có thể cho phép các người dùng kết nốitới nó một cách hiệu quả nhất, cho nên bất kì Service nào cũng có thể được chỉ địnhthông qua các các phương thức onBind()và onUnbind()
Để hiểu hơn về Service chúng ta hãy làm một ví dụ nhỏ sau:
Đầu tiên, mở file AndroidManifest.xml và tạo một tham chiếu đến class Service
<service android:name=".myservice.MyService"/>
Tiếp theo, tạo một file MyService.java kế thừa từ class Service:
Trong file MyService.java bắt buộc phải override phương thức:
public Ibinder onBinder(Intend intent);
Để có thể start và stop Service thì cũng cần override 2 phương thức là:
protected void onCreate();
protected void onDestroy();
Thêm một biến toàn cục: private Timer timer = new Timer();
Timer thực chất cũng là một Thread Việc bạn sử dụng Timer và Thread hoàn toànkhông có sự khác biệt gì Biến Timer này sẽ được cài đặt vào bên trong hàmonCreate như sau:
3 Content Provider và URI: Trong hệ thống Android tất cả các tài nguyên ngư
Contact, SMS,… đều được lưu trữ vào CSDL SQLite của hệ thống Cũng như các
Trang 34CSDL khác, CSDL mà hệ thống Android sử dụng để lưu trữ thông tin cũng chophép chúng ta truy vấn dữ liệu như một CSDL MSSQL thông thường Tuy nhiên,trong hệ thống đó chúng ta không cần phải thao tác bằng lệnh SQL nhiều để truyxuất dữ liệu mà thay vào đó Android đã được trang bị một API cho phép người lậptrình có thể dễ dàng truy xuất dữ liệu Đó gọi là ContentProvider ContentProvidercung cấp cho chúng ta một đối tượng con trỏ giúp chúng ta có thể dễ dàng lấy đượcbất cứ dữ liệu lưu trữ nào chỉ cần cung cấp một đường dẫn đúng đến dữ liệu đó.Đường dẫn này còn được gọi là Uri.
Tạo một Uri:
Uri uri = Uri.parse(“content://com.android.contacts/contacts”);
Cấu trúc gồm có 4 phần chính như sau:
Phần A: Đây là tiền tố chỉ ra dữ liệu được điều khiển bởi Content Provider và nókhông bao giờ thay đổi
Phần B: Phần này chỉ đến nơi lưu trữ dữ liệu Cũng giống như cấu trúc của một sốđiện thoại thì cái này có thể hình dung nó như là mã quốc gia hoặc cũng có thể coi
nó như là tên của CSDL
Phần C: Phần này chỉ ra loại dữ liệu Chẳng hạn như, dữ liệu contact, dữ liệu SMS,
… Phần này có thể coi nó như là tên của một table
Phần D: Phần này chỉ đến đúng vị trí của dữ liệu, có thể coi phần này như là ID củarow trong table hoặc một dữ liệu nào đó dùng để truy vấn
VD: Uri chỉ đến contact thứ 0 trong CSDL là
content://contacts/people/0
Để có thể thực hiện truy vấn đến vùng dữ liệu được chỉ ra bởi một Uri ta cần có 2đối tượng con trỏ được cung cấp bởi Activity đó là: Cursor và ContentResolver
Để lấy được 2 đối tượng này thì trong Activity sử dụng hàm
getContentResolver() trả về đối tượng ContentResolver
getContentResolver().query(Uri uri); trả về đối tượng Cursor
Trang 354 Intent: nền tảng để truyền tải các thông báo Intent được sử dụng để gửi các
thông báo đi nhằm khởi tạo một Activity hay Service để thực hiện công việc bạnmong muốn
Khái niệm Intend:
Là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của mộtActivity
Là cầu nối giữa các Activity: ứng dụng Android thường bao gồm nhiềuActivity, mỗi Activity hoạt động độc lập với nhau và thực hiện những côngviệc khác nhau Intent chính là người đưa thư, giúp các Activity có thể triệugọi cũng như truyền các dữ liệu cần thiết tới một Activity khác Điều nàycũng giống như việc di chuyển qua lại giữa các Forms trong lập trìnhWindows Form
Hình 2.14: Truyền dữ liệu giữa 2 Activity
Dữ liệu của Intend:
Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớpandroid.content.Intent
Các thuộc tính của một đối tượng Intend:
Hình 2.15: Các thuộc tính của Intend
Các Action được định nghĩa sẵn:
Trang 36Dưới đây là những hằng String đã được định nghĩa sẵn trong lớp Intent.
Đi kèm với nó là các Activity hay Application được xây dựng sẵn sẽđược triệu gọi mỗi khi Intent tương ứng được gửi (tất nhiên khi đượccung cấp đúng data) VD: Gọi tới một số điện thoại:
Intent dialIntent =
new Intent(Intent.ACTION_DIAL,Uri.parse("tel:123456"));startActivity(dialIntent);
Hình 2.16: Các Action đã được định nghĩa sẵn trong Intend
5 Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới
VD: bạn viết một chương trình thay thế cho phần gọi điện mặc định của Android,khi đó bạn cần một BR để nhận biết các Intent là các cuộc gọi tới
6 Notification: đưa ra các cảnh báo mà không làm cho các Activity phải ngừng
hoạt động Activity, Service, Broadcast Receiver và Content Provider mới là nhữngthành phần chính cấu thành nên ứng dụng Android, bắt buộc phải khai báo trongAndroidManifest
6.1 AndroidManifest.xml
Trong bất kì một project Android nào khi tạo ra đều có một fileAndroidManifest.xml, file này được dùng để định nghĩa các screen sử dụng, cácpermission cũng như các theme cho ứng dụng Đồng thời nó cũng chứa thông tin vềphiên bản SDK cũng như main activity sẽ chạy đầu tiên
File này được tự động sinh ra khi tạo một Android project Trong file manifest baogiờ cũng có ba thành phần chính đó là: application, permission và version
Dưới đây là nội dung của một file AndroidManifest.xml
Trang 37 android:icon = “drawable resource” Ở đây đặt đường dẫn đến file
icon của ứng dụng khi cài đặt VD: android:icon = “@drawable/icon”
Trang 38 android:name = “string” thuộc tính này để đặt tên cho ứng dụng
Android Tên này sẽ được hiển thị lên màn hình sau khi cài đặt ứngdụng
android:theme = “drawable theme” thuộc tính này để đặt theme cho
ứng dụng Các theme là các cách để hiển thị giao diện ứng dụng
Ngoài ra còn nhiều thuộc tính khác…
Permission
Bao gồm các thuộc tính chỉ định quyền truy xuất và sử dụng tài nguyên của ứngdụng Khi cần sử dụng một loại tài nguyên nào đó thì trong file manifest của ứngdụng cần phải khai báo các quyền truy xuất như sau:
File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này được sử dụng
để quản lý các thuộc tính được khai báo trong file XML của ứng dụng và các tàinguyên hình ảnh
Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nào xảy xalàm thay đổi các thuộc tính trong ứng dụng Chẳng hạn như, bạn kéo và thả một filehình ảnh từ bên ngoài vào project thì ngay lập tức thuộc tính đường dẫn đến file đócũng sẽ được hình thành trong file R.java hoặc xoá một file hình ảnh thì đường dẫntương ứng đến hình ảnh đó cũng tự động bị xoá
Có thể nói file R.java hoàn toàn không cần phải đụng chạm gì đến trong cả quátrình xây dựng ứng dụng
Dưới đây là nội dung của một file R.java:
package lean.game.gomoku;
Trang 39public final class R {
public static final class anim {
public static final int cycle_7=0x7f040000;
public static final int shake=0x7f040001;
}
public static final class array {
public static final int difficulty=0x7f060000;
}
public static final class attr {
}
public static final class color {
public static final int Blue=0x7f070008;
public static final int Red=0x7f070007;
public static final int background=0x7f070002;
public static final int background2=0x7f070000;
public static final int background3=0x7f070001;
public static final int dark=0x7f070005;
public static final int foreground=0x7f070006;
public static final int green=0x7f07000b;
public static final int hilite=0x7f070003;
public static final int light=0x7f070004;
public static final int selected=0x7f070009;
public static final int white=0x7f07000a;
public static final int yellow=0x7f07000c;
}
public static final class drawable {
Trang 40public static final int a128=0x7f020000;
public static final int a16=0x7f020001;
public static final int a32=0x7f020002;
public static final int a64=0x7f020003;
public static final int cocaro100=0x7f020004;
public static final int hinhnen=0x7f020005;
public static final int icon=0x7f020006;
public static final int o16=0x7f020007;
public static final int o32=0x7f020008;
public static final int o64=0x7f020009;
public static final int osao=0x7f02000a;
public static final int users=0x7f02000b;
public static final int users2=0x7f02000c;
public static final int web=0x7f02000d;
public static final int x128=0x7f02000e;
public static final int x16=0x7f02000f;
public static final int x32=0x7f020010;
public static final int x64=0x7f020011;
}
public static final class id {
public static final int Imgwinner=0x7f090014;
public static final int TextView01=0x7f09000a;
public static final int about_button=0x7f090011;
public static final int about_content=0x7f090000;
public static final int btn_register=0x7f090009;
public static final int cmdlogin=0x7f09000d;