Đồ án tốt nghiệp chuyên ngành công nghệ phần mềm về ứng dụng viết cho các thiết bị chạy hệ điều hành android 2.3 trở lên. Nội dung tìm kiếm điểm xe bus dựa vào thuật toán tìm kiếm theo chiều sâu
Trang 1MỤC LỤC
MỤC LỤC 1
DANH MỤC KÝ HIỆU, TỪ VIẾT TẮT 4
DANH MỤC HÌNH VẼ 5
TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP 7
PHẦN 1 ĐẶT VẤN ĐỀ VÀ ĐỊNH HƯỚNG GIẢI PHÁP 9
CHƯƠNG 1 ĐẶT VẤN ĐỀ 9
1.1 Nhiệm vụ của đề tài 9
1.2 Định hướng giải quyết các vấn đề trên 9
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 10
2.1 Hệ điều hành Android 10
2.1.1 Lịch sử Android 10
2.1.2 Ưu điểm của Android 11
2.1.3 Thành phần trong ứng dụng Android 12
2.1.4 Các file cần thiết trong một ứng dụng Android 13
2.1.5 Vòng đời của 1 ứng dụng Android 15
2.1.6 Android hiện nay 16
2.2 Công cụ phát triển hệ điều hành Android 17
2.3.Thuật toán tìm kiếm theo chiều sâu 21
2.3.1 Định nghĩa 21
2.3.2 Ý tưởng thuật toán 22
2.3.3 Mệnh đề 22
2.3.4 Độ phức tạp của thuật toán 23
2.4 Làm Việc với XML trong Android 24
2.4.1 XML là gì? 24
2.4.2 Dùng XML tạo giao diện cho ứng dụng Android 25
Trang 22.4.3 Dùng XML tạo cơ sở dữ liệu cho ứng dụng Android 27
2.4.4 Trình phân tích XML 28
2.4.4.1 SAX 28
2.4.4.2 DOM 29
PHẦN 2: CÁC KẾT QUẢ ĐẠT ĐƯỢC 31
CHƯƠNG 3 XÂY DỰNG ỨNG DỤNG 31
3.1 Phân tích thiết kế phần mềm 31
3.1.1 Đặc tả bài toán 31
3.1.2 Mục đích xây dựng phần mềm 31
3.1.3 Yêu cầu phần mềm 31
3.1.4 Thông số phần mềm 32
3.1.5 Hướng giải quyết 32
3.1.6 Biểu đồ User Case - Đặc tả User Case 32
3.1.7.Biểu đồ trình tự 36
3.1.8.Biểu đồ lớp 37
3.1.8 Biểu đồ hoạt động 41
3.2 Thiết kế giao diện phần mềm 41
3.2.1 Khởi tạo project 41
3.2.2 Thiết kế giao diện 44
3.3.Thiết kế cơ sở dữ liệu và module của ứng dụng 44
3.3.1 Thiết kế cơ sở dữ liệu 44
3.3.2 Thiết kế Module của ứng dụng 45
CHƯƠNG 4 CÀI ĐẶT VÀ TRIỂN KHAI 47
4.1 Cài đặt chương trình 47
4.2 Kiểm thử phần mềm trên điện thoại Android 48
Trang 3DANH 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
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
ClassBoundary
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
Quan hệ kếthợ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)
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 LanguageDFS: 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 13
Hình 2.2: Vòng đời của 1 ứng dụng Android 14
Trang 4Hình 2.3 :Tỷ lệ sử dụng các phiên bản Android 15
Hình 2.4: Cài đặt SDK thành công 17
Hình 2.5:Android SDK Manager 17
Hình 2.6: Tạo máy ảo 18
Hình 2.7: Ví dụ thuật toán tìm kiếm theo chiều sâu 20
Hình 2.8: Xác định đỉnh kề trong DFS 22
Hình 2.9: Kết quả DFS 22
Hình 2.10: Cấu trúc View trong File Activity 24
Hình 2.11: Cấu trúc file Activity_main.xml 24
Hình 2.12: Tạo giao diện ứng dụng 25
Hình 2.13: Button trong Android 25
Hình 2.14: Hệ thống đối tượng dùng tạo giao diện 26
Hình 2.15: Ví dụ file XML cơ sở dữ liệu 26
Hình 2.16: Trình phân tích SAX 28
Hình 3.1: Biểu đồ User Case toàn hệ thống 31
Hình 3.2: Biểu đồ trình tự User Case Nhập thông tin điểm đầu, cuối 35
Hình 3.3 Biểu đồ trình tự User Case yêu cầu tư vấn 35
Hình 3.4: Biểu đồ trình tự User Case Tìm kiếm điểm xe buýt 36
Hình 3.5: Biểu đồ lớp toàn hệ thống 38
Hình 3.6: Biểu đồ lớp cho User Case User Case nhập thông tin điểm đầu, cuối 38
Hình 3.7: Biểu đồ lớp cho User Case yêu cầu tư vấn 39
Hình 3.8: Biểu đồ lớp cho User tìm kiếm điểm xe buýt 39
Hình 3.9: Biểu đồ hoạt động 40
Hình 3.10: Tạo ứng dụng mới (1) 40
Hình 3.11: Tạo ứng dụng mới (2) 41
Hình 3.12: Tạo ứng dụng mới (3) 42
Trang 5Hình 3.14: Thiết kế giao diện chính của ứng dụng 43
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 46
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 47
“tất cả các phương án” 47
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” 48
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 49
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
Trang 6Mụ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 ứngdụ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ìmkiế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
Trang 7PHẦ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 tranghttp://www.hanoibus.com.vn/
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ớingườ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 trongkhuô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ềusâ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ềmtìm kiếm điểm xe buýt
Phân tích dữ liệu trang http://www.hanoibus.com.vn/, 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ựngphần mềm
Trang 8PHẦ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 tranghttp://www.hanoibus.com.vn/
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ớingười sử dụng
1.2 Định hướng giải quyết các vấn đề trên
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
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
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
Trang 92.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 ông10.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ổngcông ty Android, gồm Rubin, Miner và White, vẫn tiếp tục ở lại công ty làm việcsau 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ềntả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àycho 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ãngphầ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ànghợ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 HandsetAlliance), 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ànhlậ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ềntả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ạichạy Android đầu tiên được bán ra là HTC Dream, phát hành ngày 22 tháng 10 năm
Trang 102008.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ànhtrướ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ủamộ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.2Jelly 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 baogồ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 đốitá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ôngminh Nexus đầu tiên, Nexus One Kể từ đó nhiều thiết bị mới hơn đã gia nhập vàodò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ữngthiế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ềmmớ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 12triệ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.75triệu dòng mã C++ Google đã công bố hầu hết các mã nguồn của Android theo bảncấ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 ứngdụ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ốimiễn phí Android và các đoạn mã có bản quyền khác cho bất cứ ai muốn tham giaphá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ìnhviên cũng như nhà phát triển có thể nhanh chóng đưa ra phiên bản Android đượctùy chỉnh của riêng mình
Kho ứng dụng phong phú
Trang 11Vớ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…cungcấ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úcbở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ôngphả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 khithiết bị được kết nối với máy tính một cách dễ dàng Trong khi đó, BlackBerry yêucầ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 Androidnào đó thì bao giờ cũng có một main Activity được gọi, hiện thị màn hình giao diệncủ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ữacá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ôngbáo đi nhằm khởi tạo một Activity hay một Service để thực hiện công việc bạnmong 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ừnghoạt động
Trong đó các thành phần : Activity,Service,Content Provider, BroadcastReceiver là những thành phần chính cấu thành nên ứng dụng Android và buộc phảikhai báo trong Android manifest Các tiến trình xử lý (process) trong Android được
Trang 12quả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ườidùng tương tác
- Visible process : là process của ứng dụng mà Activity đang hiện thị đối vớingườ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ônghiệ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 Androidquản lý Activity theo dạng stack : khi một Activity mới được khởi tạo,nó sẽ xếp đầustack 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ũngchứ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 baogiờ 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ácActivity 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
Trang 13 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ộtActivity 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ậptrình có thể dễ dàng thay đổi những giá trị này trong ứng dụng một cách nhanhchó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, baogồ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ậptrì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ìnhtươ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ộtActivity hoặc Service hoặc các lớp chức năng nào đó được viết bằng ngôn ngữ Javadự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
Trang 142.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 (lostfocus)
- Stop : Activity bị thay thế hoàn toàn bởi một Activity mới sẽ tiến đến trạngthái stop
- Killed : khi hệ thống bị thiếu bộ nhớ,nó sẽ tự động giải phóng bộ nhớ bằngcách đóng các tiến trình theo thứ tự ưu tiên Các Activity ở trạng thái Paused hoặcStop 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
Trang 152.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ủamì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 2009rằ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àncầ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ượtkí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ầnAndroid 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ầnlớ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
Trang 162.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ựatrê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ôitrường phát triển tích hợp (IDE) Eclipse bằng cách sử dụng Android DevelopmentTools(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ôngqua 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 (JavaDevelopment Kit và Apache Ant được yêu cầu) để tạo, biên dịch và gỡ lỗi các ứngdụng Android cũng như kiểm soát các thiết bị Android (ví dụ, kích hoạt khởi độnglạ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ảngAndroid SDK cũng hỗ trợ các phiên bản cũ hơn của nền tảng Android trong trườnghợ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ủaAndroid 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ậptin tài nguyên, vv…
Cách cài đặt:
Bước 1: Download và cài đặt Eclipse
- Vào link http://www.eclipse.org/downloads/ để 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
Trang 17• Mục Location, nhập vào link này: http://dl-ssl.google.com/android/eclipse/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 http://developer.android.com/sdk/index.html(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 SDKlocation 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 VirtualDevice 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 Availablepackages 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
Trang 18 Bước 5: Tạo máy ảo
Click vào icon Android Virtual Device Manager trên thanh công cụ Eclipsehoặ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ạomộ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
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ầnchọ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ầnmề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ạiAndroid: 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
Trang 19thao 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ácdị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 canhạ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ụnghướng dẫn đi lại trong trường học, trong cơ quan, ứng dụng hướng dẫn tham quanmộ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 AppInventor Extras, có nhiệm vụ điều khiển điện thoại Android (kết nối với máy tínhthô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ạiGoogle dự định bổ sung những bộ mô phỏng điện thoại Android để có thể sử dụngApp 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 Basicvớ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ácBasic4android 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àngthự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ạnvẫ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
Trang 20cụ thể với từng thiết bị Android lập trình viên có thể theo dõi tốt hơn việc tích hợpquảng cáo vào app nhờ tính năng Referral Tracking, theo dõi xem nguồn cài đặt ứngdụ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ệcphâ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âydựng ứng dụng trở nên dễ dàng và nhanh chóng hơn Android Studio còn cho phépxem 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ủaAndroid 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ềusâ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
Trang 21Tì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ụctì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ừ Dkhô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ònchư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ênthô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)
Trang 222 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
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étmộ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
Trang 23o 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) 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ácngô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ự địnhnghĩ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 >
public void ThuatToanTK_ChieuSau(int u) {
VET[u] = false;
for (int i = 1; i <= SoDinh; i++) {
if ((VET[i]) && (DUONGDI[u][i])) {
}
Trang 242.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 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ẽ đượcchứa trong thư mục res/layout/ của ứng dụng Thông thường khi mới khởi tạo, filegiao 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:
Trang 25Để 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 sauB1: 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
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ùngrất nhiều đối tượng như: Button, textview,edittext,… Người dùng có thể tùy chỉnhmộ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
Trang 26Hì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ụ: