Tải bản đầy đủ (.pdf) (104 trang)

Tìm hiểu hđh android và xây dựng game sudoku

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.34 MB, 104 trang )

LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn sâu sắc đến cô giáo Ts. Nông Thị Hoa
– bộ môn hệ thống thông tin đã định hướng và tận tình giúp đỡ, động viên em
trong quá trình thực hiện đồ án. Cô luôn luôn theo sát chỉ bảo và định hướng để em
hoàn thành đề tài một cách tốt nhất. Em xin trân thành cảm ơn cô!
Em xin cảm ơn những người bạn và gia đình đã động viên, giúp đỡ để em
phấn đấu vượt qua khó khăn trong quá trình học tập và rèn luyện tại Trường Đại
học Công nghệ Thông Tin và Truyền Thông. Đồ án tốt nghiệp là cơ hội để em có
thể áp dụng, tổng kết lại những kiến thức mà mình được học. Đồng thời, em rút ra
được những kinh nghiệm thực tế và quý giá trong suốt quá trình thực hiện đồ án.
Em xin cảm ơn thầy giáo, cô giáo trong ban giám hiệu trường Đại Học
Công Nghệ Thông Tin và Truyền Thông Thái Nguyên, cảm ơn quý nhà trường đã
tạo cho sinh viên một môi trường học tập thuận lợi với những trang thiết bị hiện
đại, giúp sinh viên tiếp cận được công nghệ thực tế ngay khi còn ngồi trên ghế nhà
trường.
Em gửi lời cảm ơn chân thành nhất đến các thầy cô trong khoa Công Nghệ
Thông Tin, trường Đại Học Công Nghệ Thông Tin Thái Nguyên, với sự tận tình
trong giảng dạy của quý thầy cô đã giúp chúng em tiếp thu kiến thức tốt hơn.
Kính chúc quý thầy cô mạnh khỏe, tiếp tục đạt được nhiều thắng lợi trong
nghiên cứu khoa học và sự nghiệp trồng người.
Em xin chân thành cảm ơn!

Thái nguyên, ngày 6 tháng 6 năm 2016

Sinh viên
Lý Thị Việt Chung
1


2



LỜI CAM ĐOAN
Đồ án bảo vệ tốt nghiệp là tổng hợp kiến thức mà sinh viên đã học được
trong thời gian học tập tại trường Đại học Công nghệ thông tin và truyền thông
Thái Nguyên. Ý thức được điều đó, với tinh thần nghiêm túc, tực giác học hỏi,
nghiên cứu miệt mài của bản thân cùng với sự hướng dẫn tận tình của cô giáo
Nông Thị Hoa em đã hoàn thành đồ án bảo vệ tốt nghiệp của mình.
Em xin cam đoan nội dung đồ án của em không soa chép nội dung từ đồ án
khác và sản phẩm của đồ án là của chính bản thân em nghiên cứu và sự hướng dẫn
nhiệt tình của cô giáo Nông Thị Hoa. Mọi thông tin sai lệch em xin hoàn toàn chịu
trách nhiệm trước Hội đồng bảo vệ.
Thái Nguyên, Tháng 6 năm 2016
Sinh viên

Lý Thị Việt Chung

3


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. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
LỜI NÓI ĐẦU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
CHƯƠNG I: TỔNG QUAN VỀ CƠ SỞ LÝ THUYẾT . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1 Sơ lược về quá trình phát triển hệ điều hành Android . . . . . . . . . . . . . . . . . . . . . 8
1.1.1 Giới thiệu chung về hệ điều hành . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.2 Hệ điều hành Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.3 Lịch sử ra đời . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.1.4 Cộng đồng phát triển Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Kiến trúc của Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.1 Nền tảng Android. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.2 Tầng ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.3 Application framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.4 Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.5 Android Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Android Emulator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.4 Máy ảo Dalvik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Các thư viện của Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 Các thành phần trong một Android Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6.1 AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6.2 File R.java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7 Các thành phần chính và chu kỳ của một ứng dụng Android . . . . . . . . . . . . . 15
1.7.1 Các thành phần chính trong một ứng dụng của Android . . . . . . . . . . . . . 15
1.7.2 Chu kỳ sống của ứng dụng Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4


1.8 Thành phần giao diện Android & các control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
CHƯƠNG 2: PHÂN TÍCH VÀ ỨNG DỤNG GAME SUDOKU . . . . . . . . . . . . . . 21
2.1 Khảo sát . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.1 Giới thiệu về game sudoku. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.2 Xây dựng chức năng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2 Phân tích và thiết kế ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.1 Tác nhân và các Use Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.2 Biểu đồ Use case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.2.3 Đặc tả Use Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.2.4 Biểu đồ lớp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
CHƯƠNG 3: ỨNG DỤNG DEMO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

3.1. Màn hình giao diện chính. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.2 Màn hình chọn mức chơi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4 Giao diện xem kết quả . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.5 Giao diện kết thúc bàn chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.6 Giao diện lưu lại bàn game đã chơi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
KẾT LUẬN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
TÀI LIỆU THAM KHẢO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5


DANH MỤC HÌNH
Hình 1.1: Cấu trúc Android. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Hình 1.2: Android Emulator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Hình 1.3: Activity Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Hình 1.4: Truyền dữ liệu giữa 2 Activity.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Hình 1.5: Các thuộc tính của Intent. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Hình 1.6: Quan hệ giữa các thành phần trên . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Hình 2.1: Sudoku use case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Hình 2.2: Biểu đồ trình tự chức năng Tiếp tục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Hình 2.3: Biểu đồ hoạt động chức năng Chơi tiếp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Hình 2.4: Biểu đồ trình tự chức năng Chơi mới . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Hình 2.5: Biểu đồ hoạt động chức năng Chơi mới . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Hình 2.6: Biểu đồ hoạt động chức năng xem thông tin . . . . . . . . . . . . . . . . . . . . . . . . . 51
Hình 2.7 : Biểu đồ hoạt động chức năng xem thông tin . . . . . . . . . . . . . . . . . . . . . . . . 52
Hình 2.8 : Biểu đồ lớp game sudoku. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Hình 3.1: Giao diện chính game sudoku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Hình 3.2: Màn hình chọn các mức chơi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Hình 3.3: Màn hình chọn bàn chơi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Hình 3.4: Màn hình điền số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Hình 3.5: Bàn chơi game mức dễ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Hình 3.6 : Bàn chơi ở mức trung bình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Hình 3.7: Bàn chơi ở mức khó . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Hình 3.8: Giao diện khi người chơi điền đáp án sai . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Hình 3.9: Giao diện xem kết quả bàn game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Hình 3.10 : Giao diện khi chơi thắng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Hình 3.11: Giao diện lưu lại bàn game lần sau chơi tiếp . . . . . . . . . . . . . . . . . . . . . . . 64
Hình 3.12: Giao diện bàn game đã lưu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6


7


LỜI NÓI ĐẦU
Mạng điện thoại di động xuât hiện tại Việt Nam đầu những năm 1990 và
theo thời gian số lượng các thuê bao cũng như nhà cung cấp dịch vụ di động tại
Việt Nam ngày càng tăng. Do nhu cầu trao đổi thông tin hàng ngày tăng và nhu
cầu sử dụng sản phẩm công nghệ cao nhiều tính năng, cấu hình cao, chất lượng tốt,
kiểu giá mẫu mã đẹp, phong phú nên nhà cung cấp phải luôn cải thiện nâng cao
những sản phẩm của mình. Do đó việc xây dụng các ứng dụng cho điện thoại di
động đang là một ngành công nghiệp mới đầy tiềm năng và hứa hẹn nhiều sự phát
triển vượt bậc của ngành khoa học kĩ thuật.
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 động hiện này rất đa dạng và phong phú trên các hệ
điều hành di động cũng phát triển mạnh mẽ và đang thay đổi từng ngày.
Các hệ điều hành J2ME, Android, IOS, Hibrid, Web based Mobile
Application đã có rất nhiều phát triển trên thị trường truyền thông di động.
Với sự phát triển nhanh chóng đó thì những ứng dụng giải trí cũng đang

phát triển mạnh mẽ nhằm phục vụ nhu cầu giải trí của con người. Lập trình ứng
dụng, lập trình game đang là xu thế thực tế là bước đột phá và cũng là tiềm năng
trong sự phát triển của công nghệ di động.
Và từ đó các game trên điện thoại di động xuất hiện ngày càng nhiều, trên
các hệ điều hành khác nhau như Android, iOS, RIM Blackberry OS, Symbian….
Và Android là hệ điều hành do Google mua về và cho ra đời vào năm 2007, đây là
hệ điều hành tương đối mới và đang rất được ưa chuộng trên thị trường từ khi nó
ra đời, vì thế em quyết định chọn đề tài “Tìm hiểu HĐH Android và xây dựng
game Sudoku”. Sudoku là trò chơi giải trí giúp rèn luyện trí tuệ tính logic. Với
các khuôn dạng ô số Sudoku có số lượng quá nhiều nên tạo ra các Ô-số thuộc đủ
8


loại khó dễ. Ta cũng không biết số tối thiểu cho sẵn trong bài đố là bao nhiêu để có
lời giải đáp thỏa đáng. Trong phạm vi bài báo cáo thực tập tốt nghiệp này để tạo điều
kiện cho các bạn mê trò chơi trí tuệ ở mọi lứa tuổi đều có thể chơi game được em sử
dụng cách ra bài với các phương pháp suy luận rút gọn, loại trừ con số y hệt trong các tập
hợp liên hệ theo đường thẳng, song song hay chữ thập, để tìm các số tuyển thích hợp,
không sử dụng các định luật toán học.

9


CHƯƠNG I:
TỔNG QUAN VỀ CƠ SỞ LÝ THUYẾT
1.1 Sơ lược về quá trình phát triển hệ điều hành Android
1.1.1 Giới thiệu chung về hệ điều hành
Hệ điều hành là chương trình chạy trên hệ thống máy tính, quản lý các tài
nguyên trên máy tính và là môi trường cho các ứng dụng chạy trên nó.
Ngày nay, khái niệm hệ điều hành không chỉ là trên máy tính mà còn được

mở rộng cho nhiều thiết bị điện tử khác chẳng hạng như điện thoại thông minh
(smart phone), các thiết bị cầm tay PDA v.v…
Như vậy hệ điều hành di động là hệ điều hành chạy trên hệ thống máy có
tính di động cao. Với đặc thù đó, hệ điều hành di động phải có những khả năng đặc
biệt mà những hệ điều hành thông thường không có được. Chẳng hạn như nó phải
chạy trên hệ thống máy có cấu hình máy hạn chế về tốc độ bộ vi xử lý, bộ nhớ sử
dụng, phải chạy được ổn định liên tục trong một thời gian dài mà chỉ sử dụng một
lượng điện năng nhỏ, trong suốt thời gian chạy đó có thể duy trì các kết nối mạng
không dây để đảm bảo liên lạc. Một số hệ điều hành tiêu biểu:
Trên máy tính cá nhân: MS DOS, MS WINDOW, MACOS, LINUX, UNIX
Trên điện thoại thông minh: Android, Sybian, Window Mobile, iPhone OS...
Ngoài ra còn có các hệ điều hành chạy trên mainframe, server, thẻ chip…
Trong phạm vì bài báo cáo này em sẽ nói về hệ điều hành Android dành cho điện
thoại.
1.1.2 Hệ điều hành Android
Android – hệ điều hành dành cho điện thoại di động được phát triển bởi
Google và ngày càng trở nên phổ biến với các hãng liên tục ra mắt các mẫu điện
thoại sử dụng Android.

10


Giao diện màn hình khóa (Android 2.2) Giao diện màn hình chính (Android 2.2)
Android được xây dựng trên nhân linux và được phân phối miễn phí. Không
giống như Windows mobile và Apple iPhone, tuy cả hai đều cung cấp môi trường
phát triển ứng dụng phong phú và đơn giản dễ tiếp cận nhưng luôn có sự ưu tiên
cho các ứng dụng mặc định có sẵn của hệ điều hành (native applications). Với
Android mọi ứng dụng đều được viết trên cùng một tập API, thế nên không có sự
phân biệt giữa các ứng dụng mặc định và các ứng dụng của bên thứ ba. Người
dùng hoàn toàn có thể thay thế mọi ứng dụng mặc định bằng các ứng dụng yêu

11


thích của mình, thậm chí ngay cả màn hình thực hiện cuộc gọi mà màn hình nhà
(home scream).
1.1.3 Lịch sử ra đời
Trước đây, Android được phát triển bởi công ty liên hợp Android (sau đó
được Google mua lại vào năm 2005).
Sự ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập
của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần
mềm và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện thoại di động
trong tương lai.
1.1.4 Cộng đồng phát triển Android
Android có một cộng đồng phát triển ứng dụng rất lớn, hiện có khoảng hơn
70.000 ứng dụng có sẵn cho Android và đang liên tục được cập nhật. Ứng dụng
được phát triển bằng ngôn ngữ Java kết hợp với thư viện Java có sẵn của Google.
Các nhà phát triển ứng dụng có thể sử dụng máy tính chạy hệ điều hành Windows
hoặc MacOS hoặc Linux kết hợp với Android SDK để phát triển ứng dụng cho
Android. Hệ điều hành Android bao gồm 12.000.000 dòng mã trong đó có
3.000.000 dòng XML, 2.800.000 dòng C, 2.100.000 dòng Java, và 1.750.000 dòng
C + +.
1.2 Kiến trúc của Android
1.2.1 Nền tảng Android
Với khả năng rộng rãi của Android, sẽ rất dễ dàng nhầm lẫn nó với một hệ
điều hành máy tính để bàn. Android là một môi trường phân tầng, xây dựng trên
nền của hệ điều hành nhân Linux, và nó bao hàm nhiều chức năng phong phú. Hệ
thống giao diện người sử dụng gồm có:
 Cửa sổ
 Khung hình
 Các tiểu trình để hiển thị các phần tử phổ biến như các hộp biên soạn,

danh sách, danh sách thả xuống.
12


Android có nhiều tùy chọn kết nối, gồm WiFi, Bluetooth và dữ liệu không
dây qua một kết nối di động (như GPRS, EDGE và 3G). Một kỹ thuật phổ biến
trong các ứng dụng Android là liên kết tới Google Maps để hiển thị một địa chỉ
trực tiếp trong một ứng dụng. Việc hỗ trợ cho các dịch vụ dựa trên địa điểm (chẳng
hạn như GPS) và các dụng cụ đo gia tốc cũng có sẵn trong gói phần mềm Android,
mặc dù không phải tất cả các thiết bị Android được trang bị với các phần cứng cần
thiết. Ngoài ra còn có cả hỗ trợ máy ảnh (camera).
Về mặt lịch sử, có hai lĩnh vực mà các ứng dụng di động đã gắng sức theo
kịp các đối tác máy tính để bàn là đồ họa/đa phương tiện và phương thức lưu trữ
dữ liệu. Android giải quyết thách thức về đồ họa bằng sự hỗ trợ dựng sẵn cho đồ
họa 2D và 3D, gồm cả thư viện OpenGL. Gánh nặng lưu trữ dữ liệu được giảm
nhẹ vì nền Android có gồm cả cơ sở dữ liệu SQLite mã nguồn mở phổ biến. Hình
1.4 cho thấy một khung hình đơn giản hóa về các tầng phần mềm Android.

Hình 1.1: Cấu trúc Android
13


1.2.2 Tầng ứng dụng
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như: contacts,
browser, camera, Phone,… Tất cả các ứng dụng chạy trên hệ điều hành Android
đều được viết bằng Java.
1.2.3 Application 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à
phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập,

các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh
trạng thái, và nhiều, nhiều hơn nữa.
Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử
dụng bởi các ứng dụng lõi. Các kiến trúc ứng dụng được thiết kế để đơn giản hóa
việc sử dụng lại các thành phần; bất kỳ ứng dụng có thể xuất bản khả năng của
mình và ứng dụng nào khác sau đó có thể sử dụng những khả năng (có thể hạn chế
bảo mật được thực thi bởi khuôn khổ). Cơ chế này cho phép các thành phần tương
tự sẽ được thay thế bởi người sử dụng.
1.2.4 Library
Android bao gồm một tập hợp các thư viên C/C++ được sử dụng bởi nhiều
thà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: một dẫn xuất BSD có nguồn gốc từ hệ thống thư
viện chuẩn của C (LIBC), được gắn vào các thiết bị Linux
 Media Libraries - Căn cứ vào OpenCORE trong các gói Video, hỗ trợ
các thư viện phát lại, ghi âm và đọc các định dạng video phổ biến, cũng như các
tập tin hình ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC, AMR, JPG, và PNG
 Surface Manager – Quản lý việc truy xuất vào hiển thị hệ thống
 LibWebCore – Trình duyệt web hiện đại có đầy đủ cả trình duyệt
Android và 1 trình xem web hệ nhúng
14


 SGL – công cụ đồ họa 2D
 SQLite – Cơ sở dữ liệu nhẹ và đầy đủ có sẵn cho tất cả các ứng dụng
1.2.5 Android Runtime
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết các
chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java. Tất cả các
ứng dụng Android đều chạy trong tiến trình riêng. Máy ảo Dalvik đã được viết để
cho một thiết bị có thể chạy nhiều máy ảo hiệu quả. Các VM Dalvik thực thi các

tập tin Dalvik (dex). Định dạng được tối ưu hóa cho bộ nhớ tối thiểu. VM là dựa
trên register-based, và chạy các lớp đã được biên dịch bởi một trình biên dịch Java
để chuyển đổi thành các định dạng dex. Các VM Dalvik dựa vào nhân Linux cho
các chức năng cơ bản như luồng và quản lý bộ nhớ thấp.
1.3 Android Emulator
Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool
(ADT). Người lập trình Android sẽ cần phải sử dụng công cụ IDE (Integrated
Development Enveronment) này để phát triển, debugging và testing cho ứng dụng.
Android Emulator được trang bị đầy đủ hầu hết các tính năng của một thiết
bị thật. Tuy nhiên, một số đã bị giới hạn như là kết nối qua cổng USB, camera và
video, nghe phone, nguồn điện giả lập và bluetooth.
Android Emulator thực hiện các công việc thông qua một bộ xử lý mã
nguồn mở, công nghệ này được gọi là QEMU ( được phát
triển bởi Fabrice Bellard.
1.4 Máy ảo Dalvik
Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị động
Android. Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thi Dalvik
(dex). Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộ nhớ và tốc
độ xử lý.
Dalvik trông giống như máy ảo Java (Java Virtual Machine) nhưng thực tế
thì hoàn toàn khác dưới gốc nhìn của nhà phát triển. Khi nhà phát triển viết một
15


ứng dụng dành cho Android, anh ta thực hiện các đoạn mã trong môi trường Java.
Sau đó, nó sẽ được biên dịch sang các bytecode của Java, tuy nhiên để thực thi
được ứng dụng này trên Android thì nhà phát triển phải thực thi một công cụ có tên
là dx. Đây là công cụ dùng để chuyển đổi bytecode sang một dạng gọi là dex
bytecode. "Dex" là từ viết tắt của "Dalvik executable" đóng vai trò như cơ chế ảo
thực thi các ứng dụng Android.

1.5 Các thư viện của Android
Android cung cấp các gói API để phát triển ứng dụng. Sau đây là các API
mà tất cả các thiết bị Android đều tối thiểu phải hỗ trợ để giúp cho chúng ta một
cái nhìn tổng quát về thư viện này.
 Android.util: Gói API lõi, chứa các class cấp thấp như container, string
formatter, XML parsing.
 Android.os: Truy cập tới chức năng của hệ điều hành như: gởi nhận tin
nhắn, giao tiếp nội bộ giữa các ứng dụng, thời gian…
 Android.graphics: Cung cấp các lớp liên quan tới xử lý đồ họa ở mức
thấp. Hỗ trợ các hàm cơ bản như vẽ điểm, vẽ miền, tô màu… trên khung canvas.
 Android.text: Cung cấp các hàm phân tích và xử lý chuỗi.
 Android.database: Cung cấp các lớp cấp thấp cần thiết để làm việc với
database.
 Android.content: Dùng để quản lý các tài nguyên, các nội dung và các
gói.
 Android.view: Views là lớp cha của mọi lớp giao diện người dùng.
 Android.widget: Được thừa kế từ lớp View, bao gồm các lớp cơ bản để
xây dựng giao diện widget như: list, button, layout…
 Android.map: Gói API cấp cao, dùng để truy cập tới các chức năng của
GoogleMap.
 Android.app: Gói API cấp cao, bao gồm các Activity và Service – hai
16


lớp cơ sở cho mọi ứng dụng Android.
 Android.telephony: Cung cấp cho bạn khả năng tương tác trực tiếp với
các chức năng cơ bản của một điện thoại như nghe, gọi, tin nhắn
 Android.webkit: cung cấp một webView control trên nền webkit để có
thể nhúng ứng dụng, cùng với các API điều khiển cơ bản như stop, refresh,
cookieManager…

1.6 Các thành phần trong một Android Project
1.6.1 AndroidManifest.xml
Trong bất kì một project 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 screen sử dụng, các
permission cũng như các theme cho ứng dụng. Đồng thời nó cũng chứa thông tin
về phiên bản SDK cũng như main activity sẽ chạy đầu tiên.
File này được tự động sinh ra khi tạo một Android project. Trong file manifest
bao giờ cũng có 3 thành phần chính đó là: application, permission và version.
1.6.2 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. Chẳng hạn như, bạn kéo và thả
một file hình ảnh từ bên ngoài vào project thì ngay lập tức thuộc tính đường dẫn
đến file đó cũng sẽ được hình thành trong file R.java hoặc xoá một file hình ảnh
thì đường dẫn tương ứng đến hình ảnh đó cũng tự động bị xoá.
Có thể nói file R.java hoàn toàn không cần phải đụng chạm gì đến trong cả
quá trình xây dựng ứng dụng.
1.7 Các thành phần chính và chu kỳ của một ứng dụng Android
1.7.1 Các thành phần chính trong một ứng dụng của Android
A, Activity :
Activity là một trong bốn thành phần chính và đóng vai trò quan trọng nhất
của một ứng dụng Android. Activity là nền tảng của một ứng dụng. 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ó
17


sẽ được xếp lên đầu của 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. 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.
Một ứng dụng thường bao gồm nhiều activity được ràng buộc với nhau.
Thông thường, một trong những activity trong một ứng dụng được quy định như
các activity chính, được trình bày cho người dùng khi chạy ứng dụng cho lần đầu
tiên. Mỗi activity sau đó có thể bắt đầu activity khác để thực hiện hành động khác
nhau. Mỗi lần một activity mới bắt đầu, các activity trước đó được dừng lại. Khi
một activity mới bắt đầu, nó được đẩy lên phía sau ngăn xếp. Sự sắp xếp ngăn xếp
tuân thủ các cơ chế cơ bản vào sau ra trước đây là cơ chế hàng đợi, khi người dùng
được thực thi với các activity hiện tại và nhấn phím BACK thì nó sẽ khởi động và
phá hủy các activity trước đó.
Mỗi Activity chủ yếu có 3 trạng thái chu kỳ chính như sau:
 Activity hoặc running: Khi activity được chạy trên màn hình. Activity
này tập trung vào những thao tác của người dùng trên ứng dụng.
 Paused: Activity được tạm dựng khi mất quyền hoạt động nhưng người
dùng vẫn trông thấy, có nghĩa là một activity mới ở trên nó nhưng không bao giờ
phủ hết màn hình. Một activity tạm dừng là còn sống nhưng có thể bị kết thúc bởi
hệ thống trong trường hợp thiếu vùng nhớ.
 Stopped: Nếu stopped hoàn toàn chứa bởi Activity khác thì vẫn còn
trạng thái và thông tin thành viên đó. Người dùng không nhìn thấy và thường bị
loại bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác.
 Các phương thức chính xử lý trong Activity
 Create Activity(): Phương thức này sẽ được triển khai khi hệ thống
chạy và bắt đầu khởi tạo Activity khởi động trong ứng dụng và đây là nơi mà gọi
ra setContentView() để xác định việc layout cho giao diện người dùng của
Activity.
 Start Activity() : Khi làm việc trong ứng dụng của mỗi người dùng thì
người dùng sẽ cần khởi động các Activity bằng cách tạo ra một Intent rõ ràng và
xác định Activity mà người dùng muốn bắt đầu.
 Đóng một Activity : Người dùng có thể đóng một Activity bằng cách

gọi phương thúc finish(). Tất nhiên, cũng có thể đóng một Activity riêng biệt trước
đó đã bắt đầu bằng cách gọi finishActivity().

18


Hình 1.2: Android Emulator.
 Activity Stack : Bên trong hệ thống các Activity được quản lý như một
Activity stack. Khi một Activity mới được start, nó được đặt ở đỉnh của stack và
trở thành Activity đang chạy Activity trước sẽ ở bên dưới Activity mới và sẽ không
thấy trong suốt quá trình Activity mới tồn tại. Nếu người dùng nhấn nút Back thì
19


Activity kế tiếp của stack sẽ di chuyển lên và trở thành active.

Hình 1.3: Activity Stack.
Tính liên lạc giữa 2 Activity. Khi di chuyển sang một Activity khác thì nó
có thể gửi kèm dữ liệu trong Intent đó như sau :
intent.putExtra(Game.KEY_DIFFICULTY,i);
Bên phía Activity được khởi động hay được di chuyển đến, có thể lấy dữ
liệu được gửi như sau :
Int diff = getIntent().getIntExtra (KEY_DIFFICULTY, DIFFICULTY_ EASY);
B, Intent
 Khái niệm Intent :
Là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một
Activity.
Là cầu nối giữa các Activity : Ứng dụng Android thường bao gồm nhiều

20



Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc
khác nhau. Intent chính là người đưa thư, giúp các Activity có thể triệu gọi cũng
như truyền các dữ liệu cần thiết tới một Activity khác.

Hình 1.4: Truyền dữ liệu giữa 2 Activity.
 Dữ liệu Intent :
 Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp
android.content.Intent
 Các thuộc tính của một đối tượng Intent :

21


Hình 1.5: Các thuộc tính của Intent.
Đây là những hằng String đã được định nghĩa sẵn trong lớp Intent. Đi kèm
với nó là các Activity hay Application được xây dựng sẵn sẽ được triệu gọi mỗi
khi.
Intent tương ứng được gửi (tất nhiên khi được cung cấp đúng data).
Ngoài ra còn các các thành phần quan trọng khác như :
Service (Android.app.Service): cung cấp các dịch vụ liên quan đến
client/service. Một Service sẽ chạy ngầm bên dưới, sau đó các client (Activity) sẽ
kết nối và truy xuất các hàm trên dịch thông qua Interface class.
Broadcast receiver (Android.content.BroadcastReceiver): đây là một
ứng dụng chạy ngầm dùng để đọc và cập nhật thông tin trên UI, ví dụ như cập nhật
sự thay đỗi giờ, pin...
22



Content Provider: cung cấp chức năng truy vấn dữ liệu giữa các ứng dụng
của Android.
1.7.2 Chu kỳ sống của ứng dụng Android
Một tiến trình Linux gói gọn một ứng dụng Android đã được tạo ra cho ứng
dụng khi codes cần được xây dựng, khởi chạy và sẽ còn chạy cho đến khi:
 Nó không phụ thuộc.
 Hệ thống cần lấy lại bộ nhớ mà nó chiếm giữ cho các ứng dụng khác.
Một sự khác thường và đặc tính cơ bản của Android là thời gian sống của
tiến trình ứng dụng không được điều khiển trực tiếp bởi chính nó. Thay vào đó, nó
được xác định bởi hệ thống qua một kết hợp của:
 Những phần của ứng dụng mà hệ thống biết đang chạy.
 Những phần đó quan trọng như thế nào đối với người dùng.
 Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống.
1.8 Thành phần giao diện Android & các control
Tạo giao diện
Android cung cấp một số công cụ thiết kế giao diện:
 Views: là lớp UI cơ bản cho các control giao diện. Tất cả các control
giao diện người dùng, các lớp layout đều được dẫn xuất từ lớp Views.
 ViewGroups: được mở rộng từ lớp View và có thể chứa nhiều Views.
ViewGroups cũng được kế thừa để cung cấp các lớp quản lý bố cục như
LinearLayout. ViewGroup được dùng để xây dựng nên các component có thể dùng
lại (widget) hoặc để quản lý bố cục cho các control.
 Activity: dùng để hiển thị giao diện người dùng. Lớp này do người phát
triển ứng dụng viết.

23


Hình 1.6: Quan hệ giữa các thành phần trên
Tạo các Control tùy chỉnh

Người phát triển có thể tạo ra các control theo ý của mình để tạo được một
giao diện mang tính duy nhất phù hợp với yêu cầu của người dùng. Các control
mới cần phải được thừa kế từ lớp View hoặc SurfaceView.
Lớp View cung cấp một đối tượng Canvas và một số phương thức vẽ cũng
như các lớp Paint, để tạo một giao diện trực quan.Người thiết kế có thể định nghĩa
lại các sự kiện người dùng như cảm ứng trên màn hình, nhấn phím để tạo nên sự
tương tác.Trong những trường hợp mà không đòi hỏi việc vẽ lại cũng như đồ họa
3D thì lớp cơ sở View có giải pháp hiệu quả.
Trong khi đó, lớp SurfaceView cung cấp một đối tượng canvas hỗ trợ việc
vẽ từ một luồng xử lý nền và sử dụng openGL cho đồ họa 3D. Đây là một lựa chọn
tuyệt với cho các điều khiển đòi hỏi đồ họa cao, cần phải cập nhật liên tục hoặc
hiển thị các đồ họa phức tạp, như game 3D.
Tạo giao diện Activity với các View
Một Activity khi chưa thiết kế sẽ khởi động với một màn hình rỗng. Để
thiết lập giao diện cho màn hình rỗng này cần gọi phường thức setContentView khi
everride lại phương thức onCreate. Phương thức setContentView có thể nhận một
tham số là resource ID hoặc một thể hiện của View. Do đó, có thể định nghĩa giao
diện ứng dụng bằng code hoặc tham chiếu đến resource (layout).
Nếu dùng layout resource thì sẽ tách riêng việc thiết kế giao diện và phần
code xử lý, cung cấp một khả năng thay đổi linh hoạt giao diện mà không thay đổi
code bên trong.
CHƯƠNG 2:
PHÂN TÍCH VÀ ỨNG DỤNG GAME SUDOKU
2.1 Khảo sát
2.1.1 Giới thiệu về game sudoku
24


2.1.1.1 Lịch sử Sudoku
Sudoku có lịch sử xa xưa từ hàng ngàn năm. Nó từng đi qua các nền văn

hóa cổ, và có lẽ nó bắt nguồn từ Trung Hoa, theo như một tài liệu của Ả rập vào
thế kỷ thứ 9. Năm 990 một danh sách những “Ô số kỳ ảo” đã xuất hiện và tỏ ra
không khác mấy so với bản Sudoku xuất hiện trong Từ Điển Bách Khoa Ikhwan
al-salfa của các học giả người Ả Rập. Trong từ điển này, họ gọi nó là wafq. Những
ô số vuông vắn ấy được dùng làm bùa để giúp phụ nữ dễ sinh đẻ. Nó được gọi tên
là ô vuông buduh. Món bùa này trở nên phổ biến đến mức các nhà văn Hồi giáo
bắt đầu lập ra các tổ hợp số phức tạp hơn sao cho không có con số nào lặp lại.
Ý tưởng tạo nên những ranh giới cho các khối vuông (biến nó thành trò
chơi) đã được Ahmed al-Buni ghi lại vào năm 1225, mặc dù phương pháp này
được tin là có xuất xứ từ Ba Tư.
Sudoku có thêm một bước tiến hóa mới vào năm 1776 khi một nhà toán học
kiêm vật lý học người Thuỵ Sĩ tên Leonhard Euler bắt đầu nghiên cứu và phát
triển các luật chơi mà ngày nay ta gọi là luật chơi Sudoku.
Đi xuyên qua một cuộc hành trình dài lâu và kiên trì, Sudoku lần đầu tiên
được xuất bản vào cuối thập niên 1970 trong một tờ tạp chí ở New York. Tờ tạp
chí này đã giới thiệu về các ô số kỳ ảo và khuôn nó lại trong một lưới 9x9, tạo
thành từ các khối 3x3. Và như thế, Sudoku đã ra đời.
Năm 1986, trong một chuyến đi Mỹ, một nhà xuất bản Nhật Bản, Nikoli, đã
khám phá ra các ô số. Họ đặt tên cho nó là SuDoku (Su là số, Doku là đơn độc), và
làm cho nó nhanh chóng trở thành một trò chơi phổ biến ở Nhật Bản. Nhưng
Sudoku chỉ bó hẹp trong khuôn khổ xứ sở anh đào trong suốt hơn 20 năm cho đến
khi một thẩm phán người Hồng Kông gốc New Zealand tên là Wayne Gould tình
cờ phát hiện một cuốn sudoku trong một hiệu sách Nhật Bản. Ông đâm nghiền trò
chơi số cổ xưa này. Năm 2004, Gould đã thuyết phục tổng biên tập của báo này
cho đăng Sudoku bên cạnh các ô chữ. Độc giả lập tức bị cuốn hút và yêu cầu đăng
thêm nữa. Chỉ trong vài tuần lễ, các tờ báo trên khắp nước Anh đã thi nhau đăng
25



×