dөng cӫa Java trên mӝt hӋ ÿLӅu hành cө thӇ, cҫn phҧL ÿҥt máy ҧo WѭѫQJӭng cho hӋ ÿLӅXKjQKÿyx Application: Là mӝWFKѭѫQJWUuQKӭng dөQJÿѭӧc thӵc thi trӵc tiӃp trên các máy ҧo cӫa Java.. Bҩt k
Trang 1ĈҤI HӐ&Ĉ¬1 ҸNG ĈҤI HӐ&6Ѭ3+ ҤM
Ĉ¬1 ҸNG, 05/2013
Trang 4LӠI CҦ0Ѫ1
Tôi xin chân thành cҧPѫQFiFWKҫy cô giáo trong khoa Tin hӑc cùng toàn thӇ
thҫy cô cӫDWUѭӡQJĈҥi HӑF6ѭ3Kҥm ± Ĉҥi HӑFĈj1ҹQJÿmWUX\ӅQÿҥt cho tôi
nhӳng kiӃn thӭc quý giá trong suӕt nhӳQJQăPKӑc vӯa qua
Xin chân thành cҧPѫQF{3KҥP'ѭѫQJ7KX+ҵQJÿmWұn tình chӍ bҧo và
JL~Sÿӥ cho tôi KRjQWKjQKÿӗ án này
Cuӕi cùng tôi xin cҧPѫQFiFEҥn trong khoa Tin, nhӳQJQJѭӡLÿmJL~Sÿӥ, chia sҿ nhӳng kiӃn thӭc, kinh nghiӋm, tài liӋX«WURQJVXӕt quá trình nghiên cӭu
thӵc hiӋQÿӅ tài
Trang 57{L[LQFDPÿRDQ
1 Nhͷ ng n͡ i dung trong báo cáo này là do tôi th c hi͏ n
2 M͕ i tham kh̫ RGQJWURQJEiRFiRQj\ÿ ͉ Xÿ˱ ͫc trích d̳n rõ ràng tên tác giá, tên công trình, thͥ LJLDQÿ ͓ DÿL ͋m công b͙
4 M͕ i sao chép không hͫ p l͏ , vi ph̩ m quy ch͇ ÿjRW ̩o, hay gian trá, tôi xin ch͓ u hoàn toàn trách nhi͏ m
Sinh viên thӵc hiӋn Phan ViӃW'NJQJ
Trang 6MӨC LӨC
MӢ ĈҪU 13
1 Giӟ i thiӋ Xÿ Ӆ tài 13
2 Mө FÿtFKêQJKƭDF ӫDÿ Ӆ tài 14
3KѭѫQJiQWUL ӇQNKDLÿ Ӆ tài 14
&+Ѭ Ѫ1*,&Ѫ6 Ӣ LÝ THUYӂT 15
I.1 Giӟ i thiӋ u các công cө ÿ Ӈ làm game 15
I.1.1 Eclipse 15
I.1.2 Giӟ i thiӋ u vӅ ngôn ngӳ lұ p trình Java 15
I.1.2.1 Lӏ ch sӱ phát triӇ n 15
I.1.2.2 Khҧ QăQJF ӫa Java 16
I.1.2.3 Nhӳ QJÿ һ FÿL Ӈm cӫa Java 16
I.1.2.4 Máy ҧ o Java (JVM ± Java Virtual Machine) 17
I.1.2.5 Hai kiӇ u ӭ ng dө QJGѭ ӟi ngôn ngӳ lұ p trình Java 18
I.1.2.6 Bӝ phát triӇ n ӭ ng dө ng Java (JDK ± Java Development Kit) 18
I.1.3 Giӟ i thiӋ u vӅ hӋ ÿL Ӆ u hành Android 19
I.1.3.1 Lӏ ch sӱ Android 19
I.1.3.2 Khái niӋ m Android 20
Trang 7I.2.1 Game loop (vòng lһ p cӫ a game) 26
I.2.2 Framerate (FPS) 27
I.2.3 Bӝ nhӟ (memory) 27
I.2.4 State 28
I.3 Giӟ i thiӋ u vӅ SDK 28
&+ѬѪ1*,,75Ñ&+Ѫ,9¬48È75Î1+/ ҰP TRÌNH, KIӆM THӰ 32
,,7UzFKѫL 32
II.2 Quá trình lұ p trình 33
,,3KkQWtFKFKѭ ѫQJWUuQK 33
II.2.2 Lұ SWUuQKWUzFKѫL 35
II.2.2.1 Main menu 43
II.2.2.2 Addition & Subtraction 44
II.2.2.3 Multiplication & Division 48
II.2.2.4 Brain Cruncher 51
II.2.2.5 Math Blaster Challenge 55
II.2.3 Nhұ p 56
II.2.4 Âm thanh 56
II.3 Quá trình kiӇ m thӱ sҧ n phҭ m 56
,,&jLÿ һ t hӋ thӕ ng trên Android 56
II.3.2 KiӇ m thӱ 57
&+ѬѪ1*,,,0 ӜT SӔ KӂT QUҦ DEMO 67
KӃ t quҧ demo trên Android emulator 67
KӂT LUҰN 84
1 KӃ t quҧ ÿ ҥ Wÿѭ ӧc 84
Trang 82 Nhӳ ng vҩ Qÿ Ӆ còn tӗ Qÿ ӑng 84
+ѭ ӟng phát triӇ n cӫ Dÿ Ӆ tài 84 TÀI LIӊU THAM KHҦO 85
Trang 9MӨC LӨC CÁC HÌNH
Hình 1 - Các thành viên cͯ D/LrQPLQKGLÿ ͡ng mͧ" 19
Hình 2 Mô hình ki͇ n trúc n͉ n t̫ ng Android 21
Hình 3 Mô hình hͫ p tác giͷ a máy ̫ o Dalvik và Navite code 25
Hình 5 Bi͋ u di͍ n khung thi͇ t k͇ cͯ DFK˱˯QJWUuQK 33
Hình 6 K͇ t qu̫ demo bi͋ XW˱ ͫng cͯa game trên Android 67
Hình 7 K͇ t qu̫ demo màn hình chính cͯ a game trên Android 68
Hình 8 K͇ t qu̫ demo màn hình chính vͣ i extra menu sound on cͯ a game trên Android 68
Hình 9 K͇ t qu̫ demo màn hình chính vͣ i extra menu sound off cͯ a game trên Android 69
Hình 10 K͇ t qu̫ demo màn hình tùy ch͑ nh cͯ a game trên Android 69
Hình 11 K͇ t qu̫ GHPRPjQKuQKWKD\ÿ ͝LQJ˱ ͥLFK˯LF ͯa game trên Android 70
Hình 12 K͇ t qu̫ GHPRPjQKuQKÿ ͝LWrQQJ˱ ͥLFK˯LF ͯa game trên Android 70 Hình 13 K͇ t qu̫ demo màn hình chu̱ n b͓ YjRFK˯L$GGLWLRQ 6XEWUDFWLRQ cͯ a game trên Android 71
Hình 14 K͇ t qu̫ GHPRPjQKuQKFK˯L$GGLWLRQ 6XEWUDFWLRQF ͯa game trên Android 71
Hình 15 K͇ t qu̫ GHPRPjQKuQKFK˯L$GGLWLRQ 6XEWUDFWLRQNKLQJ˱ ͥLFK˯L tr̫ lͥ Lÿ~QJF ͯa game trên Android 72
Hình 16 K͇ t qu̫ GHPRPjQKuQKFK˯L$GGLWLRQ 6XEWUDFWLRQ NKLQJ˱ ͥLFK˯L tr̫ lͥ i sai cͯ a game trên Android 72
Hình 17 K͇ t qu̫ demo màn hình xem l̩ i k͇ t qu̫ FK˯L$GGLWLRQ 6XEWUDFWLRQ cͯ a game trên Android 73
Trang 10Hình 18 K͇ t qu̫ GHPRPjQKuQK[HPÿL ͋ m cao Addition & Subtraction cͯ a
game trên Android 73
Hình 19 K͇ t qu̫ demo màn hình th͋ hi͏ n bi͋ Xÿ ͛ ÿL ͋ m cao Addition &
Subtraction cͯ a game trên Android 74
Hình 20 K͇ t qu̫ demo màn hình chu̱ n b͓ FK˯L0XOWLSOLFDWLRQ 'LYLVLRQF ͯa
game trên Android 74
Hình 21K͇ t qu̫ GHPRPjQKuQKFK˯L0XOWLSOLFDWLRQ 'LYLVLRQF ͯa game
Hình 24 K͇ t qu̫ demo màn hình xem l̩ i k͇ t qu̫ FK˯L0XOWLSOLFDWLRQ
Division cͯ a game trên Android 76
Hình 25 K͇ t qu̫ GHPRPjQKuQK[HPÿL ͋ m cao Multiplication & Division cͯ a
game trên Android 77
Hình 26 K͇ t qu̫ demo màn hình th͋ hi͏ n bi͋ Xÿ ͛ ÿL ͋ m cao Multiplication &
Division cͯ a game trên Android 77
Hình 27 K͇ t qu̫ demo màn hình ch͕ Qÿ ͡ khó Brain Cruncher cͯa game trên
Android 78
Hình 28 K͇ t qu̫ demo màn hình chu̱ n b͓ FK˯L%UDLQ&UXQFKHUF ͯa game trên
Android 78
Hình 29 K͇ t qu̫ GHPRPjQKuQKFK˯L%UDLQ&UXQFKHUFkXK ͗Lÿ ̯u tiên cͯa
game trên Android 79
Hình 30 K͇ t qu̫ GHPRPjQKuQKFK˯L%UDLQ&UXQFKHUFkXK ͗i ti͇ p theo cͯ a
game trên Android 79
Hình 31 K͇ t qu̫ GHPRPjQKuQKQJ˱ ͥLFK˯LQK ̵p k͇ t qu̫ cu͙ i cùng Brain
Trang 11Hình 32 K͇ t qu̫ demo màn hình xem l̩ LPjQFK˯L%UDLQ&UXQFKHUF ͯa game
trên Android 80
Hình 33 K͇ t qu̫ demo màn hình xem l̩ i câu h͗ LYjÿiSiQ%UDLQ&UXQFKHU
cͯ a game trên Android 81
Hình 34 K͇ t qu̫ GHPRPjQKuQKFK˯L Math Blaster Challenge cͯ a game trên
Android 81
Hình 35 K͇ t qu̫ GHPRPjQKuQKFK˯L0DWK%ODVWHU&KDOOHQJHNKLQJ˱ ͥLFK˯L tr̫ lͥ Lÿ~QJF ͯa game trên Android 82
Hình 36 K͇ t qu̫ demo màn hình lên level Math Blaster Challenge cͯ a game
Trang 12MӨC LӨC CÁC BҦNG
Bҧ ng 1BiӇ u diӉ n các ca kiӇ m thӱ vӅ gameplay 63
Bҧ ng 2 BiӇ u diӉ n các ca kiӇ m thӱ vӅ âm thanh 65
Bҧ ng 3 BiӇ u diӉ n các ca kiӇ m thӱ Interrupt 66
Trang 13*LӟLWKLӋXÿӅWjL
Tҩt cҧ mӑLQJѭӡLÿӅu cҫQFiFWUzFKѫL7UzFKѫLÿӇ giӃt thӡi gian, tìm hiӇu thӃ giӟL[XQJTXDQKWăQJVӭc cҥnh tranh hay chӭng tӓ bҧn thân Qua
hàng triӋX QăP WLӃn hóa cӫD FRQ QJѭӡi và cӫa các loҥL WUz FKѫL Gѭӟi hình
thӭc này hay hình thӭFNKiFÿӅu mang theo tҩt cҧ nhӳng tiêu chí kӇ trên
Vӟi mӝt tӹ chiӃFÿLӋn thoҥi thông minh trên toàn thӃ giӟi và máy tính
bҧQJFNJQJÿmÿӃQWD\KjQJWUăPWULӋXQJѭӡLWLrXGQJÿk\FKtQKOjFѫKӝi vàng cho các nhà phát triӇn phҫn mӅPGLÿӝng tҥo ra sӵ thành công và phát
triӇn sӵ nghiӋp lâu dài vӟi game
&K~QJWDÿDQJӣ QăPWKӭ sáu cӫa cuӝc cách mҥQJÿLӋn thoҥLGLÿӝng
1KѭÿmÿӅ cұp ӣ trên, hiӋn có khoҧng 1 tӹ chiӃFÿLӋn thoҥLWK{QJPLQKÿDQJ
ÿѭӧc sӱ dөng trên toàn thӃ giӟi 1 tӹ chiӃF ÿLӋn thoҥi tiӃp theo dӵ kiӃn sӁ
ÿѭӧc nӕi mҥQJWURQJYzQJEDQăPWӟL&iFQѭӟc phát triӇn hiӋQÿmÿҥWÿӃn
ÿLӇm bão hòa, hҫu hӃt nhӳQJQJѭӡi tiêu dùng ӣ Mӻ YjFKkXÆXÿDQJVӣ hӳu
ÿLӋn thoҥLWK{QJPLQKÿӅu khҷQJÿӏnh rҵng hӑ sӁ tiӃp tөc nâng cҩSÿLӋn thoҥi
cӫa mình khi phiên bҧn mӟi xuҩt hiӋn Nhӳng thӏ WUѭӡng mӟi nәLQKѭҨQĈӝ,
Trung QuӕF Yj FiF QѭӟF Ĉ{QJ ÆX FNJQJ VӁ ÿҥW ÿѭӧc mӭF WăQJ WUѭӣng ҩn
Wѭӧng trong mӝWYjLQăPWӟi
HҫXQKѭWҩt cҧ mӑLQJѭӡi trên thӃ giӟLÿӅXÿDQJVӣ hӳu trong túi cӫa mình mӝt thiӃt bӏ ÿLӋn toán Và nhӳng ӭng dөQJKjQJÿҫXÿѭӧc tìm kiӃm và
sӱ dөng trong các smartphone chính là các loҥi game Các nhà phát triӇn
JDPHWUrQÿLӋn thoҥLGLÿӝQJÿDQJWKӵc sӵ ӣ thӡi hoàng kim, và thӡi kǤ này
sӁ không sӟm kӃt thúc trong thӡi gian tӟi
Chính vì vұy, bҧn thân em chӑQÿӅ tài này nhҵm muӕn nghiên cӭu vӅ
kӻ thuұt làm game 2D trên hӋ ÿLӅX KjQK $1'52,' %ѭӟF ÿҫu xây dӵng
Trang 14demo mӝWFKѭѫQJWUuQKJDPHÿѫQJLҧn phөc vө cho quá trình nghiên cӭu và
công viӋFWѭѫQJODLVDXQj\
0өFÿtFKêQJKƭDFӫDÿӅWjL
Cӫng cӕ nhӳng kiӃn thӭF ÿm Kӑc và nghiên cӭu: tìm hiӇu hӋ ÿLӅu hành
Android, nghiên cӭu công nghӋ làm game 2D
Xây dӵQJWUzFKѫL0DWK:RUNRXWWUrQKӋ ÿLӅu hành Android
Cӫng cӕ kӃt quҧ ÿmÿҥWÿѭӧc (bao gӗm kiӇm thӱ các module và chӭFQăQJ
cӫa hӋ thӕng, chӍnh sӱa lӛi nӃu có và tiӃn tӟi hoàn thiӋQFKѭѫQJWUuQKӣ mӭc
có thӇ)
Song song vӟLFiFJLDLÿRҥn trên là quá trình hӑc hӓi, tích góp tài liӋu và các
kiӃn thӭc vӅ các công cө liên quan nhҵm phөc vө cho viӋc xây dӵng và hoàn
thiӋQÿӅ tài
Trang 15&+ѬѪ1 *,&Ѫ6Ӣ/é7+8<ӂ7 I.1 GiӟLWKLӋXFiFF{QJFөÿӇOjPJDPH
I.1.1 Eclipse
Eclipse là phҫn mӅm miӉQ SKt ÿѭӧc các nhà phát triӇn sӱ dөQJ ÿӇxây dӵng nhӳng ӭng dөng J2EE, sӱ dөng Eclipse nhà phát triӇn có thӇ tích
hӧp vӟi nhiӅu công cө hӛ trӧ NKiFÿӇ Fyÿѭӧc mӝt bӝ công cө hoàn chӍnh
mà không cҫQGQJÿӃn phҫn mӅm riêng nào khác Eclipse SDK bao gӗm 3
phҫn chính: Platform, Java Development Toolkit (JDT), Plug-in
Development Environment (PDE) VӟL-'7(FOLSVHÿѭӧF[HPQKѭOjPӝt
P{L WUѭӡng hӛ trӧ phát triӇn Java mҥnh mӁ PDE hӛ trӧ viӋc mӣ rӝng
Eclipse, tích hӧp các Plug-in vào Eclipse Platform Eclipse Platform là nӅn
tҧng cӫa toàn bӝ phҫn mӅm Eclipse, mөF ÿtFK Fӫa nó là cung cҩp nhӳng
dӏch vө cҫn thiӃt cho viӋc tích hӧp nhӳng bӝ công cө phát triӇn phҫn mӅm
NKiFGѭӟi dҥng Plug-in, bҧQWKDQ-'7FNJQJFyWKӇ ÿѭӧc coi là mӝt Plug-in
OjP FKR (FOLSVH QKѭ Oj Pӝt Java IDE (Integrated Development
Environment ± P{LWUѭӡng phát triӇn tích hӧp)
I*LӟLWKLӋXYӅQJ{QQJӳOұSWUuQK-DYD
I/ӏFKVӱSKiWWULӇQ 1ăP , Sun MicroSystems thӵc hiӋn dӵ án Green nhҵm phát triӇn phҫn mӅm trong các thiӃt bӏ dân dөng James Gosling, chuyên gia lұS WUuQK ÿm Wҥo ra mӝt ngôn ngӳ lұp trình mӟi có tên là Oak Ngôn ngӳ này có cú pháp gҫn giӕQJQKѭ&QKѭQJEӓ qua các WtQKQăQJQJX\KLӇm cӫD&QKѭtruy cұp trӵc tiwwsp tài nguyên hӋ
thӕng, con trӓÿӏQKQJKƭDFKӗng các toán tӱ«
Trang 16Khi ngôn ngӳ 2DNWUѭӣQJWKjQK:::FNJQJÿDQJYjRWKӡi kǤ phát triӇn manh mӁ Sun cho rҵQJ ÿk\ Oj Pӝt ngôn ngӳ thích hӧp cho
,QWHUQHW1ăP2DNÿәi tên thành Java và sau ÿyÿӃn 1996 Java
ÿѭӧF[HPQKѭPӝt chuҭn công nghiӋp cho Internet
,.KҧQăQJFӫD-DYD
x Là mӝt ngôn ngӳ bұFFDRQKѭ&&3HUO6PDOO7DON«FKRQrQFythӇ GQJÿӇ tҥo ra các ӭng dөQJÿӇ giҧi quyӃt các vҩQÿӅ vӅ sӕ, xӱ lý
YăQEҧn, tҥRUDWUzFKѫLYà nhiӅu thӭ khác
x &yFiFP{LWUѭӡng lұSWUuQKÿӗ hӑDQKѭ9LVXDO-DYD6\PDQWHF&DIp
x Hӛ trӧ lұp trình phân tán (Remote Method Invocation) cho phép mӝt
ӭng dөng có thӇ ÿѭӧc xӱ lý phân tán trên các máy tính khác nhau
x 9jOX{Qÿѭӧc bә VXQJFiFWtQKQăQJFDRFҩp khác trong các phiên bҧn
sau
I1KӳQJ ÿһFÿLӇPFӫD-DYD
x Ngôn ngӳ KRjQWRjQKѭӟQJÿӕLWѭӧng
x Ngôn ngӳ ÿDQӅn cho phép mӝWFKѭѫQJWUuQKFyWKӇ thӵc thi trên các
hӋ ÿLӅu hành khác nhau (MS Windows, UNIX, Linux) mà không phҧi biên dӏFKFKѭѫQJWUuQK3KѭѫQJFKkPFӫD-DYDOj³9LӃt mӝt lҫn, chҥy trên nhiӅu nӅQ´:ULWH2QFH5XQ$Q\:KHUH
Trang 17x Ngôn ngӳ ÿDOXӗng, cho phép trong mӝWFKѭѫQJWUuQKFyWKӇ có nhiӅu
luӗQJÿLӅu khiӇQÿѭӧc thӵc thi song song nhau, rҩt hӳu ích cho các xӱ
lý song song
x Ngôn ngӳ SKkQWiQFKRSKpSFiFÿӕLWѭӧng cӫa mӝt ӭng dөQJÿѭӧc
phân bӕ thӵc thi trên các máy tính khác nhau
x Ngôn ngӳ ÿӝng, cho phép mã lӋnh cӫa mӝWFKѭѫQJWUuQKÿѭӧc tҧi tӯ
mӝt máy tính vӅ máy cӫDQJѭӡi yêu cҫu thӵFWKLFKѭѫQJWUuQK
x Ngôn ngӳ an toàn, tҩt cҧ các thao tác truy xuҩt vào các thiӃt bӏ vào ra
ÿӅu thӵc hiӋn trên máy ҧo, nhӡ ÿyKҥn chӃ các thao tác nguy hiӇm cho máy tính thұt
x Ngôn ngӳ ÿѫQ JLҧn, dӉ hӑc, kiӃQ WU~F FKѭѫQJ WUuQK ÿѫQ JLҧn, trong sáng
I.0i\ҧR-DYD-90 ± Java Virtual Machine)
ĈӇ ÿҧm bҧo WtQK ÿD QӅn, Java sӱ dөQJ Fѫ FKӃ Máy ҧo cӫa Java
B\WHFRGHÿyOjQJ{QQJӳ máy cӫa Máy ҧR-DYDWѭѫQJWӵ QKѭFiFOӋnh nhӏ phân cӫa các máy tính thӵc
MӝWFKѭѫQJWUuQKVDXNKLÿѭӧc viӃt bҵng ngôn ngӳ Java (có phҫn mӣ
rӝng là java) phҧLÿѭӧc biên dӏch thành tұp tin thӵFWKLÿѭӧc trên máy
ҧo Java (có phҫn mӣ rӝng là class) Tұp tin thӵc thi này chӭa các chӍthӏ Gѭӟi dҥng mã Bytecode mà máy ҧo Java hiӇXÿѭӧc phҧi làm gì
Khi thӵc hiӋn mӝWFKѭѫQJWUuQKPi\ҧo Java lҫQOѭӧt thông dӏch các chӍ thӏ Gѭӟi dҥng Bytecode thành các chӍ thӏ dҥng nhӏ phân cӫa máy tính thӵc và thӵc thi thӵc sӵ chúng trên máy tính thӵc
Máy ҧo thӵc tӃ ÿyOjPӝWFKѭѫQJWUuQKWK{QJGӏch Vì thӃ các hӋ ÿLӅu hành khác nhau sӁ có các máy ҧR NKiF QKDX ĈӇ thӵc thi mӝt ӭng
Trang 18dөng cӫa Java trên mӝt hӋ ÿLӅu hành cө thӇ, cҫn phҧL ÿҥt máy ҧo WѭѫQJӭng cho hӋ ÿLӅXKjQKÿy
x Application: Là mӝWFKѭѫQJWUuQKӭng dөQJÿѭӧc thӵc thi trӵc tiӃp trên các máy ҧo cӫa Java
I%ӝSKiWWULӇQӭQJGөQJ-DYD-'. ± Java Development Kit)
JDK là mӝt bӝ công cө FKRSKpSQJѭӡi lұp trình phát triӇn và triӇn khai các ӭng dөng bҵng ngôn ngӳ -DYDÿѭӧc cung cҩp miӉn phí
bӣi công ty JavaSoft (hoһc Sun) Có các bӝ JDK cho các hӋ ÿLӅu hành khác nhau Các ҩn bҧn cӫa JDK không ngӯQJÿѭӧc phát hành, có thӇ
tҧi vӅ tӯ ÿӏa chӍhttp://java.sun.com hoһc http://www.javasoft.com
Bӝ công cө này gӗPFiFFKѭѫQJWUuQKWKӵFWKLÿiQJFK~êVDX
x -DYDF&KѭѫQJWUuQKELrQGӏFKFiFFKѭѫQg trình nguӗn viӃt
bҵng ngôn ngӳ java ra các tұp tin thӵFWKLÿѭӧc trên máy ҧo Java
x -DYDĈk\OjFKѭѫQJWUuQKOjPPi\ҧo cӫa Java, thông dӏch
mã Bytecode cӫD FiF FKѭѫQJ WUuQK NLӇu application thành
mã thӵc thi cӫa máy thӵc
x Appletviewer: Bӝ thông dӏch, thӵF WKL FiF FKѭѫQJ WUuQK
Trang 19x Javadoc: Tҥo tài liӋu vӅ FK~WKtFKFKѭѫQJWUuQKQJXӗn mӝt cách tӵ ÿӝng
x Jdb: Trình gӥ rӕi
x Rmic: Tҥo Stub cho ӭng dөng kiӇu RMI
x Rmiregistry: Phөc vө danh bҥ (Name Server) trong hӋthӕng RMI
I*LӟLWKLӋXYӅKӋÿLӅ u hành Android
I/ӏFKVӱ$QGURLG
Tháng 7/2005, Google mua lҥi công ty phát triӇn phҫn mӅm
ÿLӋn thoҥL$QGURLGQKѭQJFKѭDF{QJEӕ sӁ sӱ dөng cho mөFÿtFKJu
ĈӇ trҧ lӡi cho câu hӓLÿyWKiQJVDXQăPSKiWWULӇn, Google công bӕ hӋ ÿLӅu hànKÿLӋn thoҥLGLÿӝng mã nguӗn mӣ Android, cùng
vӟi sӵ thành lұS ³/LrQ PLQK GL ÿӝng mӣ´ 2SHQ +DQGVHW $OOLDQFH bao gӗPKѫQQKjVҧn xuҩt phҫn cӭQJÿLӋn thoҥi lӟn trên thӃ giӟi
QKѭ,QWHO+7&&KLQD0RELOH7-Mobile,
Hình 1 - Các thành viên cͯ D/LrQPLQKGLÿ ͡ng mͧ"
Trang 20Tӯ QăP KӋ ÿLӅu hành $QGURLG ÿm WUҧi qua nhiӅu lҫn cұp nhұt7tQKÿӃQWKiQJÿmFyNKRҧng 70 mүXÿLӋn thoҥLGLÿӝng
sӱ dөng hӋ ÿLӅXKjQK$QGURLGFKѭDNӇ các thiӃt bӏ ÿLӋn tӱ NKiFQKѭ
máy tính bҧng (tablet computers), ebook readers, Google TV,
I.KiLQLӋP$Q droid
Android là hӋ ÿLӅXKjQKÿLӋn thoҥLGLÿӝng mӣ nguӗn mӣ miӉn phí do Google phát triӇn dӵa trên nӅn tҧng cӫa Linux Bҩt kǤ mӝt hãng sҧn xuҩt phҫn cӭQJQjRFNJQJÿӅu có thӇ tӵ do sӱ dөng hӋ ÿLӅu hành Android cho thiӃt bӏ cӫa mình, miӉn là các thiӃt bӏ ҩy ÿiSӭng
ÿѭӧc các tiêu chuҭQFѫEҧQGR*RRJOHÿһt ra (có cҧm ӭng chҥm, GPS, 3G, ) (Xem thêm: Android Compatibility Definition Document)
Các nhà sҧn xuҩt có thӇ tӵ GRWKD\ÿәi phiên bҧn Android trên máy cӫa mình mӝt cách tӵ do mà không cҫn phҧi xin phép hay trҧ bҩt
kì khoҧQ SKt QjR QKѭQJ SKҧL ÿҧm bҧR WtQK WѭѫQJ WKtFK QJѭӧc (backward compatibility) cӫa phiên bҧn chӃ ULrQJÿy
Android là nӅn tҧng cho thiӃt bӏ GLÿӝng bao gӗm mӝt hӋ ÿLӅu hành, midware và mӝt sӕ ӭng dөng chӫ ÿҥo Bӝ công cө Android SDK cung cҩp các công cө và bӝ WKѭYLrQFiFKjP $3,Fҫn thiӃWÿӇphát triӇn ӭng dөng cho nӅn tҧng Android sӱ dөng ngôn ngӳ lұp trình
Trang 21x Optimized graphics: Hә trӧ bӝ WKѭ YLӋn 2D và 3D dӵ vào
ÿһc tҧ OpenGL ES 1.0
x SQLite: DBMS dùQJÿӇ OѭXWUӳ dӳ liӋu có cҩu trúc
x Hә trӣ FiFÿӏnh dҥng media phә biӃQQKѭ03(*+, MP3, AAC, ARM, JPG, PNG, GIF
x Hә trӧ thoҥi trên nӅn tҧng GSM (Phө thuӝc vài phҫn cӭng thiӃt bӏ)
x Bluetooth, EDGE, 3G và WiFi (Phө thuӝc vài phҫn cӭng thiӃt bӏ)
x Camera, GPS, la bàn và cҧm biӃn (Phө thuӝc vài phҫn cӭng thiӃt bӏ)
x Bӝ công cө phát triӇn ӭng dөng mҥnh mӁ
,.LӃQWU~F$QGURLG
/ѭӧFÿӗ sau thӇ hiӋn các thành phҫn cӫa hӋ ÿLӅu hành Android:
Hình 2 Mô hình ki͇ n trúc n͉ n t̫ ng Android
Trang 22Applications
HӋ ÿLӅu hành Android tích hӧp sҷn mӝt sӕ ӭng dөQJFѫEҧQQKѭ
email client, SMS, lӏFKÿLӋn tӱ, bҧQÿӗ, trình duyӋt web, sә liên lҥc và
mӝt sӕ ӭng dөng khác Ngoài ra tҫQJQj\FNJQJFKtQKOjWҫng chӭa các ӭng dөQJÿѭӧc phát triӇn bҵng ngôn ngӳ Java
Application Framwork
Tҫng này cӫa hӋ ÿLӅu hành Android cung cҩp mӝt nӅn tҧng phát triӇn ӭng dөng mӣ TXD ÿy FKR SKpS QKj SKiW WULӇn ӭng dөng có khҧQăQJ Wҥo ra các ӭng dөng vô cùng sáng tҥo và phong phú Các nhà
phát triӇn ӭng dөQJ ÿѭӧc tӵ do sӱ dөQJ FiF WtQK QăQJ FDR Fҩp cӫa thiӃt bӏ phҫn cӭQJQKѭWK{QJWLQÿӏnh vӏ ÿӏa lý, khҧ QăQJFKҥy dӏch vө
Gѭӟi nӅn, thiӃt lұSÿӗng hӗ báo thӭc, thêm notification vào status bar
cӫa màn hình thiӃt bӏ«
1Jѭӡi phát triӇn ӭng dөQJÿѭӧc phép sӱ dөQJÿҫ\ÿӫ bӝ API
ÿѭӧc dùng trong các ӭng dөng tích hӧp sҷn cӫa Android KiӃn trúc ӭng dөng cӫD$QGURLGÿѭӧc thiӃt kӃ nhҵm mөFÿtFKÿѫQJLҧn hóa viӋc tái sӱ dөQJFiFFRPSRQHQW4XDÿyEҩt kì ӭng dөQJQjRFNJQJFyWKӇcông bӕ FiF WtQK QăQJ Pj Qy PXӕn chia sҿ cho các ӭng dөng khác
(VD: Ӭng dөng email có muӕn các ӭng dөng khác có thӇ sӱ dөng tính QăQJ Jӣi mail cӫD Qy 3KѭѫQJ SKiS WѭѫQJ Wӵ cho phép các thành phҫn có thӇ ÿѭӧc thay thӃ bӣLQJѭӡi sӱ dөng
Tҫng này bao gӗm mӝt tұp các services và thành phҫn sau:
x Mӝt tұp phong phú và có thӇ mӣ rӝng bao gӗP FiF ÿӕi
WѭӧQJ9LHZÿѭӧFGQJÿӇ xây dӵng ӭng dөQJQKѭ OLVWgrid, text box, button và thұm chí là mӝt trình duyӋt web
có thӇ nhúng vào ӭng dөng
Trang 23x Content Provider: Cho phép các ӭng dөng có thӇ truy xuҩt dӳ liӋu tӯ các ӭng dөng khác hoһc chia sӁ dӳ liӋu cӫa chúng
x Resource Manager: Cung cҩp khҧ QăQJWUX\[Xҩt các tài nguyên non-FRGHQKѭKuQKҧnh hoһc file layout
x Notification Manager: Cung cҩp khҧ QăQJ KLӇn thӏcustom alert trên thanh status bar
x Activity Manager: Giúp quҧQ Oê YzQJ ÿӡi cӫa mӝt ӭng
dөng
Libraries
x System C library: mӝt thӇ hiӋQÿѭӧc xây dӵng tӯ BSD
cӫa bӝ WKѭYLӋn hӋ thӕng C chuҭQOLEF ÿѭӧFÿLӅu chӍnh
ÿӇ tӕLѭXKyDFKRFiFWKLӃt bӏ chҥy trên nӅn Linux
x Media libraries: Bӝ WKѭYLӋn hә trӧ trình diӉn và ghi các
ÿӏnh dҥng âm than và hình ҧnh phә biӃn
x Surface manager: Quҧn lý hiӇn thӏ nӝi dung 2D và 3D
x LibWebCore: Mӝt web browser engine hiӋQÿҥLÿѭӧc sӱ
dөng trong trình duyӋt cӫa Android lҫn trong trình duyӋt QK~QJZHEYLHZÿѭӧc sӱ dөng trong ӭng dөng
x SGL: Engine hә trӧ ÿӗ hӑa 2D
x 3D libraries: Mӝt thӇ hiӋQ ÿѭӧc xây dӵng dӵa trên các APIs cӫa OpenGL ES 1.0 NhӳQJ WKѭ YLӋn này sӱ dөng FiFWăQJWӕc 3D bҵng phҫn cӭng lүn phҫn mӅPÿӇ tӕLѭXhóa hiӇn thӏ 3D
x FreeType: Bitmap and vector font rendering
Trang 24x SQLite: Mӝt DBMS nhӓ gӑn và mҥnh mӁ
Android Runtime
HӋ ÿLӅu hành Android tích hӧp sҷn mӝt tұp hӧSFiFWKѭYLӋn cӕt lõi cung cҩp hҫu hӃt các chӭFQăQJFyVҹQWURQJFiFWKѭYLӋn lõi cӫa ngôn ngӳ lұp trình Java Mӑi ӭng dөng cӫa Android chҥy trên mӝt
tiӃn trình cӫa riêng nó cùng vӟi mӝt thӇ hiӋn cӫa máy ҧo Dalvik Máy
ҧo Dalvik thӵc tӃ là mӝt biӃn thӇ cӫa máy ҧR-DYDÿѭӧc sӱDÿәi, bә sung các công nghӋ ÿһFWUѭQJFӫa thiӃt bӏ GLÿӝQJ1yÿѭӧc xây dӵng
vӟi mөFÿtFKOjPFKRFiFWKLӃt bӏ GLÿӝng có thӇ chҥy nhiӅu máy ҧo
mӝt cách hiӋu quҧ7Uѭӟc khi thӵc thi, bҩt kì ӭng dөng Android nào FNJQJ ÿѭӧc convert thành file thӵc thi vӟL ÿӏnh dҥng nén Dalvik ([HFXWDEOH GH[ Ĉӏnh dҥQJ Qj\ ÿѭӧc thiӃt kӃ ÿӇ phù hӧp vӟi các thiӃt bӏ hҥn chӃ vӅ bӝ nhӟ FNJQJ QKѭ WӕFÿӝ xӱ lý Ngoài ra máy ҧo Dalvik sӱ dөng bӝ QKkQ/LQX[ÿӇ cung cҩSFiFWtQKQăQJQKѭWKUHDG, low-level memory management
Linux Kernel
HӋ ÿLӅXKjQK $QGURLGÿѭӧc xây dӵng trên bӝ nhân Linux 2.6 cho nhӳng dӏch vө hӋ thӕng cӕW O}L QKѭ VHFXULW\ PHPRU\management, process management, network stack, driver model Bӝ
nhân này làm nhiӋm vө QKѭPӝt lӟp trung gian kӃt nӕi phҫn cӭng thiӃt
bӏ và phҫn ӭng dөng
Trang 25'ѭӟL ÿk\ Oj P{ KLQK Kӧp tác giӳa máy ҧo Dalvik và Navite code:
Hình 3 Mô hình hͫ p tác giͷ a máy ̫ o Dalvik và Navite code
-1, -DYD 1DWLYH ,QWHUIDFH 7ѭѫQJ Wӵ khái niӋm Application Programming Interface)
Java Native Interface: là mӝt bӝ framework cho phép mã lӋnh viӃt bҵng Java chҥy trên máy ҧo java có thӇ gӑi hoһFÿѭӧc gӑi bӣi mӝt ӭng dөng viӃt bҵng native code (Ӭng dөQJÿѭӧc viӃt cho mӝt phҫn
cӭng cө thӇ và trên mӝt hӋ ÿLӅu hành cө thӇ) hoһc nhӳng bӝ WKѭYLӋn viӃt bҵng C, C++ hoһc Assembly
Bҵng cách sӱ dөng JNI, Android cho phép các ӭng dөng chҥy trên máy ҧo Dalvik có thӇ sӱ dөng nhӳQJSKѭѫQJWKӭFÿѭӧc viӃt bҵng các ngôn ngӳ cҩp thҩSQKѭ&&$VVHPEO\4XDÿyFiFQKjSKiWtriӇn ӭng dөng có thӇ xây dӵng ӭng dөng dӵa trên các bӝ WKѭYLӋn viӃt
bҵng C, C++, Assembly nhҵPWăQJWӕFÿӝ thӵc thi cӫa ӭng dөng hoһc
sӱ dөng nhӳQJWtQKQăQJPӭc thҩp mà ngôn ngӳ Java không hә trӧ
Trang 267X\QKLrQQJѭӡi phát triӇn ӭng dөng cҫn phҧi cân nhҳc sӵ JLDWăQJÿӝ phӭc tҥp cӫa ӭng dөng khi quyӃWÿӏnh sӱ dөng các bӝ WKѭYLӋn này
QJѭӡi dùng nhұp vào, nӃu QJѭӡi dùng không nhұp vào thì nó không làm gì
cҧ 1KѭQJ ÿӕi vӟi mӝt FKѭѫng trình game thì dù ngѭӡi dùng có nhұp vào
thông ÿLӋp hay không thi nó vүn thӵc hiӋn theo mӝt cҩu trúc FKѭѫQJWUunh có
sҹn ÿây chính là vòng lһp cӫa game
Mӝt vòng lһp game rҩWÿѫQ giҧn nó có thӇ trông QKѭ thӃ này:
While ( user doesn't exit )
check for user input
Trang 27I.2.2 Framerate (FPS)
Sӕ lҫn vӁ khung hình trên mӝt giây Framerate chұm sӁ OjPFKRQJѭӡi
dùng không có cҧm giác thұt, ҧQKKѭӣQJÿӃn sӵ WѭѫQJWiFFӫDQJѭӡi dùng
vӟLWUzFKѫL
Các yӃ u tӕ làm cho framerate chұ m
Hình vӁ FyNtFKWKѭӟc lӟn Tính toán trong game nhiӅu Lӛi cӫa thiӃt
bӏ
Cách cҧ i thiӋ n framerate
TӕLѭXKyDWtQKWRiQYjFiFÿLӅu kiӋn thӵc hiӋn trong game:
+ Sӱ dөng ít vòng lһp
+ Dùng phép toán dӏch chuyӇn bit thay cho phép nhân và phép chia
+ Khai báo các biӃQYjSKѭѫQJWKӭc ӣ dҥng static
Caching module cӫa các file ҧnh, tӕLѭXKyDFiFPRGXOHGQJÿӇ vӁ sao cho sӕ Oѭӧng module vӁ ra là ít
Dùng Bacbuffer: Không vӁ tӯng sprite ra màn hình mà ta vӁ các sprite
lên mӝt ҧQKVDXÿyYӁ ҧQKÿyUDPjQKuQK
Bӓ các hiӋu ӭng không cҫn thiӃt
Limit Frame rate
Là sӵ giӟi hҥn lҥi sӕ lҫn vӁ trên mӝt giây cӫDWUzFKѫL1Kҵm mөFÿtFK
dùng trong nhӳQJWUѭӡng hӧp ӭng dөng có frame rate quá nhanh, sӁ làm cho
ӭng dөng không әQÿӏnh ҦQKKѭӣQJÿӃn quá trình xӱ OêQJѭӡLFKѫLNK{QJ
FKѫLNӏp và mӝWÿLӅu nӳa là nó dүQÿӃn viӋc nhanh hӃt pin cӫa thiӃt bӏ
I%ӝQKӟPHPRU\
Là kích WKѭӟc bӝ nhӟ có thӇ dùng ÿӇ chҥy FKѭѫQJ trình game cӫa thiӃt
Trang 28bӏ
Các y͇ u t͙ ̫ QKK˱ ͧQJÿ ͇ n b͡ nhͣ trong game
File ҧnh dùng trong game
Âm thanh dùng trong game
Các file text, mҧng chӭa text trong game
T͙L˱XKyDE ͡ nhͣ
ĈѫQ giҧn hóa các frame và hình ҧnh ÿӝng
Chia ҧnh ra thành các module nhӓ
Xóa các module cӫa dӳ liӋu sau khi caching
Dùng gói sound có dung Oѭӧng nhӓ, Load sound khi chҥy sound và giҧi phóng (free) khi dӯng sound
Dùng mҧng mӝt chiӅu thay vì dùng mҧng 2 chiӅu
ChӍ giӳ nhӳng ÿӕi Wѭӧng cҫn thiӃt trong bӝ nhӟ ĈӇ tránh vҩn ÿӅ phân mҧnh bӝ nhӟ (là các ÿӕi Wѭӧng WKѭӡng dùng (fonts, main characters, common interface sprites, « )
Load khi muӕn vӁ và giҧi phóng khi ÿL ra khӓi màn hình
Tránh phân mҧnh bӝ nhӟ: load ÿӕi Wѭӧng có kích WKѭӟc lӟn WUѭӟc Giӳ cho bӝ nhӟ әn ÿӏnh Không load và giҧi phóng quá nhiӅu lҫn
Android SDK cung cҩp cho bҥQFiFWKѭYLӋn API và các công cө phát
triӇn cҫn thiӃWÿӇ xây dӵng, kiӇm tra, gӥ lӛi và các ӭng dөng cho Android
Trang 29Android SDK bao gӗm các gói mô-ÿXQ Pj Eҥn có thӇ tҧi vӅ mӝt cách
riêng biӋt bҵng cách sӱ dөng SDK Manager Android Ví dө, khi các công cө
6'.ÿѭӧc cұp nhұt hoһc mӝt phiên bҧn mӟi cӫa nӅn tҧQJ$QGURLGÿѭӧc phát hành, bҥn có thӇ quҧn lý sӱ dөQJ 6'. ÿӇ nhanh chóng tҧi chúng vào môi
WUѭӡng cӫa bҥn ChӍ cҫn làm theo các thӫ tөFÿѭӧc mô tҧ trong Thêm nӅn tҧng
và trӑn gói
Có nhӳng gói khác nhau có sҹn cho Android SDK
x SDK Tools: Chӭa các công cө ÿӇ gӥ lӛi và thӱ nghiӋm, cӝng vӟi các tiӋQtFKNKiFÿѭӧc yêu cҫu ÿӇ phát triӇn mӝt ӭng dөng NӃu bҥn
vӯD FjL ÿһt khӣL ÿӝQJ JyL 6'. VDX ÿy EҥQ ÿm Fy SKLrQ Eҧn mӟi nhҩt cӫa gói phҫn mӅm này Hãy chҳc chҳn rҵng bҥn giӳ Qj\ÿѭӧc
cұp nhұt
x SDK Platform-tools: Chӭa các công cө nӅn tҧng phө thuӝc vào viӋc phát triӇn và gӥ lӛi các ӭng dөng cӫa bҥn Nhӳng công cө này
hӛ trӧ FiFWtQKQăQJPӟi nhҩt cӫa nӅn tҧQJ$QGURLGYjWKѭӡQJÿѭӧc
cұp nhұt chӍ khi mӝt nӅn tҧng mӟi trӣ nên có sҹn Nhӳng công cөQj\ OX{Q OX{Q WѭѫQJ WKtFK Yӟi nӅn tҧQJ FNJ QKѭQJ Eҥn phҧi chҳc chҳn rҵng bҥn có phiên bҧn mӟi nhҩt cӫa nhӳng công cө này khi
bҥQFjLÿһt mӝt nӅn tҧng SDK mӟi
x Documentation: Mӝt bҧn sao cӫa các tài liӋu mӟi nhҩt cho các API
nӅn tҧng Android
x SDK Platform: Có mӝt SDK Platform có sҹn cho mӛi phiên bҧn
cӫa Android Nó bao gӗm mӝt tұp tin android.jar vӟi mӝWWKѭYLӋn Android hoàn toàn tuân thӫĈӇ xây dӵng mӝt ӭng dөng Android,
bҥn phҧL[iFÿӏnh mӝt nӅn tҧQJ6'.QKѭPөc tiêu xây dӵng cӫa
bҥn
Trang 30x System Image: Mӛi phiên bҧn nӅn tҧng cung cҩp mӝt hoһc nhiӅu hình ҧnh hӋ thӕng khác nhau (chҷng hҥn nhѭ FKR $50 Yj [ Giҧ lұS$QGURLGÿzLKӓi mӝt hình ҧnh hӋ thӕQJÿӇ hoҥWÿӝng Bҥn
nên luôn luôn kiӇm tra ӭng dөng cӫa bҥn trên phiên bҧn mӟi nhҩt
cӫa Android và sӱ dөng giҧ lұp vӟi hình ҧnh mӟi nhҩt cӫa hӋ thӕng
là mӝt cách tӕWÿӇ OjPQKѭYұy
x Sources for Android SDK: Mӝt bҧn sao cӫa các nӅn tҧng mã nguӗQ$QGURLGÿyOjKӳXtFKÿӇ ÿҭy mҥnh thông qua các mã trong khi gӥ lӛi ӭng dөng cӫa bҥn
x Samples for SDK: Mӝt bӝ VѭX Wұp các ӭng dөng mүX ÿӇ chӭng minh mӝt loҥt các nӅn tҧQJ$3,Ĉk\OjPӝt nguӗn lӵc lӟQÿӇ trình duyӋt Android mã ӭng dөng Các ӭng dөQJ$3,'HPRÿһc biӋt là cung cҩp mӝt sӕ Oѭӧng lӟn các bҧn demo nhӓ, bҥn nên khám phá
x Google APIs: Mӝt SDK add-on cung cҩp cҧ mӝt nӅn tҧng mà bҥn
có thӇ sӱ dөQJÿӇ phát triӇn mӝt ӭng dөng sӱ dөng API cӫa Google
ÿһc biӋt và mӝt hình ҧnh hӋ thӕng giҧ lұSÿӇ bҥn có thӇ thӱ nghiӋm ӭng dөng cӫa bҥn bҵng cách sӱ dөng các API cӫa Google
x Android Support: MӝWWKѭYLӋQWƭQKEҥn có thӇ bao gӗm trong các nguӗn ӭng dөng cӫa bҥQ ÿӇ sӱ dөng API mҥnh mӁ mà không có
sҹn trong các nӅn tҧng tiêu chuҭn Ví dөFiFWKѭYLӋn hӛ trӧ bao
gӗm các phiên bҧn cӫa Fragment lӟSWѭѫQJWKtFKYӟi Android 1.6 Yj FDR KѫQ OӟS EDQ ÿҫX ÿѭӧc giӟi thiӋu trong Android 3.0) và
ViewPager các API cho phép bҥn dӉ dàng xây dӵng mӝt giao diӋn QJѭӡi dùng phө swipeable
Bҥn có thӇthêm các trang web mӟi ÿӇ tҧi vӅ gói bә sung tӯ bên thӭ ba
Trong mӝt sӕ WUѭӡng hӧp, mӝt gói phҫn mӅm SDK có thӇ yêu cҫu mӝt
Trang 31sӵ phө thuӝc giӳa các Plugin ADT cho Eclipse và các công cө gói SDK Khi
bҥQFjLÿһt các công cө gói SDK, bҥQFNJQJQrQQkQJFҩp lên phiên bҧn yêu cҫu
cӫa ADT (nӃu bҥQ ÿDQJ SKiW WULӇQ WURQJ (FOLSVH 7URQJ WUѭӡng hӧp này, sӕ phiên bҧn chính cho plugin ADT cӫa bҥn nên luôn luôn phù hӧp vӟi sӕ phiên
bҧn cӫa Công cө SDK cӫa bҥn (ví dө, ADT 8.x yêu cҫu SDK Công cө r8)
Các công cө phát triӇn sӁ thông báo cho bҥn vӟi các cҧnh báo gӥ lӛi nӃu
có sӵ phө thuӝc mà bҥn cҫn phҧi giҧi quyӃt SDK Android quҧQOêFNJQJWKӵc thi
phө thuӝc bҵng cách yêu cҫu mà bҥn tҧi vӅ các gói phҫn mӅm cҫn thiӃt bӣi
nhӳQJQJѭӡi mà bҥQÿmFKӑn
Trang 32&+ѬѪ1*,, 75Ñ&+Ѫ, 9¬48È75Î1+/Ұ375Î1+
.,ӆ07+Ӱ II.1 7UzFKѫL
7UzFKѫL bao gӗPWUzFKѫLQKӓ WѭѫQJӭng vӟi 4 phҫn :
x $GGLWLRQ 6XEWUDFWLRQ1JѭӡLFKѫLWUҧ lӡi các câu hӓLÿѭӧFÿѭDUDOj
các phép tính cӝng hoһc trӯ xuҩt hiӋn ngүXQKLrQ1JѭӡLFKѫLFyWKӇchӑn các mӭFÿӝ: dӉ, trung bình, khó; Và các mӭc sӕ Oѭӧng câu hӓi:
10 câu, 20 câu, 50 câu
x 0XOWLSOLFDWLRQ 'LYLVLRQ1JѭӡLFKѫLWUҧ lӡi các câu hӓLÿѭӧFÿѭDUD
là các phép tính nhân hoһc chia xuҩt hiӋn ngүXQKLrQ1JѭӡLFKѫLFy
thӇ chӑn các mӭFÿӝ: dӉ, trung bình, khó; Và các mӭc sӕ Oѭӧng câu
hӓi: 10 câu, 20 câu, 50 câu
x %UDLQ&UXQFKHU1JѭӡLFKѫLEҳWÿҫXWUzFKѫLYӟi 1 con sӕ cho sҳn Sau
ÿyTXDWӯng câu hӓi sӁ là nhӳQJSKpSWRiQÿѭӧFÿѭDUD ngүu nhiên
1JѭӡLFKѫLWtQKQKҭm và ghi nhӟ kӃt quҧ qua tӯng câu hӓLYjÿѭDUD
ÿiS iQ FXӕL FQJ 1JѭӡL FKѫL Fy WKӇ chӑn các mӭF ÿӝ FKѫL WKҩp, trung bình, cao
x Math Blaster Challenge: Các câu hӓi là các phép tính cӝng, trӯ nhân,
chia xuҩt hiӋn ngүu nhiên và di chuyӇn tӯ phía trên xuӕQJSKtDGѭӟi PjQ KuQK 1JѭӡL FKѫL QKұp câu trҧ lӡL ÿ~QJ ÿӇ chһn các câu hӓi di
chuyӇn Vӟi mӛi câu trҧ lӡLÿ~QJQJѭӡLFKѫLVӁ ÿѭӧFÿLӇm NӃXÿӇ
2 câu hӓLYѭӧt qua giӟi hҥQSKtDGѭӟLPjQKuQKQJѭӡLFKѫLVӁ thua
Trang 33II.2 Quá tUuQKOұSWUuQK
,,3KkQWtFKFKѭѫQJWUuQK
Dӵa vào các phân tích,ta có thiӃt kӃ khung cӫa FKѭѫQJWUuQK
Hình 4 Bi͋ u di͍ n khung thi͇ t k͇ cͯDFK˱˯QJWUuQK
Trang 34Lӟp Player : chӭa các thông tin vӅ QJѭӡLFKѫL
Lӟp OptionScreen : thӇ hiӋn màn hình tùy chӑn (option)
Lӟp ChangePlayerScreen: thӇ hiӋQPjQKuQKWKD\ÿәLQJѭӡLFKѫL
Lӟp MainMenuScreen : thӇ hiӋn màn hình chính
Lӟp CreditScreen: thӇ hiӋn màn hình credit
Lӟp AddnSubScreen : thӇ hiӋn màn hình chuҭn bӏ YjRPjQFKѫL$GGLWLRQ
Subtraction
Lӟp AddnSubPlayScreen: thӇ hiӋQPjQFKѫL$GGLWLRQ 6XEWUDFWLRQ
Lӟp MulnDivScreen: thӇ hiӋn màn hình chuҭn bӏ YjRPjQFKѫL
Multiplication & Division
Lӟp MulnDivPlayScreen: thӇ hiӋQPjQFKѫL0XOWLSOLFDWLRQ 'LYLVLRQ
Lӟp MathBlasterChallengeScreen : thӇ hiӋQPjQFKѫL0DWK%ODVWHU
Lӟp BrainCruncherPlayScreen: thӇ hiӋQPjQKuQKFKѫi Brain Cruncher
Lӟp BrainCruncherInputScreen: thӇ hiӋQPjQKuQKÿӇ QJѭӡLFKѫLQKұp kӃt
quҧ cuӕi cùng
Lӟp BrainCruncherReviewScreen: thӇ hiӋn màn hình xem lҥLPjQFKѫL
Brain Cruncher
Trang 35II.2.2 /ұSWUuQK WUzFKѫL
Chúng ta ÿӏQKQJKƭDOӟS5HVRXUFH0DQDJHUÿӇ quҧn lý các biӃQÿҥi diӋQÿӕi
Wѭӧng và lӟS3OD\HUÿӇ quҧQOêFiFWK{QJWLQQJѭӡLFKѫLVDXÿyOҫQOѭӧt cài
ÿһt các nӝLGXQJQKѭVDX
x ResourceManager
ĈӏQKQJKƭDELӃn chӭa các layout ID:
public static int screenXMLArr[ ] = {R.layout.changeplayer_screen,
R.layout.main_menu, R.layout.option_screen, R.layout.splash_screen, R.layout.addnsub_screen, R.layout.addnsubplay_screen, R.layout.alert_change_player, R.layout.addnsubfinish_screen, R.layout.mathblasterchallenge_screen,
R.layout.highscore_layout,
R.layout.chart_layout,
ĈӏQKQJKƭDELӃn chӭa cái surfaceview ID:
public static int surfaceViewMBC_ID = R.id.SurfaceViewMBC;
Trang 36public static int surfaceViewChart_ID = R.id.SurfaceViewChart;
ĈӏQKQJKƭDELӃn chӭa các image resource:
public static int imgLogo = R.drawable.gcs_logo_copy;
public static int imgComplete = R.drawable.complete;
public static int imgAppName = R.drawable.appname;
public static int imgCredit = R.drawable.credit;
public static int imgMathBlaster =
R.drawable.mathblasterchallenge;
public static int imgLevelUpMBC = R.drawable.levelup;
public static int imgCount[ ] = { R.drawable.numcount0,
R.drawable.numcount1,
R.drawable.numcount2,
R.drawable.numcount3 };
public static int icCircle = R.drawable.circle;
public static int icNumber[ ] = { R.drawable.num0,
R.drawable.num2, R.drawable.num3, R.drawable.num4,
Trang 37R.drawable.num6, R.drawable.num7, R.drawable.num8,
ĈӏQKQJKƭDFiFELӃn chӭa các icon resource:
public static int icChkBoxTrue = R.drawable.chkbox_true;
public static int icChkBoxNormal = R.drawable.chkbox_normal;
public static int icChkBoxFalse = R.drawable.chkbox_false;
public static int icChkBoxOut = R.drawable.chkbox_out;
public static int icChangePlayer = R.drawable.change_player;
public static int icOption = R.drawable.option;
public static int icSoundOn = R.drawable.sound_on;
public static int icSoundOff = R.drawable.sound_off;
public static int icCredit = R.drawable.ic_credit;
public static int icOperator[ ] = { R.drawable.add,
R.drawable.sub, R.drawable.mul, R.drawable.div };
ĈӏQKQJKƭDFiFELӃn chӭa các ImageView ID:
public static int splash_ID = R.id.imgSplash;
public static int AppNameMain_ID = R.id.imgAppMain;
public static int AppNameOption_ID = R.id.imgAppOption;
Trang 38public static int AnSCount_ID = R.id.imgCountAnS;
public static int AppNameChangePlayer_ID =
R.id.imgAppChangePlayer;
public static int CompleteAnS_ID = R.id.imgCompleteAnS;
Các biӃn chӭa TextView ID:
public static int edtPlayerNameCP_ID = R.id.txtPlayerNameCP;
public static int txtDesMain_ID = R.id.txtDesMain;
public static int txtDesOption_ID = R.id.txtDesOption;
public static int txtVersion_ID = R.id.txtVersion;
public static int txtNumQuesAnS_ID = R.id.txtNumQuesAnS;
public static int txtDiffAnS_ID = R.id.txtDiffAnS;
public static int txtAnSName_ID = R.id.txtNameAnS;
public static int txtplayerNameCP_ID = R.id.txtplayerCP;
public static int txtChangingRoomCP_ID = R.id.txtChangingRoomCP;
public static int txtTapBtn_ID = R.id.txtTapButtonCP;
public static int txtNoteCP_ID = R.id.txtNoteCP;
public static int txtTimeCountAnS_ID = R.id.txtTimeCountAnS;
public static int txtQuesAnS_ID = R.id.txtQuesAnS;
public static int txtAnsAnS_ID = R.id.txtAnsAnS;
public static int txtWrongAttempAnS_ID = R.id.txtWrgAtmpAnS;
Trang 39public static int txtDiffNameAnS_ID = R.id.txtDiffNameAnS;
public static int txtDifficultAnS_ID = R.id.txtDifficultAnS;
public static int txtYourTimeAnS_ID = R.id.txtYourTimeAnS;
public static int txtYourTimeNameAnS_ID =
R.id.txtYourTimeNameAnS;
public static int txtNumDiffQuesHS_ID = R.id.txtNumDiffQues;
public static int txtPartNameHS_ID = R.id.txtPartName;
public static int txtAnsMBC_ID = R.id.txtAnsMBC;
public static int txtPosNoHS_ID[] = { R.id.txtPosNo1,
R.id.txtPosNo2, R.id.txtPosNo3, R.id.txtPosNo4, R.id.txtPosNo5 };
Các biӃn chӭa Button ID:
public static int btnNoAnS_ID[] = { R.id.btnNo0AnS,
R.id.btnNo1AnS,
R.id.btnNo2AnS, R.id.btnNo3AnS, R.id.btnNo4AnS, R.id.btnNo5AnS,
Trang 40public static int btnAddnSub_ID = R.id.btnAddnSub;
... tҧng Androidx SDK Platform: Có mӝt SDK Platform có sҹn cho mӛi phiên bҧn
cӫa Android Nó bao gӗm mӝt tұp tin android. jar vӟi mӝWWKѭYLӋn Android hoàn toàn tuân thӫĈӇ xây. .. ̫ QKK˱ ͧQJÿ ͇ n b͡ nhͣ game
File ҧnh dùng game
Âm dùng game
Các file text, mҧng chӭa text game
T͙L˱XKyDE ͡ nhͣ
ĈѫQ giҧn... load giҧi phóng q nhiӅu lҫn
Android SDK cung cҩp cho bҥQFiFWKѭYLӋn API công cө phát
triӇn cҫn thiӃWÿӇ xây dӵng, kiӇm tra, gӥ lӛi ӭng dөng cho Android
Trang