LỜI CẢM ƠN Lời đầu tiên em xin chân thành cảm ơn cô Nguyễn Thị Tính đã rất tận tình hướng dẫn, chỉ bảo em trong suốt thời gian thực hiện đồ án tốt nghiệp vừa qua. Em cũng xin chân thành cảm ơn tất cả các thầy, các cô trong Trường Đại học Công nghệ Thông tin và Truyền thông đã tận tình giảng dạy, trang bị cho chúng em những kiến thức cần thiết và quý báu. Mặc dù em đã cố gắng, nhưng với trình độ còn hạn chế, trong quá trình làm đề tài không tránh khỏi những thiếu sót. Em hy vọng sẽ nhận được những ý kiến nhận xét, góp ý của các thầy cô giáo và bạn bè. Em xin chân thành cảm ơn !
1
LỜI CAM ĐOAN Trong báo cáo này sử dụng những kết quả nghiên cứu lý thuyết, khảo sát thực tế và phân tích thiết kế hệ thống do em tham khảo tài liệu và trực tiếp thực hiện dưới sự hướng dẫn của cô Nguyễn Thị Tính. Những kết quả thu được là của riêng em và không sao chép trái phép. Em cam đoan những kết luận trên là đúng sự thật, nếu sai lệch em xin chịu hoàn toàn trách nhiệm. Thái Nguyên, ngày 08 tháng 05 năm 2016 Sinh viên
Bế Thị Hằng
2
MỤC LỤC
LỜI CẢM ƠN
1
LỜI CAM ĐOAN 2 MỤC LỤC
3
DANH MỤC HÌNH ẢNH 5 LỜI NÓI ĐẦU
7
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 1.1. Tổng quan về Android 1.1.1. Khái niệm Android
8 8
1.1.2. Lịch sử phát triển Android 1.1.3. Kiến trúc Android
8
8
9
1.2. Hệ thống tập tin trên hệ điều hành Android
11
1.2.1. Tổng quan về hệ thống tập tin trên Android 12 1.2.2. Các kiểu tập tin trên Android 12 1.2.3. Tổ chức quyền sở hữu và quyền hạn trên file 1.2.4. Cây thư mục trên hệ điều hành Android
13
1.3. Phát triển ứng dụng trên Android 14 1.3.1. Lập trình Android cần những gì
14
1.3.2. Các thành phần trong một Android Project 16 1.3.3. Những thành phần cơ bản trong Android
17
1.3.4. Các thành phần giao diện và widget 19 1.3.5. Chu kỳ ứng dụng Android
24
CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 2.1. Đặc tả phần mềm
28
2.2. Phân tích thiết kế hệ thống 28 2.1.1. Biểu đồ Use case của hệ thống 3
28
28
13
2.1.2. Biểu đồ trình tự của hệ thống 29 2.1.3. Biểu đồ cộng tác của hệ thống42 2.1.4. Biểu đồ hoạt động của hệ thống 2.1.5. Biểu đồ lớp của hệ thống
47
52
CHƯƠNG 3 XÂY DỰNG ỨNG DỤNG 54 3.1. Môi trường triển khai
54
3.2. Giao diện của chương trình 54 3.2.1. Giao diện Gridview
54
3.2.2. Giao diện các menu của chương trình 3.2.3. Giao diện Properties
56
58
3.2.4. Giao diện nén, giải nén và send bluethooth 59 3.2.5. Giao diện đổi tên tập tin hoặc thư mục 3.2.6. Giao diện tạo thư mục 61 3.2.7. Giao diện tìm kiếm file62 3.2.8. Giao diện xóa file hay thư mục
63
3.2.9. Một số giao diện mở tập tin cơ bản 64 KẾT LUẬN 65 TÀI LIỆU THAM KHẢO 66 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 67
4
60
DANH MỤC HÌNH ẢNH Hình 1.1 Kiến trúc Android9 Hình 1.2 Bảng liệt kê một số kiểu file trong Linux Hình 1.3 Quyền hạn truy cập trên file
13
Hình 1.4 Cây thư mục trong Android
14
Hình 1.5 Cấu trúc một project Android
16
Hình 1.6 Cấu trúc một giao diện ứng dụng Android Hình 1.7 Activity Stack
12
20
24
Hình 1.8 Chu kỳ sống của Activity
25
Hình 2.1 Biều đồ use case của hệ thống 29 Hình 2.2 Biểu đồ trình tự use case đổi tên37 Hình 2.3 Biều đồ trình tự use case tìm kiếm
38
Hình 2.4 Biểu đồ trình tự use case sao chép
38
Hình 2.5 Biểu đồ trình tự use case xóa
39
Hình 2.6 Biểu đồ trình tự use case nén
39
Hình 2.7 Biểu đồ trình tự use case giải nén
40
Hình 2.8 Biểu đồ trình tự use case tạo thư mục mới Hình 2.9 Biều đồ trình tự use case gửi tập tin
41
Hình 2.10 Biểu đồ trình tự use case xem thông tin Hình 2.11 Biểu đồ trình tự use case mở tập tin 42 Hình 2.12 Biều đồ cộng tác use case đổi tên
42
Hình 2.13 Biểu đồ cộng tác use case tìm kiếm
43
Hình 2.14 Biểu đồ cộng tác use case sao chép
43
Hình 2.15 Biểu đồ cộng tác use case xóa 44 Hình 2.16 Biểu đồ cộng tác use case nén 44 Hình 2.17 Biểu đồ cộng tác use case giải nén 5
40
45
41
Hình 2.18 Biểu đồ cộng tác use case tạo thư mục mới 45 Hình 2.19 Biểu đồ cộng tác use case gửi tập tin 46 Hình 2.20 Biểu đồ cộng tác use case xem thông tin
46
Hình 2.21 Biểu đồ cộng tác use case mở tập tin 47 Hình 2.22 Biểu đồ hoạt động use case mở tập tin
47
Hình 2.23 Biểu đồ hoạt động use case gửi tập tin
48
Hình 2.24 Biểu đồ hoạt động use case đổi tên
48
Hình 2.25 Biểu đồ hoạt động use case nén
49
Hình 2.26 Biểu đồ hoạt động use case giải nén 49 Hình 2.27 Biểu đồ hoạt động use case tạo thư mục mới 50 Hình 2.28 Biểu đồ hoạt động use case sao chép 50 Hình 2.29 Biểu đồ hoạt động use case di chuyển 51 Hình 2.30 Biểu đồ hoạt động use case xóa
51
Hình 2.31 Biểu đồ hoạt động use case tìm kiếm 52 Hình 2.32 Biểu đồ lớp của thành phần giao diện 52 Hình 2.33 Biểu đồ lớp tổng quát 53 Hình 3.1 Giao diện chính của chương trình
55
Hình 3.2 Giao diện Options Menu 56 Hình 3.3 Giao diện Context Menu 57 Hình 3.4 Giao diện Properties
58
Hình 3.5 Giao diện nén, giải nén và chia sẻ tập tin Hình 3.6 Giao diện đổi tên file hay thư mục Hình 3.7 Giao diện tao thư mục mới
59
60
61
Hình 3.8 Giao diện tìm kiếm file hay thư mục
62
Hình 3.9 Giao diện xóa file hay thư mục 63 Hình 3.10 Giao diện mở file ảnh và file nhạc trong android
6
64
7
LỜI NÓI ĐẦU Trong thời điểm hiện nay, trên thế giới cũng như tại Việt Nam, thị trường điện thoại di động đang trở nên sôi động hơn bao giờ hết. Do thu nhập của người dân ngày càng được cải thiện cũng như nhu cầu trao đổi thông tin ngày càng gia
tăng theo. Mặt khác, các nhà sản xuất điện thoại di động nắm được nhu cầu của giới trẻ ưa chuộng những sản phẩm công nghệ cao và do yêu cầu cạnh tranh giữa các nhà sản xuất điện thoại di động cho nên các nhà sản xuất điện thoại di động liên tục tung ra nhiều sản phẩm mới có nhiều tính năng mới, cấu hình cao, nâng cấp mẫu mã và kiểu dáng đẹp nhằm thu hút người mua, đặc biệt là các bạn trẻ. Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển mạnh mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị di động. Phần mềm, ứng dụng cho điện thoại di động hiện nay rất đa dạng và phong phú, đa số các phần mềm ứng dụng là các loại trò chơi, các chương trình tiện ích như từ điển, trình soạn thảo, diệt virus…Chính vì lý do đó mà em đã chọn đề tài: “Xây dựng ứng dụng Explorer trên điện thoại di động”.Nhằm giúp cho người sử dụng quản lý dữ liệu cá nhân dễ dàng và nhanh chóng hơn. Nội dung của đề tài được chia thành 3 chương như sau: Chương 1: Cơ sở lý thuyết Chương 2: Phân tích thiết kế hệ thống Chương 3: Xây dựng ứng dụng
8
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT Tổng quan về Android
Khái niệm Android Android là một ngăn xếp phần mềm cho các thiết bị di động bao gồm một hệ điều hành, middleware và các ứng dụng khóa được phát triển bởi Google. Android được phát triển dựa trên nhân Linux 2.6 và các ứng dụng cho Android sử dụng ngôn ngữ lập trình Java. Android là một hệ điều hành mã nguồn mở, các nhà phát triển có thể tạo ra
các ứng dụng cho Android và bất kỳ ai cũng có thể lấy và sửa đổi theo ý thích. Tuy nhiên các thiết bị Android cũng chứa một số phần mềm độc quyền mà các nhà phát triển không thể tiếp cận được những phần mềm này.
Lịch sử phát triển Android Năm 2003, một công ty hoạt động trong lĩnh vực phát triển phần mềm cho các thiết bị di động mang tên là Android Inc. được thành lập tại California – Mỹ bởi 4 thành viên: Andy Rubin, Rich Miner, Nick Sears và Chris White. Năm 2005, sau hơn 2 năm hoạt động thì Android Inc. được Google mua lại với một khoản tiền không được tiết lộ và chính thức trở thành một trong những công ty con của gã khổng lồ ngành tìm kiếm. Đồng thời cả Andy Rubin, Rich Miner, Nick Sears và Chris White đều quyết định tiếp tục làm việc tại chính công ty của mình sau khi được mua lại. Tại Google, một nhóm nghiên cứu đứng đầu là Rubin đã bắt đầu phát triển một nền tảng dành cho thiết bị di động dựa trên nhân của hệ điều hành Linux. Và sau đó, hệ điều hành này cũng được giới thiệu đến các nhà phát triển phần cứng lẫn phần mềm. Tháng 5 năm 2007, liên minh các nhà sản xuất thiết bị cầm tay - Open Handset Alliance (OHA) được thành lập bao gồm Google và một số thành viên khác 9
của cộng đồng Linux mở như: Broadcom Corporation, Google, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia,Qualcomm, Samsung Electronics, Sprint Nextel, T-Mobile và Texas Instruments. Mục tiêu của OHA là phát triển tiêu chuẩn mở cho các thiết bị di động và sản phẩm đầu tiên của liên minh này đó là Android, một nền tảng di động được xây dựng trên nhân Linux phiên bản 2.6. Tính cho đến thời điểm tháng 02/2016, Google Android đã có 11 phiên bản chính thức được đặt tên theo những món tráng miệng, với ngụ ý người dùng sẽ dễ dàng sử dụng hệ điều hành của họ như thưởng thức các món ăn đó. Các phiên bản
Android có tên mã lần lượt là: Cupcake 1.5, Donut 1.6, Eclair 2.0, Froyo 2.2, Gingerbread 2.3, Honeycomb 3.0, Ice Cream Sandwich 4.0, Jelly Bean 4.1, KitKat 4.4, Lollipop 5.0 và Marshmallow 6.0.
Kiến trúc Android
10
Hình 1.1 Kiến trúc Android
Applications Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: calendar, maps, contacts, brower, camera, phone, … Tất cả các ứng dụng này đều được viết bằng ngôn ngữ Java.
Applications Framework Bằ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à
11
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, cộng thêm các cảnh báo đến các thanh trạng thái và nhiều hơn nữa. Nhà phát triển có thể truy cập vào các API (Application Programming Interface) cùng một framework được xây dựng bởi các ứng dụng lõi. 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 nào cũng có thể công bố khả năng của nó và bất kỳ ứng dụng nào khác cũng có thể
sử dụng những khả năng này(có thể hạn chế bảo mật được thực thi bởi framework). Tất cả các ứng dụng cơ bản là một bộ dịch vụ và các hệ thống, bao gồm: Một tập hợp phong phú và mở rộng các View có khả năng kế thừa lẫn nhau dùng để thiết kế phần giao diện ứng dụng như: gridview, tableview, linearlayout,… Trình cung cấp nội dung (Content Providers): Cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng dụng khác (chẳng hạn như contacts) hoặc là chia sẻ dữ liệu giữa các ứng dụng đó. Quản lý tài nguyên (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ư graphics và các file layout. Quản lý thông báo (Notification Manager): Cho phép tất cả các ứng dụng hiển thị các cảnh báo trong thanh trạng thái. Quản lý hoạt động (Activity Manager): Quản lý chu trình sống của ứng dụng và điều hướng các Activity.
Libraries 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ành phần khác nhau trong hệ thống Android. Điều này được thể hiện thông qua nền tảng ứng dụng Android. Một số các thư viện cơ bản được liệt kê dưới đây: System C library – Thực hiện triển khai BSD (Berkeley Software Distribution) của thư viện hệ thống C chuẩn (libc) và chỉnh cho các thiết bị nhúng dựa trên Linux. BSD là giấy phép nguồn mở, cho phép mọi người sử dụng chương 12
trình, mã nguồn của nó và các dẫn xuất. Media Libararies – Dựa trên PacketVideo’s OpenCORE các thư viện hỗ trợ phát và ghi âm với nhiều định dạng audio và video, cũng như đối với các file ảnh tĩnh bao gồm: MPEG4, H.264, MP3, AAC, ARM, JPG, và PNG. Surface Manager – Quản lý truy cập vào hệ thống hiển thị.
LibWebCore – Một công cụ trình duyệt web hiện đại. SLG – Công cụ đồ họa 2D cơ sở. 3D libraries – Sự thực hiện dựa trên OpenGL ES 1.0 APIs. Free Type – Biểu diễn font véc – tơ và bitmap. QLite – Cơ sở dữ liệu Webkit – Thư viện cho việc biểu diễn HTML.
Android Runtime Tầng này bao gồm các thư viện lõi và máy ảo Dalvik. Các thư viện lõi bao gồm các thư viện lớp cơ bản nhất như: cấu trúc dữ liệu, mạng, các tiện ích, hệ thống file. DVM (Dalvik Virtual Machine) được thiết kế để đạt được các chức năng quản lý chu kỳ sống của đối tượng, quản lý ngăn xếp, quản lý luồng, bảo mật,…DVM là lý tưởng để sử dụng với yêu cầu về không gian bộ nhớ và CPU thấp so với các máy ảo chạy trên các máy tính để bàn và hệ thống máy chủ. Theo tính toán của Google thì cần 64M RAM cho phép hệ thống hoạt động tốt, 24M RAM được sử dụng để khởi tạo và bắt đầu hệ thống cơ bản và 20M RAM được sử dụng cho các dịch vụ cấp cao.
Linux kernel Android được xây dựng trên nhân Linux nhưng Android không phải là Linux. Android dựa trên Linux phiên bản 2.6 cho các hệ thống dịch vụ cốt lõi như an ninh, quản lý bộ nhớ, quản lý quá trình, ngăn xếp mạng, và mô hình điều khiển. Hạt nhân cũng hoạt động như một lớp trừu tượng giữa phần cứng và phần còn lại của ngăn xếp phần mềm. Linux Kernel hỗ trợ các thư viện chia sẻ và nó còn là một mã nguồn mở. Hệ thống tập tin trên hệ điều hành Android 13
Như chúng ta đều biết, Android là một hệ điều hành dựa trên nền tảng Linuxnên hệ thống tập tin trên android cực kỳ giống hệ thống tập tin trên linux như
là về cách tổ chức, những quyền hạn của người sử dụng lên file...
Tổng quan về hệ thống tập tin trên Android Trong android, các file được tổchức thành các thư mục, theo mô hình phân cấp. Tham chiếu đến một file bằng tên và đường dẫn. Các câu lệnh thao tác file cho phép thực hiệncác chức năng như dịch chuyển, sao chép toàn bộ thư mục cùng với các thư mục con chứatrong nó… Có thể sử dụng các ký tự, dấu gạch dưới, chữ số, dấu chấm và dấu phảy để đặt tên file. Không được bắt đầu một tên file bằng dấu chấm hay chữ số. Những ký tự khác như ‘/’, ‘?’, ‘*’, là ký tự đặc biệt được dành riêng cho hệ thống. Chiều dài của tên file có thể tới 256 ký tự. Tất cả các file trong android có chung cấu trúc vật lý là chuỗi các byte (byte stream). Cấu trúc thống nhất này cho phép android áp dụng khái niệm file cho mọi thành phần dữ liệu trong hệ thống. Thư mục cũng như các thiết bị được xem như file. Chính việc xem mọi thứ như các file cho phép android quản lý và chuyển đổi dữliệu một cách dễ dàng. Một thư mục chứa các thông tin về thư mục, được tổ chức theo một định dạng đặc biệt. Các thành phần được xem như các file, chúng được phân biệt dựa trên kiểu file: ordinary file, directory file, character device file, và block device file.
Các kiểu tập tin trên Android Trong nhiều hệ điều hành như window, người ta phân biệt rõ file (tập tin) và folder (hay directory : thư mục) là 2 thành phần khác hẳn nhau. Tuy nhiên trên hệ điều hành android(cũng như linux) thì coi directory cũng là file và nó là một loại file đặc biệt. Thực tế còn một số loại file nữa có thể liệt kê theo bảng sau : Chữ cái biểu diễn
Kiểu file
d
Thư mục (directory)
b
File kiểu khối (block-type special file)
c
File kiểu ký tự (character-type special file) 14
l
Liên kết tượng trưng (symbolic link)
p
File đường ống (pipe)
s
Socket
-
File bình thường (regular file) Hình 1.2Bảng liệt kê một số kiểu file trong Linux
Tổ chức quyền sở hữu và quyền hạn trên file
Tương tự trên hệ thống linux, trên hệ điều hành android, một file có thể liênkết với một người sử dụng và một nhóm người sử dụng. Sựliên kết đó là một tập hợp các quyền hạn truy cập bao gồm quyền được phép đọc (read), được phép ghi (write) và được phép thực thi (execute). Cụ thể như sau: Một file sẽ có những quyền hạn tương ứng với 9 ký tự theo mẫu sau : Với ký tự r w x nghĩa là có quyền tương ứng với ký tự viết tắt đó, nghĩa là không có quyền hạn đó.
Hình 1.3 Quyền hạn truy cập trên file 3 ký tự đầu tiên là quyền hạn chủ nhân file 3 ký tự giữa là quyền hạn của nhóm tài khoản sở hữu file 3 ký tự cuối là quyền hạn của những người không thuộc nhóm sở hữu file. Trên hệ thống android, để biết xem được quyền hạn đó, ta có thể sử dụng câu lệnh ls –l –d. Ngoài ra có 2 lệnh khác cũng hữu dụng là lệnh chown đểthay đổi quyền sởhữufile, lệnh chmod đểthay đổi quyền hạn liên quan đến file và lệnh chgrp để thay đổi nhóm người sở hữu file.
Cây thư mục trên hệ điều hành Android Thư mục (hay có thể gọi là file) root là thư mục gốc của tất cả các file, thư mục còn lại. Dưới nó có chứa một số file thư mục hệ thống. Mỗi thư mục (trừ thư 15
mục root) đều có một thư mục cha chứa nó, bản thân nó cũng có thể có nhiều file thư mục con. Cấu trúc đó có thể mô tả bằng một cây thư mục có dạng như sau :
Hình 1.4 Cây thư mục trong Android Giới thiệu một vài thư mục tiêu biểu : /(root) : là thư mục gốc. Là thư mục duy nhất không có thư mục cha / mnt : thư mục chứa thiết bị lưu động (removeable)
/system : chứa những thành phần cơ bản nhất của hệ thống /ect : chứa những file cấu hình của hệ thống, nó cực kỳ quan trọng vì sự hoạt độngcủa hệ thống đều bị chi phối ở những file cấu hình này. /system/lost+found : chứa những tập tin bị mất lúc khởi động máy /system/font : chứa những font chữ hiển thị được /system/lib : chứa các thư viện đểcác phần mềm hoạt động (các phần mềmviết bằng ngôn ngữ java) /system/app : chứa các file apk của phần mềm (các file cài đặt ứng dụng, kiểu như MSI trong window hay dev trong Linux) /system/bin : chứa các chương trình nội trú của hệ thống. .... 16
Phát triển ứng dụng trên Android
Lập trình Android cần những gì Ngôn ngữ lập trình Ngôn ngữ lập trình chính thức của Android là Java. Mặc dù các ứng dụng trên Android được phát triển dựa trên nền tảng Java, nhưng Android không hỗ trợ J2ME và J2SE, là hai ngôn ngữ lập trình phổ dụng cho các thiết bị di động. Dựa trên máy ảo Java của Sun, Google đã tinh chỉnh và phát triển nên máy ảo Dalvik để biên dịch mã Java với tốc độ biên dịch nhanh hơn và nhẹ hơn. Đến phiên bản Froyo 2.2, Android đã hỗ trợ Just-in-time Compiler (JIT) làm tăng tốc độ biên dịch Java lên gấp 2-5 lần so với các phiên bản trước. Bằng cách sử dụngcác framework của hãng thứ ba (VD: PhoneGap, Titanium,…), các nhà lập trình web cũng có thể phát triển ứng dụng Android một cách dễ dàng bằng các ngôn ngữ web phổ dụng như HTML, CSS, Javascript. Tuy nhiên số lượng các ứng dụng đi theo chiều hướng này chưa nhiều. Ngoài ra các ứng dụng của Android sử dụng SQLite để quản lý cơ sở dữ
liệu.
Công cụ lập trình và cài đặt Bước 1: Download và giải nén Eclipse Galileo tại : Chúng ta nên sử dụng Eclipse gói Galileo để lát nữa đỡ phải cấu hình lại Eclipse. Bước 2: Cài đặt ADT plugin Mở Help Install new software Add. Ở mục Name: ADT plugin hoặc bạn có thể nhập tên khác cũng được. Location: Nhập vào link: /> OK Next cho đến khi cài đặt hoàn thành. Bước 3: Cài đặt Android SDK Tải Android SDK tại và giải 17
nén. Mở Eclipse WindowPreferencesAndroid trong thư mục SDK location chọn Browse đưa đường dẫn đến thư mục SDK vừa giải nén bấm Apply Install. Bước 4: Tạo một máy điện thoại ảo (AVD) Vào Window Android SDK and AVD manager Virtual devices New. Điền vào các mục Name, Target: chọn API level cho phù hợp ứng dụng bạn chọn, SDcard chọn Size dùng, nếu không thì để trống cũng được.
18
Các thành phần trong một Android Project
Hình 1.5Cấu trúc một project Android
AndroidManifest.xml: file XML mô tả ứng dụng và các thành phần được cung cấp bởi ứng dụng (activities, services,…). 19
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. Build.xml: một file chứa mã script Ant (ant.apache.com) nhằm compile và cài đặt ứng dụng lên máy. default.properties: file properties tạo bởi script Ant trên. Bin/ : nơi chứa ứng dụng sau khi được compile. bin/classes/: chứa các lớp Java đã được compile. bin/classes.dex : chứa các file executable tạo bởi các lớp Java. bin/yourapp.ap_ : chứa các tài nguyên của ứng dụng, đóng gói thành 1 file zip. bin/yourapp-debug.apk hay bin/yourapp-unsigned.apk : chứa chính ứng dụng Android của ta. libs/ : nơi chứa các file Java JAR ứng dụng yêu cầu (third party). src/ : nơi chứa mã nguồn Java của ứng dụng. res/ : chứa các tài nguyên của ứng dụng như các icons, GUI layouts,… res/drawable/ : chứa file hình ảnh (PNG, JPEG,…). res/layout/ : chứa UI layout, dưới dạng XML. res/menu/ : chi tiết các menu, dưới dạng XML. res/raw/ : chứa các file khác (CSV chứa thông tin account,…). res/values/ : chứa các strings, dimensions,… res/zml/: chứa các file XML khác cần cho ứng dụng. assets/ : nơi chứa các files tĩnh (static) được yêu cầu đi kèm với ứng dụng.
Những thành phần cơ bản trong Android
Activity Activity là một thành phần của ứng dụng cung cấp một màn hình mà người dùng có thể tương tác được. Hầu hết các Activity được thiết kế để chiếm giữ toàn bộ màn hình, tuy nhiên có thể tạo các Activity trong suốt một nửa, các Activity 20
nổi, hoặc các Dialog. Một ứng dụng thường bao gồm một tập hợp các Activity ràng buộc với nhau và thường có một Activity chính được gọi khi ứng dụng bắt đầu được chạy. Mỗi một Activity mới được bắt đầu thì các Activity trước bị dừng lại, hệ thống bảo tồn các Activity này trong ngăn xếp (gọi là backstack). Khi người dùng thao tác xong với Activity hiện tại và nhấn nút BACK thì Activity này bị hủy và Activity trước được khôi phục. Giao diện người dùng cho các Activity được xây dựng bởi kiến trúc phân cấp các đối tượng view dẫn xuất từ lớp View đặt trong một cửa sổ của activity bằng phương thức: Activity.setContentView(). Content view là đối tượng View ở gốc của cây phân cấp.
Service Service chạy nền và không tương tác trực tiếp với người dùng nên nó không có giao diện trực quan. Sử dụng Service để: Dùng trong các ứng dụng nghe nhạc. Dùng để xử lý các thao tác mất thời gian và không nhất thiết phải hiển thị lên activity (download, upload,…). Đôi khi cần một ứng dụng vận hành liên tục để xử lý những việc mong muốn mà không làm phiền người dùng. Làm những thao tác tính toán, xử lý đều đặn nào đó và kết quả khi nào người dùng cần thì mới xem.
Broadcast Receive Một Broadcast Rreceiver là một thành phần nhận và đáp lại các thông báo broadcast. Nhiều broadcast khởi đầu trong mã hệ thống – ví dụ như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người dùng đã thay đổi ngôn ngữ … Các ứng dụng có thể tạo ra các broadcast, chẳng hạn để ứng dụng khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sàng cho việc sử dụng chúng. Một ứng dụng có thể có một số Broadcast Receiver để đáp lại bất cứ thông 21
báo nào mà nó cho là quan trọng. Tất cả các receiver mở rộng từ lớp cơ sở BroadcastReceiver. Broadcast Receiver không hiển thị một giao diện người dùng. Tuy nhiên chúng có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng có thể sử dụng NotificationManager để cảnh báo người dùng. Notifications có thể lấy sự chú ý của người dùng bằng nhiều cách, lóe sáng đèn sau, rung, tạo ra âm thanh, etc. Chúng thường lấy một biểu tượng bền vững trong thanh trạng thái, cái mà người dùng có thể mở để lấy thông điệp. Hệ thống chạy mỗi ứng dụng trong một tiến trình riêng biệt và hạn chế truy cập dữ liệu của ứng dụng khác, vì vậy để ứng dụng của bạn kích hoạt một thành phần từ ứng dụng khác, người dùng phải gửi một thông điệp tới hệ thống xác định mục đích và bắt đầu một thành phần cụ thể. Hệ thống sẽ kích hoạt cách thành phần này.
Content provider Một Content provider tạo ra một tập cụ thể các dữ liệu của ứng dụng khả dụng cho các ứng dụng khác. Dữ liệu có thể được lưu trữ trong hệ thống file, trong một cơ sở dữ liệu SQLite, hay trong một cách khác nào đó. Content provider mở rộng lớp cơ sở ContentProvider để cài đặt một tập các chuẩn các phương thức cho phép các ứng dụng khác đạt được và lưu trữ dữ liệu của kiểu mà nó điều khiển. Tuy nhiên, các ứng dụng không gọi trực tiếp các phương thức này, chúng sử dụng
một đối tượng ContentResolver và gọi các phương thức của nó. Một ContentResolver có thể nói chuyện với bất cứ content provider nào, chúng cộng tác với provider để quản lý giao tiếp liên tiến trình. Content provider cung 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 dữ liệu chỉ cần cung cấp đường dẫn cho nó. Đường dẫn này gọi là URI, mỗi URI xác định duy nhất một tập dữ liệu. Content provider kiểm soát nhiều tập dữ liệu và đưa ra một đối tượng URI riêng biệt cho mỗi đối tượng đó. Cấu trúc một URI như sau: <standard_prefix>://<authority>/<data_path>/<id> 22
Trong đó: standard_prefix: Tiền tố chuẩn cho Content provider, luôn là content:// authority: Tên của Content provider. Data_path: Đường dẫn tới dữ liệu yêu cầu id: Xác định bản ghi cần lấy.
Các thành phần giao diện và widget View Trong một ứng dụng Android, giao diện người dùng được xây dựng từ các đối tượng View và ViewGroup. Có nhiều kiểu View và ViewGroup. Mỗi một kiểu là một hậu duệ của class View và tất cả các kiểu đó được gọi là các Widget. Tất cả mọi widget đều có chung các thuộc tính cơ bản như là cách trình bày vị trí, background, kích thước, lề,… Tất cả những thuộc tính chung này được thể hiện hết ở trong đối tượng View. Trong Android Platform, các screen luôn được bố trí theo một kiểu cấu trúc phân cấp như hình dưới. Một screen là một tập hợp các layout và các widget được bố trí có thứ tự. Để thể hiện một screen thì trong hàm onCreate của mỗi Activity cần phải được gọi một hàm là setContentView(R.layout.main); hàm này sẽ load
giao diện từ file XML lên để phân tích thành mã bytecode.
23
Hình 1.6Cấu trúc một giao diện ứng dụng Android
Viewgroup ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính là các widget Layout được dùng để bố trí các đối tượng khác trong một screen. Có một số loại ViewGroup như sau. LinearLayout: LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang hoặc chiều dọc nhưng trên một line duy nhất mà không có xuống dòng. LinearLayout làm cho các thành phần trong nó không bị phụ thuộc vào kích thước của màn hình. Các thành phần trong LinearLayout được dàn theo những tỷ lệ cân xứng dựa vào các ràng buộc giữa các thành phần. FrameLayout: FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như là các Layer trong Photoshop. Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất bởi các đối tượng thuộc Layer nằm trên. FrameLayer thường được sử dụng khi muốn tạo ra các đối tượng có khung hình bên ngoài chẳng hạn như contact image button. 24
AbsoluteLayout: Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layout dựa vào 2 thuộc tính toạ độ x, y. Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được tỷ lệ khoảng cách giữa các đối tượng. Khi chuyển ứng dụng sang một màn hình có kích thước với màn hình thiết kế ban đầu thì vị trí của các đối
tượng sẽ không còn được chính xác như ban đầu. RetaliveLayout: Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc. Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng buộc nào đó với các widget khác. Các ràng buộc này là các ràng buộc trái, phải, trên, dưới so với một widget hoặc so với layout parent. Dựa vào những mối ràng buộc đó mà RetaliveLayout cũng không phụ thuộc vào kích thước của screen thiết bị. Ngoài ra, nó còn có ưu điểm là giúp tiết kiệm layout sử dụng nhằm mục đích giảm lượng tài nguyên sử dụng khi load đồng thời đẩy nhanh quá trình xử lý. TableLayout: Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần bố trí các widget theo các row và column. Chẳng hạn như, giao diện của một chiếc máy tính đơn giản hoặc một danh sách dữ liệu.
Button Sở dĩ widget button được giới thiệu đầu tiên trong số các widget khác là vì đây là đối tượng có thể nói là được dùng nhiều nhất trong hầu hết các ứng dụng Android. Để thiết kế giao diện với một button ta có 2 cách như sau: Thiết kế bằng XML android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/cmdButton1" android:text="Touch me!" 25