MỤC LỤC
MỤC LỤC 1
DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT 2
DANH MỤC HÌNH VẼ 3
TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP 5
PHẦN 1. ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP 7
CHƯƠNG 1. ĐẶT VẤN ĐỀ 7
2.1.1. Lịch sử Android 8
2.1.2. Ưu điểm của Android 9
2.1.3. Thành phần trong ứng dụng Android 10
2.1.4. Các file cần thiết trong một ứng dụng Android 11
2.1.5. Vòng đời của 1 ứng dụng Android 13
2.1.6 Android hiện nay 14
2.3.2 Ý tưởng thuật toán 20
2.3.3 Mệnh đề 20
2.3.4 Độ phức tạp của thuật toán 21
2.4. Làm Việc với XML trong Android 22
2.4.1. XML là gì? 22
2.4.2. Dùng XML tạo giao diện cho ứng dụng Android 22
2.4.3. Dùng XML tạo cơ sở dữ liệu cho ứng dụng Android 25
2.4.4. Trình phân tích XML 26
2.4.4.1. SAX 26
2.4.4.2. DOM 27
PHẦN 2: CÁC KẾT QUẢ ĐẠT ĐƯỢC 29
CHƯƠNG 3. XÂY DỰNG ỨNG DỤNG 29
3.1 Phân tích thiết kế phần mềm 29
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 1
3.1.1 Đặc tả bài toán 29
3.1.2 Mục đích xây dựng phần mềm 29
3.1.3 Yêu cầu phần mềm 29
3.1.4 Thông số phần mềm 30
3.1.5 Hướng giải quyết 30
3.1.6 Biểu đồ User Case - Đặc tả User Case 30
3.1.8 Biểu đồ hoạt động 38
3.2.1 Khởi tạo project 39
3.2.2 Thiết kế giao diện 44
CHƯƠNG 4. CÀI ĐẶT VÀ TRIỂN KHAI 46
4.1. Cài đặt chương trình 46
4.2 Kiểm thử phần mềm trên điện thoại Android 47
DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT
Các ký hiệu hình trong phân tích hệ thống UML
Kí hiệu Tên Ý nghĩa
Tác nhân
(Actor)
Mô tả đối tượng là người hay một hệ thống nào
khác tương tác lên hệ thống đang xét.
UseCase Mô tả các chức năng của hệ thống.
Class Boundary Lớp thể hiện các thành phần giao diện người
dùng.
Class Control Mô tả các lớp đối tượng xử lý nghiệp vụ của hệ
thống.
Class Entity Lớp mô tả các thực thể của hệ thống.
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 2
Quan hệ kết
hợp
Mô tả mối quan hệ giữa tác nhân và UseCase
(một tác nhân kích hoạt một UseCase).
Quan hệ
<<Include>>
Mô tả một UseCase được sử dụng bởi một
UseCase khác.
Quan hệ
<<Extend>>
Chỉ ra một UseCase được mở rộng từ một
UseCase khác.
Quan hệ
generalization
Biểu thị UseCase này là tổng quát còn UseCase
kia là cụ thể hóa của UseCase đó.
Danh mục từ viết tắt
HĐH: Hệ Điều Hành
ADT: Android Developer Tools
SDK: Software Development Kit
SAX: Streaming API for XML
XML: Extensible Markup Language
DFS: Depth-First Search
DOM: Document Object Model
DANH MỤC HÌNH VẼ
Hình 2.1: Các file cần thiết trong một ứng dụng Android 12
Hình 2.2: Vòng đời của 1 ứng dụng Android 13
Hình 2.3 :Tỷ lệ sử dụng các phiên bản Android 14
Hình 2.4: Cài đặt SDK thành công 16
Hình 2.5:Android SDK Manager 16
Hình 2.6: Tạo máy ảo 17
Hình 2.7: Ví dụ thuật toán tìm kiếm theo chiều sâu 19
Hình 2.8: Xác định đỉnh kề trong DFS 21
Hình 2.9: Kết quả DFS 21
Hình 2.10: Cấu trúc View trong File Activity 23
Hình 2.11: Cấu trúc file Activity_main.xml 23
Hình 2.12: Tạo giao diện ứng dụng 24
Hình 2.13: Button trong Android 24
Hình 2.14: Hệ thống đối tượng dùng tạo giao diện 25
Hình 2.15: Ví dụ file XML cơ sở dữ liệu 25
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 3
Hình 2.16: Trình phân tích SAX 27
Hình 3.1: Biểu đồ User Case toàn hệ thống 30
Hình 3.2: Biểu đồ trình tự User Case Nhập thông tin điểm đầu, cuối 34
Hình 3.3 Biểu đồ trình tự User Case yêu cầu tư vấn 34
Hình 3.4: Biểu đồ trình tự User Case Tìm kiếm điểm xe buýt 35
Hình 3.5: Biểu đồ lớp toàn hệ thống 36
Hình 3.6: Biểu đồ lớp cho User Case User Case nhập thông tin điểm đầu, cuối
37
Hình 3.7: Biểu đồ lớp cho User Case yêu cầu tư vấn 37
Hình 3.8: Biểu đồ lớp cho User tìm kiếm điểm xe buýt 38
Hình 3.9: Biểu đồ hoạt động 38
Hình 3.10: Tạo ứng dụng mới (1) 39
Hình 3.11: Tạo ứng dụng mới (2) 40
Hình 3.12: Tạo ứng dụng mới (3) 42
Hình 3.13: Tạo ứng dụng mới (4) 43
Hình 3.14: Thiết kế giao diện chính của ứng dụng 44
Hình 4.1: Setting hệ thống để cài ứng dụng ngoài 46
Hình 4.2: Cài đặt, gỡ bỏ ứng dụng 47
Hình 4.3: Giao diện chính ứng dụng, Danh sách điểm dừng 47
Hình 4.4: Kết quả khi nhập điểm đầu, cuối,lựa chọn tư vấn 48
“tất cả các phương án” 48
Hình 4.5: Lựa chọn tư vấn “chỉ đi một tuyến để đến đó” 48
Hình 4.6: Lựa chọn tư vấn “Cách tốt nhất để tiết kiệm thời gian” 49
Hình 4.7: Thông báo khi người dùng chưa nhập hoặc nhập trùng điểm 49
Hình 4.8: Load dữ liệu từ cơ sở dữ liệu 50
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 4
TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP
Phần mềm tìm kiếm điểm xe buýt là đề tài nghiên cứu về việc sử dụng thuật
toán tìm kiếm chiều sâu (Depth First Search) và tư vấn hệ chuyên gia để đưa ra được
tư vấn về đường đi ngắn nhất và phù hợp nhất cho người sử dụng.
Mục đích của đề tài:
Tìm hiểu và trình bày về hệ điều hành Android, cách để phát triển một ứng dụng
Android.
Tìm hiểu và trình bày về tìm kiếm đường đi ngắn nhất bằng thuật toán tìm kiếm
chiều sâu (Depth First Search).
Tìm hiểu và trình bày về XML trong Android, cách dùng XML tạo cơ sở dữ liệu ,
phân tích XML trong ứng dụng Android.
Áp dụng thuật toán tìm kiếm chiều sâu và tư vấn hệ chuyên gia và kiến thức về hệ
điều hành Android để xây dựng thành một ứng dụng chạy trên hệ điều hành Android.
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 5
PHẦN MỞ ĐẦU
Đồ án “Xây dựng phần mềm tìm kiếm điểm xe buýt” là đồ án nghiên cứu
giải quyết vấn đề tìm đường đi ngắn nhất giữa hai địa điểm trên địa bàn Hà Nội, sử
dụng nền tảng hệ điều hành Android, thuật toán đường đi ngắn nhất và tư vấn hệ
chuyên gia.
1. Nhiệm vụ của đề tài
Phân tích và xây dựng cây đồ thị đường đi từ dữ liệu trang
/>Xây dựng thuật toán tìm kiếm chiều sâu phù hợp với bài toán tìm kiếm trong đề
tài để tìm đường đi ngắn nhất giữa hai địa điểm.
Xây dựng tư vấn hệ chuyên gia để đưa ra những tư vấn phù hợp nhất đối với
người sử dụng.
2. Bố cục đồ án tốt nghiệp
Phần 1: Đặt vấn đề và định hướng giải pháp
Nội dung phần 1 trình bày về chi tiết nhiệm vụ đề tài cần thực hiện trong khuôn
khổ đồ án tốt nghiệp, qua đó đưa ra các phương pháp giải quyết.
Trình bày về cơ sở lý thuyết hệ điều hành Android, thuật toán tìm kiếm chiều
sâu, XML trong Android, công cụ Eclipse.
Phần 2: Các kết quả đạt được
Nội dung phần 2 trình bày về phân tích thiết kế hướng đối tượng phần mềm tìm
kiếm điểm xe buýt.
Phân tích dữ liệu trang xây dựng cây đồ thị
đường đi.
Thiết kế thuật toán tìm kiếm chiều sâu; dữ liệu tư vấn hệ chuyên gia; giao diện
và các Module phần mềm
Cài đặt và kiểm thử trên hệ điều hành Android.
Đánh giá ưu, nhược điểm và khả năng ứng dụng của phần mềm.
Kết luận
Nội dung phần này trình bày về kết quả đạt được của phần mềm tìm kiếm điểm
xe buýt đạt được, hướng phát triển tương lai của phần mềm.
Tài liệu tham khảo
Nội dung phần này đưa ra các tài liệu tham khảo trong quá trình xây dựng phần
mềm.
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 6
PHẦN 1. ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP
CHƯƠNG 1. ĐẶT VẤN ĐỀ
1. 1. Nhiệm vụ của đề tài
Phân tích và xây dựng cây đồ thị đường đi từ dữ liệu trang
/>Xây dựng thuật toán tìm kiếm chiều sâu phù hợp với bài toán tìm kiếm trong đề
tài để tìm đường đi ngắn nhất giữa hai địa điểm.
Xây dựng tư vấn hệ chuyên gia để đưa ra những tư vấn phù hợp nhất đối với
người sử dụng.
1.2. Định hướng giải quyết các vấn đề trên
Lọc dữ liệu, xây dựng đường đi
Phân tích truyền thống ra file XML, sử dụng thư viện parse XML của java để
tiến hành phân tích và lọc dữ liệu đường đi, các tuyến buýt.
Sử dụng các đối tượng trong ngôn ngữ java để xây dựng cây đồ thị đường đi.
Xây dựng thuật toán tìm kiếm chiều sâu
Sử dụng giáo trình “Cấu trúc dữ liệu và giải thuật” của thầy Lê Minh Hoàng để
làm tài liệu tham khảo xây dựng thuật toán tìm kiếm chiều sâu.
Sử dụng tư duy logic để biến đổi cho phù hợp với bài toán tìm kiếm của đồ án
Xây dựng tư vấn hệ chuyên gia
Sử dụng các câu hỏi để tư vấn, lọc dữ liệu đã phân tích theo yêu cầu câu hỏi.
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 7
2.1 Hệ điều hành Android
2.1.1. Lịch sử Android
Tổng công ty Android (Android, Inc.) được thành lập tại Palo Alto, California
vào tháng 10 năm 2003 bởi Andy Rubin (đồng sáng lập công ty Danger), Rich Miner
(đồng sáng lập Tổng công ty Viễn thông Wildfire), Nick Sears (từng là Phó giám đốc
T-Mobile), và Chris White (trưởng thiết kế và giao diện tại WebTV) để phát triển,
theo lời của Rubin, "các thiết bị di động thông minh hơn có thể biết được vị trí và sở
thích của người dùng". Dù những người thành lập và nhân viên đều là những người
có tiếng tăm, Tổng công ty Android hoạt động một cách âm thầm, chỉ tiết lộ rằng họ
đang làm phần mềm dành cho điện thoại di động. Trong năm đó, Rubin hết kinh phí.
Steve Perlman, một người bạn thân của Rubin, mang cho ông 10.000 USD tiền mặt
nhưng từ chối tham gia vào công ty.
Google mua lại Tổng công ty Android vào ngày 17 tháng 8 năm 2005, biến nó
thành một bộ phận trực thuộc Google. Những nhân viên của chủ chốt của Tổng công
ty Android, gồm Rubin, Miner và White, vẫn tiếp tục ở lại công ty làm việc sau
thương vụ này. Vào thời điểm đó không có nhiều thông tin về Tổng công ty, nhưng
nhiều người đồn đoán rằng Google dự tính tham gia thị trường điện thoại di động sau
bước đi này. Tại Google, nhóm do Rubin đứng đầu đã phát triển một nền tảng thiết bị
di động phát triển trên nền nhân Linux. Google quảng bá nền tảng này cho các nhà
sản xuất điện thoại và các nhà mạng với lời hứa sẽ cung cấp một hệ thống uyển
chuyển và có khả năng nâng cấp. Google đã liên hệ với hàng loạt hãng phần cứng
cũng như đối tác phần mềm, bắn tin cho các nhà mạng rằng họ sẵn sàng hợp tác với
các cấp độ khác nhau.
Ngày 5 tháng 11 năm 2007, Liên minh thiết bị cầm tay mở (Open Handset
Alliance), một hiệp hội bao gồm nhiều công ty trong đó có Texas Instruments, Tập
đoàn Broadcom, Google, HTC, Intel, LG, Tập đoàn Marvell Technology, Motorola,
Nvidia, Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile được thành lập
với mục đích phát triển các tiêu chuẩn mở cho thiết bị di động. Cùng ngày, Android
cũng được ra mắt với vai trò là sản phẩm đầu tiên của Liên minh, một nền tảng thiết
bị di động được xây dựng trên nhân Linux phiên bản 2.6. Chiếc điện thoại chạy
Android đầu tiên được bán ra là HTC Dream, phát hành ngày 22 tháng 10 năm
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 8
2008.Biểu trưng của hệ điều hành Android mới là một con rôbốt màu xanh lá cây do
hãng thiết kế Irina Blok tại California vẽ.
Từ năm 2008, Android đã trải qua nhiều lần cập nhật để dần dần cải tiến hệ
điều hành, bổ sung các tính năng mới và sửa các lỗi trong những lần phát hành trước.
Mỗi bản nâng cấp được đặt tên lần lượt theo thứ tự bảng chữ cái, theo tên của một
món ăn tráng miệng; ví dụ như phiên bản 1.5 Cupcake (bánh bông lan nhỏ có kem)
tiếp nối bằng phiên bản 1.6 Donut (bánh vòng). Phiên bản mới nhất là 4.2 Jelly Bean
(kẹo dẻo).
Vào năm 2010, Google ra mắt loạt thiết bị Nexus—một dòng sản phẩm bao
gồm điện thoại thông minh và máy tính bảng chạy hệ điều hành Android, do các đối
tác phần cứng sản xuất. HTC đã hợp tác với Google trong chiếc điện thoại thông
minh Nexus đầu tiên, Nexus One. Kể từ đó nhiều thiết bị mới hơn đã gia nhập vào
dòng sản phẩm này, như điện thoại Nexus 4 và máy tính bảng Nexus 10, lần lượt do
LG và Samsung sản xuất. Google xem điện thoại và máy tính bảng Nexus là những
thiết bị Android chủ lực của mình, với những tính năng phần cứng và phần mềm mới
nhất của Android.
Lõi của Android là nhân Linux có nền tảng là mã nguồn mở 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++. Google đã công bố hầu hết các mã nguồn của Android theo bản cấp
phép Apache – bản cấp phép dùng cho phần mềm nguồn mở. Cùng với một kho ứng
dụng phong phú và cộng đồng phát triển rộng lớn của Android, Google còn đưa ra bộ
công cụ Android SDK cung cấp rất nhiều APIs cần thiết cho việc viết các ứng dụng
Android bằng ngôn ngữ lập trình Java.
2.1.2. Ưu điểm của Android
Là hệ điều hành mã nguồn mở
Điều làm cho Android được chú ý nhất chính vì nó là mã nguồn mở. Android đã
thu hút nhiều nhà phát triển và từ tất cả các tầng lớp xã hội khi Goole phân phối miễn
phí Android và các đoạn mã có bản quyền khác cho bất cứ ai muốn tham gia phát
triển phần mềm cho Google. Vì thế, chỉ trong một thời gian ngắn, các lập trình viên
cũng như nhà phát triển có thể nhanh chóng đưa ra phiên bản Android được tùy chỉnh
của riêng mình.
Kho ứng dụng phong phú
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 9
Với kho ứng dụng phong phú, người sử dụng có thể tùy chọn những ứng dụng đáp
ứng nhu cầu sử dụng của mình.
Phần cứng đa dạng
Về phần cứng, Android hiện đang là hệ điều hành xuất hiện trên nhiều thiết bị
nhất. Các nhà sản xuất như Sony Ericsson, Samsung, HTC, và Motorola, LG…cung
cấp cho người dùng sự đa dạng về mẫu mã sản phẩm để lựa chọn.
Phần mềm
Khi nói đến phần mềm, Android có khả năng chạy nhiều ứng dụng cùng một lúc
bởi có tính năng quản lí không gian chuyển đổi - đây là một tính năng mà không phải
thiết bị di động nào cũng hỗ trợ do hạn chế phần cứng. Android cũng được cài đặt
sẵn ActiveSync, cho phép bạn đồng bộ danh bạ, mail, và thông tin cá nhân khi thiết bị
được kết nối với máy tính một cách dễ dàng. Trong khi đó, BlackBerry yêu cầu phải
cài đặt một số phần mềm và máy chủ.
2.1.3. Thành phần trong ứng dụng Android
Một ứng dụng Android hoàn thiện bao gồm 6 thành phần:
- 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 được gọ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.
- Service : thành phần chạy ẩn trong Android,service sử dụng để cập nhật dữ
liệu,đưa ra các cảnh báo (Notification) và không bao giờ hiển thị cho người dùng thấy.
- Content Provider : kho dữ liệu chia sẻ,được sử dụng để chia sẻ dữ liệu giữa
các ứng dụng.
- Intent : nền tảng để truyền tải các thông báo,được sử dụng để gửi các thông
báo đi nhằm khởi tạo một Activity hay một Service để thực hiện công việc bạn mong
muốn.
- Broadcast Receiver : thành phần thu nhận các Intent bên ngoài gửi tới.
- Notification : đưa ra các cảnh báo mà không làm cho các Activity ngừng hoạt
động.
Trong đó các thành phần : Activity,Service,Content Provider, Broadcast
Receiver là những thành phần chính cấu thành nên ứng dụng Android và buộc phải
khai báo trong Android manifest. Các tiến trình xử lý (process) trong Android được
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 10
quản lý theo cơ chế ưu tiên,các tiến trình xử lý có mức ưu tiên (priority) thấp sẽ bị
giải phóng mà không bị cảnh báo nhằm đảm bảo tài nguyên.
- Foreground process : là process của ứng dụng hiện thời đang được người
dùng tương tác.
- Visible process : là process của ứng dụng mà Activity đang hiện thị đối với
người dùng.
- Service process : là dịch vụ đang chạy
- Background process : là process của ứng dụng mà Activity của nó không
hiện thị với người dùng.
- Empty process : process không có bất cứ một thành phần nào Activity.
Theo chế độ ưu tiên thì khi cần tài nguyên, Android sẽ tự động ngừng quá
trình xử lý mà đầu tiên là Empty process. Activity là thành phần đóng vai trò chính và
quan trọng nhất để cấu thành một ứng dụng Android. Hệ điều hành Android quản lý
Activity theo dạng stack : khi một Activity mới được khởi tạo,nó sẽ xếp đầu stack và
trở thành Running Activity,các Activity trước đó sẽ bị tạm dừng và chỉ hoạt động trở
lại khi Activity mới được giải phóng.
2.1.4. Các file cần thiết trong một ứng dụng Android
AndroidManifest.xml
Trong bất kì một dự án Android nào khi tạo ra đều có một file
AndroidManifest.xml, file này được dùng để định nghĩa các màn hình sử
dụng, các quyền cũng như các giao diện cho ứng dụng. Đồng thời nó cũng
chứa thông tin về phiên bản SDK cũng như màn hình chính sẽ chạy đầu tiên.
File này được tự động sinh ra khi tạo một dự án Android. Trong file manifest bao giờ
cũng có 3 thành phần chính đó là: application, permission và version.
Application: chứa các giá trị định nghĩa cho một ứng dụng Android
như icon, tên ứng dụng, chế độ hiển thị giao diện…Ngoài ra cần phải khai báo các
Activity và Service có trong chương trình tại đây.
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 ứng dụng. Khi cần sử dụng một loại tài nguyên nào đó thì trong
file manifest của ứng dụng cần phải khai báo các quyền truy xuất tương ứng
SDK version: Xác định phiên bản SDK nhỏ nhất mà ứng dụng hiện đang sử
dụng tương ứng với một phiên bản hệ điều hành Android mà ứng dụng có thể tương
thích.
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 11
Thư mục rec
Thư mục chứa tài nguyên ứng dụng. Thư mục này bao gồm 5 thư mục con là:
+ drawable – hdpi; drawable – mdpi; drawable – ldpi
+ Layout (chứa các file xml dùng để khai báo và thiết kế giao diện cho một
Activity hay một thành phần điều khiển con trong ứng dụng Android)
+ values (gồm các file xml chứa các giá trị chuỗi, mã màu … Giúp người lập
trình có thể dễ dàng thay đổi những giá trị này trong ứng dụng một cách nhanh
chóng mà không cần phải sửa trong code của ứng dụng.)
Drawable – hdpi, drawable – mdpi, drawable – ldpi là ba thư mục dùng để
chứa các hình ảnh được sử dụng trong quá trình thiết kế giao diện ứng dụng, bao gồm
cả icon của ứng dụng. 3 thư mục tương ứng với hình ảnh sẽ được sử dụng ở ba độ
phân giải khác nhau lần lược là: cao, trung bình, thấp. Điều này giúp các nhà lập
trình có thể thiết kế giao diện ứng dụng phù hợp với nhiều độ phân giải màn hình
tương thích với nhiều lại thiết bị.
+ Libs: chứa các thư viện của ứng dụng
Thư mục src
Là vị trí chứa gói các class trong ứng dụng. Các class có thể là các một Activity
hoặc Service hoặc các lớp chức năng nào đó được viết bằng ngôn ngữ Java dựa trên
API được cung cấp sẵn của Android. Cần phải có ít nhất một Activity và khai báo là
Activity chính để chương trình có thể chạy được.
File R.java
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ài nguyê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 xa làm
thay đổi các thuộc tính trong ứng dụng.
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.
Hình 2.1: Các file cần thiết trong một ứng dụng Android
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 12
2.1.5. Vòng đời của 1 ứng dụng Android
- Activity (Running) : Activity đang hiện thị trên màn hình (foreground).
- Paused : Activity vẫn hiện thị (visible) nhưng không thể tương tác (lost focus).
- Stop : Activity bị thay thế hoàn toàn bởi một Activity mới sẽ tiến đến trạng
thái stop.
- Killed : khi hệ thống bị thiếu bộ nhớ,nó sẽ tự động giải phóng bộ nhớ bằng
cách đóng các tiến trình theo thứ tự ưu tiên. Các Activity ở trạng thái Paused hoặc
Stop cũng có thể bị đóng và khi nó hiện thị lại thì phải khởi động lại hoàn toàn và
phục hồi lại trạng thái trước đó.
Hình 2.2: Vòng đời của 1 ứng dụng Android
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 13
2.1.6 Android hiện nay
Android được đón nhận bằng một thái độ thờ ơ khi nó ra mắt vào năm 2007.
Nhưng chỉ tron một thời gian phát triển, Android đã khẳng định được thế mạnh của
mình và trở thành 1 hệ điều hành được ưa chuộng nhất hiện nay.
Công ty nghiên cứu thị trường Canalys đã ước tính trong quý 2 năm 2009 rằng
Android có 2,8% thị phần điện thoại thông minh được bán ra toàn cầu.
Đến quý 4 năm 2010 con số này tăng lên 33% thị phần, trở thành nền tảng
điện thoại thông minh bán chạy hàng đầu.
Đến quý 3 năm 2011 Gartner ước tính rằng hơn một nửa (52,5%) thị trường
điện thoại thông minh thuộc về Android.
Đến quý 3 năm 2012 Android đã có 75% thị phần điện thoại thông minh toàn
cầu theo nghiên cứu của hãng IDC.
Vào tháng 7 năm 2011, Google nói rằng có 550.000 thiết bị Android mới được
kích hoạt mỗi ngày, đỉnh điểm là 400.000 máy một ngày vào tháng 5, và có hơn 100
triệu thiết bị đã được kích hoạt với mức tăng 4,4% mỗi tuần.
Vào tháng 9 năm 2012, 500 triệu thiết bị đã được kích hoạt với 1,3 triệu lượt
kích hoạt mỗi ngày.
Thị phần của Android có khác nhau theo khu vực. Vào tháng 7 năm 2012, thị phần
Android tại Mỹ là 52%,
nhưng lên tới 90% tại Trung Quốc.
Tỷ lệ sử dụng các phiên bản khác nhau tính đến ngày 4 tháng 3 năm 2013. Phần
lớn các thiết bị Android cho tới nay vẫn chạy hệ điều hành phiên bản cũ
2.3 Gingerbread (bánh gừng) được phát hành ngày 6 tháng 12 năm 2010, do nhiều
thiết bị cấp thấp sử dụng chúng vẫn được phát hành.
Hình 2.3 :Tỷ lệ sử dụng các phiên bản Android
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 14
2.2. Công cụ phát triển hệ điều hành Android
Android SDK
Công cụ phát triển ứng dụng Android (Android SDK) bao gồm một bộ công cụ
phát triển toàn diện bao gồm một trình gỡ lỗi, các thư viện, thiết bị giả lập dựa trên
QEMU, tài liệu, mẫu ví dụ tham khảo, và hướng dẫn. Hiện tại Android SDK được hỗ
trợ các máy tính chạy hệ điều hành Linux, Mac OS X 10.5.8 hoặc mới hơn, Windows
XP, Windows Vista, Windows 7 và mới hơn. Hỗ trợ chính thức môi trường phát triển
tích hợp (IDE) Eclipse bằng cách sử dụng Android Development Tools(ADT) Plugin,
bên cạnh đó còn có IntelliJ IDEA IDE (tất cả các phiên bản) hỗ trợ đầy đủ lập trình
Android, và NetBeans IDE cũng hỗ trợ phát triển Android thông qua một Plugin.
Ngoài ra, các nhà phát triển có thể sử dụng trình soạn thảo bất kỳ để chỉnh sửa các
tập tin Java và XML, sau đó sử dụng công cụ dòng lệnh (Java Development Kit và
Apache Ant được yêu cầu) để tạo, biên dịch và gỡ lỗi các ứng dụng Android cũng
như kiểm soát các thiết bị Android (ví dụ, kích hoạt khởi động lại máy, cài đặt phần
mềm từ xa).
Cải tiến của Android SDK đi đôi với sự phát triển của toàn bộ nền tảng
Android. SDK cũng hỗ trợ các phiên bản cũ hơn của nền tảng Android trong trường
hợp các nhà phát triển muốn phát triển ứng dụng cho thiết bị cũ. Các thành phần của
Android SDK dễ dàng tải xuống vì thế các phiên bản của platform có thể tải về phiên
bản mới nhất cũng như cũ hơn phục vụ quá trình kiểm thử.
Các ứng dụng Android được đóng gói thành tệp apk. Và dữ liệu được lưu trữ
trong thưc mục /data/app trên hệ điều hành Android. Trong tệp APK chứa tệp tin
.dex(mã nguồn được dịch thành mã byte chạy trên bộ xử lý dalvik), và các tập tin tài
nguyên, vv…
Cách cài đặt:
Bước 1: Download và cài đặt Eclipse
- Vào link để download Eclipse - > Giải
nén, vậy là có thể dùng được eclipse.
Bước 2: Cài đặt ADT Plugin
• Mở eclipse lên, bấm vào Help Install new software.
• form hiện lên , chọn Add…
• Mục Name, nhập tên gì cũng được, ví dụ như ADT plugin
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 15
• Mục Location, nhập vào link này: />Sau đó bấm OK, chọn những gì cần thiết -> Next.
Bước 3: Cài đặt Android SDK
• Tải Android SDK tại link này
(chọn Window, Mac và Linux tùy vào hệ điều hành đang dùng)
• 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.
• Cài đặt thành công sẽ có icon của Android SDK Manager và Android Virtual
Device Manager trên thanh công cụ của Eclipse
Hình 2.4: Cài đặt SDK thành công
Bước 4: Cài đặt các gói trong SDK
Eclipse window Android SDK and AVD manager Available packages
chọn level muốn cài đặt.
Các level sẽ được sắp xếp theo thứ tự của API. Google sẽ update các gói mới hỗ trợ.
Hiện nay phiên bản level cao nhất của API là 17 trương đương với Android 4.2.2
Hình 2.5:Android SDK Manager
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 16
Bước 5: Tạo máy ảo
Click vào icon Android Virtual Device Manager trên thanh công cụ Eclipse
hoặc vào Menu Window / Android Virtual Device Manager
Hộp thoại Android Virtual Device Manager sẽ hiển thị.Click chọn New để tạo một
máy ảo mới. Điền một số thông tin cho máy ảo cân thiết như: tên, dung lượng…
Hình 2.6: Tạo máy ảo
Công cụ khác
App Inventor for Android (Công cụ phát triển ứng dụng Android trên nền
web)
Ngày 12/7/2010, Google chính thức giới thiệu công cụ lập trình trực quan App
Inventor dùng để phát triển phần mềm ứng dụng trên hệ điều hành Android.
App Inventor là công cụ lập trình dành cho mọi người, kể cả trẻ em.
Theo Google thì “để sử dụng App Inventor người dùng không cần phải là
một lập trình viên”. App Inventor không đòi hỏi bất kì kiến thức gì liên quan đến
lập trình. Mã của phần mềm sẽ được tạo bởi App Inventor và người dùng chỉ cần
chọn xem ứng dụng của mình bao gồm những thành phần gì mà thôi. Với công
cụ App Inventor, Google tạo điều kiện để mọi người có thể tự xây dựng phần mềm
ứng dụng cho thiết bị di động dùng hệ điều hành Android.
App Inventor có sẵn đủ loại thẻ lệnh giúp bạn làm mọi việc với điện thoại
Android: thẻ lưu giữ thông tin, thẻ lặp lại thao tác nào đó nhiều lần, thẻ thực hiện
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 17
thao tác với điều kiện định trước. Thậm chí có cả thẻ lệnh giúp bạn liên lạc với các
dịch vụ trên mạng như Twitter.
App Inventor rất dễ dùng và cũng rất mạnh mẽ. Phần mềm ứng dụng của bạn
có thể lưu trữ dữ liệu do người dùng tạo ra trong một cơ sở dữ liệu. Bạn có thể tạo ra
loại ứng dụng trong đó giáo viên lưu trữ nhiều câu hỏi để tự động tạo nên đề thi.
Vì App Inventor cho phép truy xuất bộ định vị GPS, bạn có thể tạo ra những
ứng dụng phụ thuộc vị trí của bạn. Bạn có thể tạo ra ứng dụng giúp bạn ghi nhớ vị trí
đậu xe của mình, ứng dụng hiển thị vị trí của bạn bè trong một buổi trình diễn ca
nhạc, hiển thị vị trí của các đồng nghiệp trong một cuộc hội thảo hoặc ứng dụng
hướng dẫn đi lại trong trường học, trong cơ quan, ứng dụng hướng dẫn tham quan
một viện bảo tàng nào đó.
Tuy nhiên, người dùng vẫn phải cài đặt một phần mềm Java mang tên App
Inventor Extras, có nhiệm vụ điều khiển điện thoại Android (kết nối với máy tính
thông qua cổng USB).Nhờ vậy, người dùng có thể nhanh chóng chuyển ứng dụng từ
máy tính cá nhân qua điện thoại Android để chạy thử.Nhóm dự án App Inventor tại
Google dự định bổ sung những bộ mô phỏng điện thoại Android để có thể sử dụng
App Inventor mà không cần có điện thoại Android thực sự gắn vào máy tính.
- Basic4android: Là một môi trường phát triển đơn giản nhưng mạnh mẽ cho
các thiết bị Android . Basic4android ngôn ngữ tương tự như ngôn ngữ Visual Basic
với sự hỗ trợ bổ sung cho các đối tượng. Các ứng dụng Basic4android biên soạn
được cung cấp cho các thiết bị Android, Không giống như các IDE khác
Basic4android chỉ tập trung 100% vào phát triển Android.
- Android Studio, môi trường lập trình phát triển ứng dụng mới vừa được giới
thiệu tại Google I/O 2013. Dựa trên “IntelliJ IDEA Community Edition”, công cụ này
hoạt động giống WYSIWYG, cho phép lập trình viên tạo ứng dụng, dễ dàng thực
hiện các thay đổi và xem trước trong thời gian thực, đồng thời cũng có khả năng tăng
tốc sản phẩm, thiết kế giao diện đẹp hơn trước. Đặc biệt là tiếng Việt cũng được hỗ
trợ trong Android Studio. Android Studio hỗ trợ một loạt các giả lập để xem trước
ứng dụng, vì vậy ngay cả khi bạn không có thiết bị thử nghiệm, bạn vẫn có thể chắc
chắn rằng mọi thứ đều hoạt động trơn tru. Bên cạnh đó, loạt công cự như lời khuyên
tối ưu hóa, đồ thị doanh số bán hàng, và số liệu lấy từ phân tích sẽ giúp các nhà phát
triển quản lý ứng dụng đang bán của mình và tìm ra hướng đi cụ thể với từng thiết bị
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 18
Android. lập trình viên có thể theo dõi tốt hơn việc tích hợp quảng cáo vào app nhờ
tính năng Referral Tracking, theo dõi xem nguồn cài đặt ứng dụng đến từ nơi
nào/thiết bị nào. Những biểu đồ mới thì giúp đơn giản hóa việc phân tích doanh thu
của app (Revenue Graph).
Một trong số những tính năng mới của môi trường phát triển này đó là nó hỗ trợ
tốt hơn việc bố cục ứng dụng cho nhiều thiết bị khác nhau, đảm bảo rằng app viết ra
có thể tương thích với màn hình của cả smartphone lẫn tablet. Những thay đổi trong
mã lập trình sẽ được hiển thị theo thời gian thực trên công cụ mô phỏng đi kèm.
Google cũng bổ sung thêm khả năng kéo thả các thành phần đồ họa để quá trình xây
dựng ứng dụng trở nên dễ dàng và nhanh chóng hơn. Android Studio còn cho phép
xem lại app ở nhiều ngôn ngữ khác nhau trong cùng một giao diện để lập trình viên
có thể chỉnh sửa những lỗi còn tồn tại. Đây chỉ là một trong số những tính năng của
Android Studio và Google sẽ công bố thêm trong thời gian tới.
2.3.Thuật toán tìm kiếm theo chiều sâu
Khi giải quyết nhiều bài toán lý thuyết đồ thị, ta luôn phải duyệt qua tất cả các
đỉnh của đồ thị đó. Cho nên, cần có thuật toán duyệt toàn bộ các đỉnh của đồ thị này.
Gọi chung là thuật toán duyệt đồ thị. Trong đó có thuật toán duyệt theo chiều sâu và
duyệt theo chiều rộng.
2.3.1 Định nghĩa
Tìm kiếm ưu tiên chiều sâu hay tìm kiếm theo chiều sâu (tiếng Anh: Depth-
first search - DFS) là một thuật toán duyệt hoặc tìm kiếm trên một cây hoặc một đồ thị.
Thuật toán khởi đầu tại gốc (hoặc chọn một đỉnh nào đó coi như gốc) và phát triển xa
nhất có thể theo mỗi nhánh.
Hình 2.7: Ví dụ thuật toán tìm kiếm theo chiều sâu
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 19
Tìm kiếm ưu tiên chiều sâu bắt đầu thăm đỉnh A, đi theo cạnh trái, tiếp tục tìm
kiếm xong ở cây con trái mới chuyển sang tìm kiếm ở cây con phải. Thứ tự thăm
viếng các đỉnh là: A, B, D, F, E, C, G.
Quá trình viếng thăm các đỉnh diễn ra như sau: Sau khi thăm đỉnh A, vì B chưa
được thăm nên theo cạnh AB ta thăm B, tiếp tục theo cạnh BD tới viếng thăm D. Từ D
không thể tiếp tục đi xa hơn, ta quay lại B. Từ B, theo BF đến thăm F, từ F đến thăm E. Từ
E vì A đã viếng thăm nên ta quay lại F, rồi quay lại B. Tại B vì tất cả các khả năng từ B đã
xem xét nên ta quay lại A. Từ A, quá trình tiếp tục với các đỉnh C và G.
2.3.2 Ý tưởng thuật toán
1. DFS trên đồ thị vô hướng cũng giống như khám phá mê cung với một cuộn
chỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc. Trong đó mỗi đỉnh s trong
đồ thị tượng trưng cho một cửa trong mê cung.
2. Ta bắt đầu từ đỉnh s, buộc đầu cuộn chỉ vào s và đánh đấu đỉnh này "đã thăm".
Sau đó ta đánh dấu s là đỉnh hiện hành u.
3. Bây giờ, nếu ta đi theo cạnh (u,v) bất kỳ.
4. Nếu cạnh (u,v) dẫn chúng ta đến đỉnh "đã thăm" v, ta quay trở về u.
5. Nếu đỉnh v là đỉnh mới, ta di chuyển đến v và lăn cuộn chỉ theo. Đánh
dấu v là "đã thăm". Đặt v thành đỉnh hiện hành và lặp lại các bước.
6. Cuối cùng, ta có thể đi đến một đỉnh mà tại đó tất cả các cạnh kề với nó đều
dẫn chúng ta đến các đỉnh "đã thăm". Khi đó, ta sẽ quay lui bằng cách cuộn
ngược cuộn chỉ và quay lại cho đến khi trở lại một đỉnh kề với một cạnh còn
chưa được khám phá. Lại tiếp tục quy trình khám phá như trên.
7. Khi chúng ta trở về s và không còn cạnh nào kề với nó chưa bị khám phá là
lúc DFS dừng.
2.3.3 Mệnh đề
Gọi G là một đồ thị vô hướng, trên đó ta sẽ thực hiện thao tác DFS với đỉnh
bắt đầu là s thì:
1. Phép duyệt sẽ thăm tất cả các đỉnh cùng thành phần liên thông với s.
2. Các cạnh có nhãn "đã thăm" sẽ tạo ra một cây tối đại của thành phần liên
thông chứa s.
Chứng minh :
1. Khẳng định 1, là hiển nhiên vì DFS duyệt qua tất cả các đỉnh kề với đỉnh
hiện hành(Có thể chứng minh hòa chỉnh hơn bằng phản chứng).
2. Khẳng định 2, đúng do ta chỉ đánh dấu các cạnh đi đến một đỉnh mới nên
không thể tạo ra chu trình. Như vậy DFS tạo ra một cây. Hơn nữa, DFS thăm
tất cả các đỉnh thuộc thành phần liên thông nên cây này là cây tối đại.
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 20
2.3.4 Độ phức tạp của thuật toán
1. DFS được gọi đúng 1 lần ứng với mỗi đỉnh.
2. Mỗi cạnh được xem xét đúng 2 lần, mỗi lần từ một đỉnh kề với nó.
3. Với n
s
đỉnh và m
s
cạnh thuộc thành phần liên thông chứa s, một phép DFS bắt
đầu tại s sẽ chạy với thời gian O(n
s
+ m
s
) nếu:
o Đồ thị được biểu diễn bằng cấu trúc dữ liệu dạng danh sách kề.
o Đặt nhãn cho một đỉnh là "đã thăm" và kiểm tra xem một đỉnh "đã
thăm chưa tốn chi phí O(degree).
o Bằng cách đặt nhãn cho các đỉnh là "đã thăm", ta có thể xem xét một
cách hệ thống các cạnh kề với đỉnh hiện hành nên ta sẽ không xem xét
một cạnh quá 1 lần.
Xác định đỉnh kề trong DFS
o Kết quả của DFS phụ thuộc vào cách ta chọn đỉnh kế tiếp.
Hình 2.8: Xác định đỉnh kề trong DFS
o Nếu ta bắt đầu tại A và thử cạnh nối đến F, sau đó đến B, rồi đến E, C,
cuối cùng là G ta được:
Hình 2.9: Kết quả DFS
o Nếu cũng bắt đầu từ A nhưng đi theo trình tự, tập các cạnh đã
thăm, backedge và các điểm đệ quy sẽ khác trước. Thứ tự (A-G-C-E- B-F)
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 21
2.3.5 Thuật toán
2.4. Làm Việc với XML trong Android
2.4.1. XML là gì?
- XML (viết tắt từ tiếng Anh eXtensible Markup Language, "Ngôn ngữ Đánh dấu Mở
rộng") là ngôn ngữ đánh dấu với mục đích chung do W3C đề nghị, để tạo ra các ngôn
ngữ đánh dấu khác.
- XML cung cấp một phương tiện dùng văn bản (text) để mô tả thông tin và áp dụng
một cấu trúc kiểu cây cho thông tin đó. Tại mức căn bản, mọi thông tin đều thể hiện
dưới dạng text, chen giữa là các thẻ đánh dấu (markup) với nhiệm vụ ký hiệu sự phân
chia thông tin thành một cấu trúc có thứ bậc của các dữ liệu ký tự, các phần tử dùng
để chứa dữ liệu, và các thuộc tính của các phần tử đó.
- XML tương tự như HTML, nhưng các <thẻ phần từ> là do người dùng tự định
nghĩa.
- XML được thiết kế đơn giản, dễ hiểu và dễ gửi và nhận trong môi trường Internet
- Rất nhiều công ty nổi tiếng trên thế giới sử dụng chuẩn XML này để lưu trữ dữ liệu
nội bộ như: Microsoft Office, OpenOffice.org, và iWork của Apple.
Cú pháp XML cơ bản cho một phần tử
:
<tên thuộc_tính="giá trị">nội dung</tên thuộc_tính >
2.4.2. Dùng XML tạo giao diện cho ứng dụng Android
Giao diện người dùng đồ họa cho một ứng dụng Android được xây dựng bởi một hệ
thống các đối tượng View và ViewGroup. Đối tượng View bao gồm các giao diện
người dùng như Button hoặc TextField … đối tượng ViewGroup dùng để định nghĩa
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 22
public void ThuatToanTK_ChieuSau(int u) {
VET[u] = false;
for (int i = 1; i <= SoDinh; i++) {
if ((VET[i]) && (DUONGDI[u][i])) {
LUUDAUDUONGDI[i] = u;
if (i == End1) {
KetQua();
End = End1;
VET[End] = true;
} else {
ThuatToanTK_ChieuSau(i);
}
}
}
}
layout cho các view con của nó sắp xếp ra sao: sắp xếp theo kiểu lưới hay theo chiều
dọc …
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.
Hình 2.10: Cấu trúc View trong File Activity
Khi tạo mới một ứng dụng Android, các file về giao diện của ứng dụng sẽ được chứa
trong thư mục res/layout/ của ứng dụng. Thông thường khi mới khởi tạo, file giao
diện mặc định của ứng dụng có tên: activity_main.xml . File này có cấu trúc như sau:
Hình 2.11: Cấu trúc file Activity_main.xml
Để tạo một file xml về giao diện mới cho ứng dụng , tiến hành theo các bước sau
B1: Chọn File >>New>>Android XML File
B2: Cửa sổ New Androif XML File hiện lên.
Chọn kiểu Resource là layout. Điền tên cho layout trong File. Chọn loại layout trong
Root Element.
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 23
Hình 2.12: Tạo giao diện ứng dụng
Nhấn Next để cài đặt một số thuộc tính cho file layout.
Nhấn Finish để tạo file layout.
Trong Android, để xây dựng được giao diện, ADT cung cấp cho người dùng
rất nhiều đối tượng như: Button, textview,edittext,… Người dùng có thể tùy chỉnh
một số thuộc tính của đối tượng để tạo được một giao diện hợp lý nhất. Dưới đây là
những thuộc tính cơ bản của một Button.
Hình 2.13: Button trong Android
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 24
Hình 2.14: Hệ thống đối tượng dùng tạo giao diện
2.4.3. Dùng XML tạo cơ sở dữ liệu cho ứng dụng Android
Để tạo cơ sở dữ liệu cho ứng dụng Android, có thể dùng plugin SQLite, đơn
giản hơn có thể dùng file định dạng XML. Cấu trúc của file cơ sở dữ liệu này sử dụng
cấu trúc của những file XML khác. Đó là bao gồm các thẻ (do người dùng tự định
nghĩa.
<tên thuộc_tính="giá trị">nội dung</tên thuộc_tính >
Ví dụ:
Hình 2.15: Ví dụ file XML cơ sở dữ liệu
Sinh viên thực hiện: Bùi Thị Hưởng - Lớp K49 ĐH CNTT 25