Xem mẫu
- BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KIẾN TRÚC ĐÀ NẴNG
BỘ MÔN CÔNG NGHỆ THÔNG TIN
--- ---
BÀI GIẢNG
LẬP TRÌNH DI ĐỘNG
ANDROID
ThS.Bùi Trung Úy
ĐÀ NẴNG 08/2019
- Bài giảng Lập Trình Di Động - Android
MỤC LỤC
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH ANDROID ............................................................................... 4
1.1. Hệ điều hành Android ............................................................................................................. 4
1.1.1. Android là gì? ................................................................................................................... 4
1.1.2. Các phiên bản Android ..................................................................................................... 5
1.1.3. Các đặc trưng của Android ............................................................................................... 8
1.2. Kiến trúc phân tầng Android (software stack) ........................................................................ 11
1.3. Môi trường phát triển ứng dụng Android .............................................................................. 13
1.3.1. Các công cụ và thiết lập chung........................................................................................ 13
1.3.2. Android Studio IDE ......................................................................................................... 15
Chương 2. XÂY DỰNG ỨNG DỤNG ANDROID ................................................................................... 18
2.1. Cơ bản về ứng dụng Android................................................................................................. 18
2.1.1. Các thành phần chính của ứng dụng ............................................................................... 19
2.1.2. Tính tương thích thiết bị................................................................................................. 20
2.2. Tạo một ứng dụng đơn giản – HelloAndroid .......................................................................... 21
2.2.1. Tạo dự án mới ................................................................................................................ 21
2.2.2. Tổng quan về cấu trúc dự án Android ............................................................................. 25
2.3. Activity và cơ chế hoạt động ................................................................................................. 29
2.3.1. Activity là gì? .................................................................................................................. 29
2.3.2. Các trạng thái Activity .................................................................................................... 30
2.3.3. Vòng đời của Activity (Activity Lifecycle)......................................................................... 31
2.4. Intent và tương tác giữa các Activity ..................................................................................... 37
2.4.1. Intent là gì? .................................................................................................................... 37
2.4.2. Sử dụng đối tượng Intent ............................................................................................... 38
2.4.3. Truyền dữ liệu giữa các Activity ...................................................................................... 39
2.4.4. Lấy kết quả trả về từ Activity thông qua Intent ............................................................... 40
2.4.5. Bộ lọc Intent (Intent Filter) ............................................................................................. 41
2.5. Resource trong ứng dụng Android ........................................................................................ 42
2.5.1. Resource (tài nguyên) là gì?............................................................................................ 42
2.5.2. Các loại tài nguyên ......................................................................................................... 43
2.5.3. Truy cập vào tài nguyên ................................................................................................. 45
Chương 3. LẬP TRÌNH GIAO DIỆN ANDROID ..................................................................................... 47
3.1. Tổng quan về giao diện Android ............................................................................................ 47
3.2. Phương pháp tạo giao diện ................................................................................................... 49
ThS. Bùi Trung Úy 2
- Bài giảng Lập Trình Di Động - Android
3.2.1. Tạo view bằng mã nguồn Java ........................................................................................ 49
3.2.2. Tạo view bằng XML ........................................................................................................ 55
3.2.3. Tạo view bằng công cụ trực quan ................................................................................... 56
3.3. Bố cục giao diện (Layout) ...................................................................................................... 60
3.3.1. FrameLayout .................................................................................................................. 60
3.3.2. Linear Layout ................................................................................................................. 62
3.3.3. Relative Layout............................................................................................................... 64
3.3.4. TableLayout ................................................................................................................... 66
3.4.5. ConstraintLayout ............................................................................................................ 67
3.5. Xử lý sự kiện trên giao diện ................................................................................................... 72
3.6. Sử dụng View trên giao diện ................................................................................................. 77
3.6.1. Các view cơ bản ............................................................................................................. 77
3.6.2. Sử dụng hình ảnh trong Android..................................................................................... 83
Chương 4. FRAGMENT VÀ GIAO DIỆN NÂNG CAO ............................................................................ 90
4.1. Android Fragment ................................................................................................................. 90
4.1.1. Fragment là gì? .............................................................................................................. 90
4.1.2. Sử dụng Fragment .......................................................................................................... 91
4.1.3. Vòng đời của Fragment .................................................................................................. 93
4.2. Trình đơn (menu) và hộp thoại (dialog) ............................................................................... 105
4.2.1. Sử dụng trình đơn (menu) ............................................................................................ 105
4.2.2. Sử dụng hộp thoại (dialog) ........................................................................................... 107
4.3. Các điều khiển hiển thị dạng danh sách ............................................................................... 109
4.3.1. Sử dụng ListView .......................................................................................................... 109
4.3.2. Sử dụng SpinnerView ................................................................................................... 117
4.3.3. Sử dụng GridView ........................................................................................................ 119
Chương 5. QUẢN LÝ DỮ LIỆU TRONG ANDROID ............................................................................. 121
5.1. Dữ liệu trong Assets ............................................................................................................ 121
5.2. Dữ liệu trong SharedPreferences ........................................................................................ 122
5.3. Lưu trữ dữ liệu trên bộ nhớ SD ........................................................................................... 125
5.3.1. Sử dụng bộ nhớ trong .................................................................................................. 125
5.2.2. Sử dụng bộ nhớ ngoài .................................................................................................. 126
5.4. Sử dụng cơ sở dữ liệu SQLLite ............................................................................................. 128
ThS. Bùi Trung Úy 3
- Bài giảng Lập Trình Di Động - Android
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH ANDROID
Trong chương này, chúng ta sẽ tìm hiểu các kiến thức cơ bản về hệ điều hành
Android, về quá trình phát triển và trở thành một nền tảng phổ biến nhất hiện nay;
kiến trúc tổng quan và nền tảng xây dựng hệ điều hành Android; cuối cùng là giới
thiệu các bộ công cụ cần thiết và môi trường để phát triển một ứng dụng Android.
1.1. Hệ điều hành Android
1.1.1. Android là gì?
Android là hệ điều hành mã nguồn mở, miễn phí được phát triển bởi Google.
Android dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn
hình cảm ứng như điện thoại thông minh và máy tính bảng.
Vào tháng 10/2003, công ty Android Inc được thành lập ở Palo Alto, California.
Bốn người sáng lập là Rich Miner, Nick Sears, Chris White và Andy Rubin. Vào thời
điểm thành lập, ông Rubin nói rằng Android Inc sẽ phát triển “thiết bị di động thông
minh hơn hơn về vị trí và sở thích của chủ sở hữu”, Android được phát triển để cải
thiện hệ điều hành của máy ảnh số. Nhóm nghiên cứu tại Android đã không nghĩ ngay
từ đầu về việc tạo ra một hệ điều hành có thể phục vụ như phần cốt lõi của một hệ
thống di động hoàn chỉnh. Nhưng sau đó, thị trường máy ảnh kỹ thuật số giảm sút,
Android Inc đã quyết định chuyển sang hệ điều hành trên điện thoại di động.
Năm 2005, chương lớn tiếp theo trong lịch sử của Android khi được Google mua
lại công ty gốc. Ông Andy Rubin và các thành viên sáng lập khác vẫn tiếp tục phát
triển hệ điều hành dưới quyền chủ sở hữu mới của họ. Quyết định này được đưa ra để
sử dụng Linux làm nền tảng cho hệ điều hành Android và điều đó cũng có nghĩa là
Android sẽ được cung cấp miễn phí cho các nhà sản xuất điện thoại di động của bên
thứ ba. Google và nhóm Android cảm thấy công ty có thể kiếm tiền với các dịch vụ
khác sử dụng hệ điều hành, bao gồm cả ứng dụng.
Hệ điều hành Android được chính thức ra mắt từ năm 2007 cùng với tuyên bố
thành lập Liên minh thiết bị cầm tay mở (OHA) - một hiệp hội bao gồm nhiều công ty
trong đó có Texas Instruments, Google, Intel, Qualcomm, Samsung Electronics, T-
Mobile,… được thành lập với mục đích phát triển các chuẩn mở cho thiết bị di động.
Chiếc điện thoại Android đầu tiên được bán ra là HTC Dream phát hành vào năm
2008. Hình ảnh quen thuộc hiện nay của hệ điều hành Android giống như sự kết hợp
của một con robot và một lõi màu xanh lá cây do Irina Blok thiết kế. Theo Blok, thiết
kế cuối được lấy cảm hứng từ việc nhìn vào biểu tượng nhà vệ sinh quen thuộc đại
diện cho “đàn ông” và “phụ nữ”.
ThS. Bùi Trung Úy 4
- Bài giảng Lập Trình Di Động - Android
Android có mã nguồn mở và được Google phát hành theo Giấy phép Apache.
Chính mã nguồn mở cùng với một giấy phép không có nhiều ràng buộc đã cho phép
các nhà phát triển thiết bị, mạng di động và công ty phần mềm được điều chỉnh và
phân phối Android một cách tự do.
Bản chất mở của Android cũng khích lệ một đội ngũ đông đảo lập trình viên và
những người đam mê sử dụng mã nguồn mở để tạo ra những dự án do cộng đồng quản
lý. Những dự án này bổ sung các tính năng cao cấp cho những người dùng thích tìm
tòi hoặc đưa Android vào các thiết bị ban đầu chạy hệ điều hành khác. Theo thống kê
của Gartner, Android chiếm 75% thị phần điện thoại thông minh trên toàn thế giới vào
thời điểm quý 3 năm 2012, với tổng cộng 500 triệu thiết bị đã được kích hoạt và 1,3
triệu lượt kích hoạt mỗi ngày, đến năm 2017 thị phần Android tăng lên là 86,2%.
1.1.2. Các phiên bản Android
Sự đa dạng của Android là một điều không thể bàn cãi, khi nó không chỉ dừng lại
ở sự phổ cập cho smartphone hay tablet, mà giờ đây từ Smart TV, tới xe hơi, hay đồng
hồ thông minh,… chúng ta đều thấy sự có mặt của nền tảng này để nó có thể giao tiếp
một cách trực tiếp với người dùng. Dù vậy, để đạt được một thị phần ấn tượng như
vậy, Android đã phải trải qua thăng trầm trong suốt lich sử phát triển.
Android 1.0 là phiên bản thương mại đầu tiên của hệ sinh thái Android được phát
hành chính thức vào ngày 23/9/2008 sau một quá trình thử nghiệm kéo dài và được cài
đặt trên điện thoại T-Mobile G1 (HTC Dream).
Mặc dù đây chỉ là phiên bản đầu tiên của Android, thế nhưng Android 1.0 đã đặt
một nền móng mạnh mẽ trong các tính năng của hệ sinh thái này khi mà chúng ta thấy
một sự đa dạng trong các tính năng được tồn tại và sử dụng cho đến ngày nay, bao
gồm trình duyệt web, khả năng hỗ trợ hệ thống camera tích hợp trên thiết bị di động,
đồng bộ hóa dịch vụ Google Mail thông qua ứng dụng Gmail, trình phát video trên
ThS. Bùi Trung Úy 5
- Bài giảng Lập Trình Di Động - Android
YouTube, Google Maps, danh bạ Contacts, và ứng dụng lịch Calendar cũng có khả
năng đồng bộ hóa.
Android 1.5 Cupcake (phát hành tháng 4/2009) là bản cập nhật lớn đầu tiên của
Android. Cupcake đã thêm các tiện ích cho màn hình chính, bàn phím ảo, quay video
trong máy ảnh, chức năng sao chép và dán vào trình duyệt web.
Android 2.0 Eclair (phát hành tháng 10/2009) hỗ trợ tài khoản Google, cho phép
người dùng tìm kiếm nội dung theo từ khóa trong các tin nhắn văn bản, đồng thời bổ
sung hỗ trợ đa chạm và máy ảnh được cải tiến với đèn flash, zoom số.
Android 2.2 Froyo (phát hành tháng 5/2010) giới thiệu Flash Player 10.1, cho phép
điện thoại phát video và phát trực tuyến âm thanh. Máy ảnh flash tương thích
Bluetooth giúp người dùng có thể sử dụng điện thoại của mình làm điểm phát sóng
Wi-Fi (hotspot 3G/4G).
Android 2.3 Gingerbread (phát hành tháng 12/2010), Android được biết đến rộng rãi
hơn nhờ tính năng giao tiếp trường gần (NFC), cho phép điện thoại thông minh kết nối
với các thiết bị lân cận khác. Android 2.3 cũng cho phép gọi điện video bằng máy ảnh
mặt trước và thêm trình quản lý tải xuống.
Android 3.0 Honeycomb (phát hành tháng 2/2011) là bản cập nhật hầu như chỉ dành
cho máy tính bảng, hỗ trợ đồ họa 3D, các tab trình duyệt cạnh nhau, trò chuyện video
với Google Talk, chia sẻ kết nối Bluetooth.
Android 4.0 Ice Cream Sandwich (phát hành tháng 10/2011) sáp nhập các hệ điều
hành điện thoại và máy tính bảng. ICS cũng thêm tính năng nhận dạng khuôn mặt để
mở khóa điện thoại, phản hồi văn bản, tự động trả lời các cuộc gọi bị từ chối và hiệu
ứng video trực tiếp trong camera.
ThS. Bùi Trung Úy 6
- Bài giảng Lập Trình Di Động - Android
Android 4.1 Jelly Bean (phát hành tháng 7/2012) có hiệu suất nhanh hơn, mượt mà
hơn nhờ "Project Butter", cho phép người dùng tương tác nhiều hơn, thông báo có thể
mở rộng, trình duyệt Chrome mặc định...
Android 4.4 KitKat (phát hành tháng 7/2013) có thêm biểu tượng cảm xúc vào bàn
phím Google, bộ nhớ nhỏ hơn để hỗ trợ điện thoại cấp thấp hơn, đồng thời cho phép
người dùng in văn bản khi đang di chuyển với tính năng Google Cloud Print.
Android 5.0 Lollipop (phát hành tháng 6/2014) có giao diện phẳng Material Design,
thông báo xuất hiện trên màn hình khóa. Hệ điều hành cũng có chế độ ưu tiên, hỗ trợ
đa người dùng, ghim màn hình...
Android 6.0 Marshmallow (phát hành tháng 5/2015) bắt đầu có chế độ Doze để tiết
kiệm pin. Đồng thời bổ sung thêm hỗ trợ tích hợp cho đầu đọc vân tay, USB Type-C
và chế độ 4K cho các ứng dụng.
Android 7.0 Nougat (phát hành tháng 8/2016) người dùng có thể xóa tất cả ứng
dụng của mình bằng một lần nhấn, đồng thời điều chỉnh tông màu da của biểu tượng
cảm xúc và hỗ trợ VR.
Android 8.0 Oreo (phát hành tháng 3/2017) bổ sung nhiều tác vụ trong ứng dụng
ảnh. Ngoài ra còn mang đến trải nghiệm sao chép và dán tốt hơn, cải thiện bảo mật và
quản lý pin tốt hơn.
Android Pie 9.0 (phát hành tháng 8/2018) tập trung nâng cấp phần mềm giúp điện
thoại Android hoạt động nhanh hơn và tiết kiệm pin hơn. Android Pie bổ sung công cụ
trí tuệ nhân tạo (AI) vào các ứng dụng và lối tắt tiện lợi hơn cho người dùng.
ThS. Bùi Trung Úy 7
- Bài giảng Lập Trình Di Động - Android
1.1.3. Các đặc trưng của Android
Android được Google phát triển cho đến khi những thay đổi và cập nhật đã hoàn
thiện, khi đó mã nguồn mới được công khai. Mã nguồn này, nếu không sửa đổi, chỉ
chạy được trên một số thiết bị, thường là thiết bị thuộc dòng Nexus. Có nhiều thiết bị
có chứa những thành phần được giữ bản quyền do nhà sản xuất đặt vào thiết bị
Android của họ.
Sử dụng nhân Linux
Android ban đầu được xây dựng dựa trên nhân Linux phiên bản 2.6; kể từ Android
4.0 Ice Cream Sandwich trở về sau là phiên bản 3.x, với middleware, thư viện và API
viết bằng C, còn phần mềm ứng dụng chạy trên một nền tảng gồm các thư viện tương
thích với Java.
Android sử dụng máy ảo Dalvik với một trình biên dịch động để chạy 'mã dex'
(Dalvik Executable) của Dalvik, thường được biên dịch sang Java bytecode. Nền tảng
phần cứng chính của Android là kiến trúc ARM. Ngoài ra, Android cũng hỗ trợ x86
thông qua dự án Android x86 (chip Intel Atom), và Google TV cũng sử dụng một
phiên bản x86 đặc biệt của Android.
Nhân Linux dùng cho Android đã được Google thực hiện nhiều thay đổi về kiến
trúc so với nhân Linux gốc. Android không có sẵn hệ thống X-Window cũng không
hỗ trợ các thư viện GNU chuẩn, nên việc chuyển các ứng dụng hoặc thư viện Linux có
sẵn sang Android rất khó khăn. Các ứng dụng C/C++ và native SDL khác cũng được
hỗ trợ bằng cách sử dụng giao tiếp JNI.
Cơ chế quản lý bộ nhớ
Vì các thiết bị Android chủ yếu chạy bằng pin, nên Android được thiết kế để quản
lý bộ nhớ (RAM) giảm tối đa tiêu thụ điện năng. Khi một ứng dụng Android không
còn được sử dụng, hệ thống sẽ tự động ngưng nó trong bộ nhớ - trong khi ứng dụng về
mặt kỹ thuật vẫn "mở", nhưng ứng dụng này sẽ không tiêu thụ bất cứ tài nguyên nào
(như năng lượng pin hay năng lượng xử lý) và nằm đó cho đến khi nó được cần đến.
Cách làm như vậy có lợi kép là vừa làm tăng khả năng phản hồi nói chung của thiết bị
Android, vì ứng dụng không nhất thiết phải đóng rồi mở lại từ đầu, vừa đảm bảo các
ứng dụng nền không làm tiêu hao năng lượng một cách không cần thiết.
Android quản lý các ứng dụng trong bộ nhớ một cách tự động: khi bộ nhớ thấp, hệ
thống sẽ hủy ứng dụng và tiến trình không hoạt động trong một thời gian dài, xếp theo
thời điểm cuối mà chúng được sử dụng (tức là cũ nhất sẽ bị tắt trước). Quá trình này
được thiết kế trong suốt với người dùng, để người dùng không cần phải quản lý bộ
nhớ hoặc tự tay tắt các ứng dụng.
Để duy trì một môi trường chức năng mutil-task, Android đặt một giới hạn cứng
về kích thước heap cho mỗi ứng dụng. Giới hạn kích thước heap chính xác thay đổi
giữa các thiết bị dựa trên tổng RAM mà thiết bị có sẵn. Nếu ứng dụng của bạn đã đạt
đến giới hạn sức chứa của nó và cố gắng để cấp phát bộ nhớ hơn, nó sẽ nhận được một
lỗi OutOfMemoryError.
ThS. Bùi Trung Úy 8
- Bài giảng Lập Trình Di Động - Android
Tính bảo mật và riêng tư
Các ứng dụng Android chạy trong một "hộp cát" (sandbox), là một khu vực riêng
tư với hệ thống và không được tiếp cận đến phần còn lại của tài nguyên hệ thống, trừ
khi nó được người dùng trao quyền truy cập một cách công khai khi cài đặt. Trước khi
cài đặt một ứng dụng, Google Play sẽ hiển thị tất cả các quyền mà ứng dụng đòi hỏi,
chẳng hạn như một trò chơi cần kích hoạt bộ rung hoặc lưu dữ liệu vào thẻ nhớ SD, và
nó cần quyền đọc tin nhắn SMS hoặc tiếp cận danh bạ điện thoại. Sau khi xem xét các
quyền này, người dùng có thể chọn đồng ý hoặc từ chối, ứng dụng chỉ được cài đặt khi
người dùng đồng ý.
Máy ảo Dalvik (Android < 4.4 Kitkat)
Java được biết đến với khẩu hiệu "viết một lần, chạy mọi nơi" (write once, run
anywhere). Tính năng này của hệ sinh thái Java có được nhờ một lớp máy ảo đứng
giữa lớp ứng dụng và lớp hệ điều hành, gọi là máy ảo Java – JVM (Java Virtual
Machine). Máy ảo Java chạy rất ổn định và đồng nhất trên các môi trường máy tính cá
nhân (JSE) và máy chủ (JEE), tuy nhiên trong môi trường di động (JME) thì máy ảo
Java bị phân mảnh tương đối nhiều với các gói (pakages), cấu hình (configurations) và
các mẫu (profiles) khác nhau.
Google đã chọn Java làm ngôn ngữ phát triển ứng dụng cho hệ điều hành Android,
tuy nhiên lại từ bỏ cả phiên bản Java di động (JME) lẫn máy ảo Java (JVM) để phát
triển một máy ảo riêng - máy ảo Dalvik và tập thư viện Java chuẩn được viết lại và thu
gọn hơn. Giải pháp máy ảo Dalvik được đưa ra nhằm cân bằng giữa 2 điểm:
- Mỗi ứng dụng Android được chạy trong tiến trình riêng, với một thực thể
(instance) của máy ảo Dalvik riêng. Dalvik được thiết kế để hệ điều hành có thể chạy
nhiều thực thể của máy ảo một cách hiệu quả với file thực thi Dalvik (.dek file) được
thiết kế để tối ưu hóa sử dụng bộ nhớ.
- Máy ảo Dalvik sử dụng nhân Linux cho các việc liên quan đến lớp dưới của hệ
thống như quản lý tiểu trình (threading), quản lý bộ nhớ cấp thấp,...
Ứng dụng Android được phát triển bằng ngôn ngữ Java, sau đó được biên dịch
thành dạng mã nhị phân (Java bytecode). Các file nhị phân *.class này sẽ được chuyển
đổi thành 1 file nhị phân dùng cho máy ảo Dalvik - .dex (Dalvik EXecutable) trước
ThS. Bùi Trung Úy 9
- Bài giảng Lập Trình Di Động - Android
khi được cài lên thiết bị. Các tập tin .dex được thiết kế để phù hợp hơn với các thiết bị
hạn chế về bộ nhớ cũng như hiệu năng xử lý.
Dalvik là một phần mềm mã nguồn mở, ban đầu được phát triển bởi Dan
Bornstein, và đặt theo tên ngôi làng Dalvík của ông tại Eyjafjörður, Iceland, quê
hương của ông.
Máy ảo ART - Android Runtime (Android >= 4.4 Kitkat)
Trong suốt quá trình phát triển, hầu như mọi thành phần của Android đều được cập
nhật mới hay thậm chí là thay đổi hoàn toàn. Tuy nhiên, có một thứ cực kì quan trọng,
đó là máy ảo Dalvik dùng để chạy ứng dụng Android thì vẫn được giữ nguyên gần
như so với ban đầu. Chính nhờ Dalvik mà chúng ta chỉ có một app duy nhất nhưng
vẫn có thể chạy trên smartphone, tablet, Smart TV, thiết bị nhúng,... với nhiều loại
CPU khác nhau và từ các hãng khác nhau.
Vấn đề là với việc dịch và chạy bằng Dalvik đó là tốc độ chậm! chính sự xuất hiện
của nó thường làm cho hiệu năng ứng dụng Android thấp hơn so với các phần mềm
dùng trực tiếp mã đã được biên dịch sẵn. Trong nhiều trường hợp, nhất là với những
CPU hiện đại có sức mạnh xử lý tốt thì sự khác biệt này không đáng kể. Tuy nhiên,
với những phần mềm nặng thì chúng ta sẽ thấy nó một cách rõ rệt. Android chậm
cũng một phần là do Dalvik, và việc bắt vi xử lí chạy lâu hơn cũng là nguyên nhân
khiến hệ thống tiêu thụ nhiều điện hơn. Đó là lý do mà Google đã phát triển một giải
pháp thay thế cho máy ảo Dalvik già cỗi - máy ảo Android Runtime (ART).
Một phiên bản thử nghiệm của ART đã được nhúng trong Android 4.4 và chúng ta
có thể tìm thấy nó ở trong phần Settings > Developer Options > Select Runtime.
ThS. Bùi Trung Úy 10
- Bài giảng Lập Trình Di Động - Android
Từ Android 5.0, ART chính thức được thay thế Davilk là máy ảo mặc định của
Android (https://developer.android.com/about/versions/android-5.0-changes)
ART sử dụng một cách xử lí rất khác so với Dalvik. Đối với Davik, các ứng dụng
được biên dịch ra mã máy ở thời điểm mà chúng chạy. Dalvik thực hiện điều này bằng
một bộ máy gọi là "Just-In-Time" (JIT) compiler, tức là chỉ đoạn mã nào cần thiết mới
được dịch và chỉ dịch khi cần. Còn với ART, nó sử dụng bộ máy "Ahead-Of-Time"
(AOT) để biên dịch mã bytecode của ứng dụng thành mã máy ở thời điểm cài ứng
dụng vào thiết bị.
Do ART biên dịch các file thực thi, nhân của Android giờ có thể quản lý các trang
của code page (tập mã hóa ký tự của 1 ngôn ngữ) một cách hiệu quả hơn. Nhờ đó, mà
hệ điều hành di động của Google có thể quản lý bộ nhớ tốt hơn và ít tốn RAM hơn.
Ảnh hưởng của ART tới thời lượng pin cũng là rất đáng kể, do hệ điều hành không
cần phải biên dịch mã nguồn trong quá trình chạy ứng dụng nữa. Nhờ đó, quá trình
chạy ứng dụng sẽ giảm được đáng kể sức ép lên CPU, giúp tiết kiệm pin tốt hơn.
Hạn chế lớn nhất của ART so với Dalvik là quá trình biên dịch mã sẽ tốn nhiều
thời gian hơn. Do đó, quá trình khởi động điện thoại cũng như lần chạy ứng dụng đầu
tiên sẽ tốn nhiều thời gian hơn.
1.2. Kiến trúc phân tầng Android (software stack)
Để đảm bảo sự đơn giản, tính dùng chung và bảo mật trong các ứng dụng trên hệ
thống Android, các thư viện cho ứng dụng Android được chia ra thành các lớp từ thấp
đến cao, các thành phần ở lớp trên chủ yếu sử dụng các dịch vụ do các lớp ngay bên
dưới cung cấp mà ít khi phải dùng đến các API của các lớp thấp hơn.
Kiến trúc này được chia ra thành các tầng chính như sau:
ThS. Bùi Trung Úy 11
- Bài giảng Lập Trình Di Động - Android
Các lớp phần mềm trong Android
Trong đó, mỗi tầng đều có chức năng vai trò riêng biệt với nhau:
Lớp hạt nhân Linux (Linux kernel): Đây là lớp nền tảng mà hệ điều hành Android dựa
vào nó để phát triển, bao gồm các dịch vụ lõi của hệ thống như trình điều khiển phần
cứng, quản lý tiến trình, quản lý bộ nhớ, mạng, nguồn điện và bảo mật.... Đây là lớp
chứa tất cả các giao tiếp thiết bị ở mức thấp dùng để điều khiển các phần cứng khác
trên thiết bị Android.
Lớp các thư viện (libraries) - chạy bên trên lớp hạt nhân, bao gồm các các thư viện
lõi viết bằng C/C++ như libc và SSL, cũng như các thư viện:
- Thư viện cho việc phát các loại dữ liệu âm thanh và hình ảnh.
- Bộ quản lý vẽ (surface manager) cho việc hiển thị đồ họa trên màn hình.
- Các thư viện đồ họa bao gồm SGL và OpenGL cho đồ họa 2D và 3D.
- SQLite cho các ứng dụng sử dụng cơ sỡ dữ liệu.
- SSL và WebKit cho việc tích hợp trình duyệt và bảo mật Internet.
Lớp thực thi Android (Android runtime) - đây là lớp máy ảo có thể là máy ảo Davik
hoặc máy ảo ART giúp việc thực thi ứng dụng Android. Ngoài ra, Android runtime
còn giúp tối ưu năng lượng pin cũng như CPU của thiết bị Android.
Lớp khung ứng dụng (Application framework): cung cấp tập thư viện API để phát
triển ứng dụng Android. Lớp này cung cấp khả năng giao tiếp với phần cứng thông
qua các lớp bên dưới cũng như quản lý giao diện và các tài nguyên của ứng dụng.
ThS. Bùi Trung Úy 12
- Bài giảng Lập Trình Di Động - Android
Lớp ứng dụng (Application layer): hầu hết các ứng dụng (bao gồm cả ứng dụng cài
sẵn trong hệ điều hành và các ứng dụng của các bên thứ 3) đều được phát triển dựa
trên lớp này (dùng chung tập API). Lớp ứng dụng được chạy trong bộ thực thi
Android (với các thư viện lõi và máy ảo), sử dụng các lớp và các dịch vụ cung cấp bởi
lớp Application Framework.
1.3. Môi trường phát triển ứng dụng Android
1.3.1. Các công cụ và thiết lập chung
Java Development Kit (JDK): là một bộ hỗ trợ phát triển ứng dụng Java. Trước khi
làm việc với Android trên máy tính, chúng ta sẽ cần cài đặt và thiết lập JDK (Java
Development Kit), bạn có thể cài đặt phiên bản mới nhất JDK 8 ở link sau:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Các thiết lập Java cần thiết:
Thiết lập các biến môi trường (Enviroment variable) JAVA_HOME và Path. Vào
Control Panel , mở Advanced tab > Environment Variables.
ThS. Bùi Trung Úy 13
- Bài giảng Lập Trình Di Động - Android
Chỉnh sửa giá trị của biến Path:
Dùng câu lệnh java -version và javac -version để kiểm tra, nếu có kết quả tương tự
hình bên dưới tức là JDK đã cài đặt và thiết lập thành công.
Bộ công cụ Android SDK (Software Development Kit)
Android SDK là một tập hợp các thư viện được sử dụng để phát triển và đóng gói
ứng dụng Android. Bạn có thể vào trong web chính thức của Android developer để tải
Android SDK và các gói đi kèm:
Android SDK chia các công cụ, thư viện, … thành các gói (package) mà bạn có
thể tải về khi cần thết, kể cả tải mới cũng như cập nhật cái có sẵn trong SDK. Để tải
về các gói có sẵn trong Android SDK:
ThS. Bùi Trung Úy 14
- Bài giảng Lập Trình Di Động - Android
1.3.2. Android Studio IDE
Tháng 5 năm 2013, Google công bố Android Studio, một môi trường phát triển
ứng dụng tích hợp (IDE) dành riêng cho Android, mã nguồn mở, dựa trên IDE Java
IntelliJ của hãng JetBrains.
Android Studio là một IDE mạnh mẽ, được thiết kế và phát triển đặc biệt dành cho
việc xây dựng các ứng dụng Android. Nó có một lượng lớn các tính năng để đơn giản
hóa tất cả các khía cạnh của việc phát triển ứng dụng Android, chẳng hạn như một
trình soạn thảo code mạnh mẽ, giao diện trực quan và trình biên tập theme, vector và
tài nguyên hình ảnh, và nhiều hơn nữa. Bạn có thể thiết lập một dự án Android mới
cho nhiều loại ứng dụng Android khác nhau chỉ trong vòng vài giờ. Trước đây, khi
Android mới được ra đời, việc phát triển ứng dụng Android được thực hiện bằng
Eclipse và Android Developer Tools plugin. Tuy nhiên, điều đó đã thay đổi với việc
Google phát hành Android Studio.
ThS. Bùi Trung Úy 15
- Bài giảng Lập Trình Di Động - Android
Bạn có thể download bộ cài đặt Android Studio tại trang web chính thức của
Google http://developer.android.com/studio
Android Studio cũng đi kèm với bộ emulator (trình giả lập) giống thiết bị thật mà
bạn có thể sử dụng nếu không muốn làm việc trên thiết bị Android thật, và có thể tải
về và chạy bất kỳ phiên bản Android nào.
ThS. Bùi Trung Úy 16
- Bài giảng Lập Trình Di Động - Android
Phiên bản mới nhất của Android Studio 3.x, có một số tính năng chính bao gồm:
o Hỗ trợ xây dựng dự án Android dạng Gradle.
o Hỗ trợ sửa lỗi nhanh và tái sử dụng cấu trúc phương thức.
o Cung cấp các công cụ kiểm tra tính khả dụng, khả năng họat động của ứng
dụng, tương thích nền tảng…
o Hỗ trợ bảo mật mã nguồn và đóng gói ứng dụng.
o Trình biên tập giao diện cung cấp tổng quan giao diện ứng dụng và các thành
phần, cho phép tuỳ chỉnh trên nhiều cấu hình khác nhau.
o Cho phép tương tác với nền Google Cloud
Yêu cầu hệ thống để cài đặt Android Studio 3.x cho từng hệ điều hành như sau:
o Microsoft® Windows® 7/8/Vista/2003/2007/2010 (32 or 64-bit).
o 2 GB RAM trở lên.
o Dung lượng ổ đĩa ứng còn trống ít nhất 400 MB.
o Ít nhất 1 GB cho Android SDK, emulator system images và caches.
o Độ phân giảm tối thiểu 1280 x 800.
o Java Development Kit (JDK) 7 trở lên.
o Tùy chọn thêm cho accelerated emulator: hỗ trợ bộ xử lý Intel® với các phiên
bản: Intel® VT-x, Intel® EM64T (Intel® 64), và tính năng Execute Disable
(XD) Bit.
ThS. Bùi Trung Úy 17
- Bài giảng Lập Trình Di Động - Android
Chương 2. XÂY DỰNG ỨNG DỤNG ANDROID
Trong chương này, chúng ta sẽ tìm hiểu cấu trúc và các thành phần cơ bản của
một ứng dụng Android; các bước cụ thể để xây dựng một ứng dụng Android cơ bản
nhất; cách cài đặt và chạy ứng dụng trên thiết bị.
2.1. Cơ bản về ứng dụng Android
Các ứng dụng Android thường được viết bằng ngôn ngữ lập trình Java. Các công
cụ thuộc Android SDK sẽ biên dịch (compile) mã nguồn - kèm theo bất cứ file dữ liệu
và tài nguyên - thành một gói Android (package), đó là một file lưu trữ (archive file)
với hậu tố .apk. Toàn bộ nguồn trong một file .apk được coi là một ứng dụng, đây
chính là file mà các thiết bị Android dùng để cài đặt ứng dụng.
Hình 2.1. Quá trình biên dịch ứng dụng Android
Khi đã được cài đặt trên thiết bị, mỗi ứng dụng Android đều “sống” trong vùng
sandbox (môi trường ảo chạy ứng dụng) bảo mật của mình:
• Hệ điều hành Android là hệ thống Linux đa người dùng (multi-user), trong mỗi
ứng dụng lại là một người dùng khác.
• Theo mặc định, hệ thống gán cho mỗi ứng dụng một user ID duy nhất (ID này
chỉ được hệ thống dùng và ứng dụng không biết tới nó). Hệ thống thiết lập quyền cho
tất cả các file trong ứng dụng, sao cho chỉ duy nhất user ID được gán cho ứng dụng đó
mới có thể truy cập vào những file này.
• Mỗi tiến trình đều có máy ảo (virtual machine - VM) riêng của nó, nên mã của
một ứng dụng sẽ chạy độc lập với các ứng dụng khác.
ThS. Bùi Trung Úy 18
- Bài giảng Lập Trình Di Động - Android
2.1.1. Các thành phần chính của ứng dụng
Một ứng dụng Android có thể bao gồm một hoặc nhiều thành phần kết hợp với
nhau, mỗi thành phần đều có thực thể riêng và đóng một vai trò cụ thể. Sau đây là một
số thành phần chính của một ứng dụng Android:
Activity
Activity là thành phần quan trọng nhất đóng vai trò là bộ khung của ứng dụng.
Trong ứng dụng Android, Activity là thành phần có hiển thị màn hình giao diện, nơi
người dùng có thể tương tác với ứng dụng. Một ứng dụng có thể có một hoặc nhiều
Activity, Activity được khởi chạy đầu tiên khi ứng dụng khởi động được gọi là “main
activity”.
Service
Service là thành phần chạy ngầm (background) trong Android, service được sử
dụng để thực thi các tác vụ cần nhiều thời gian, thực hiện ở chế độ ngầm và thường
không cần giao diện hiển thị.
Ví dụ, khi bạn đang nghe nhạc bằng ứng dụng nghe nhạc nhưng bạn vẫn nghe
được kể cả khi đã tắt ứng dụng đó là vì ứng dụng đó có service đang chạy ngầm.
Không chỉ thế các bạn còn có thể liên kết hoặc kết nối giữa một Activity với một
service, ví dụ khi download một file từ trên mạng, việc download thực hiện ở service,
sau đó sẽ trả kết quả phần trăm download lên activity để hiện thị cho người dùng biết.
Notification
Notification là thành phần cho phép gửi các thông báo đến người dùng mà không
chiếm quá nhiều việc điều khiển của người dùng trên thiết bị. Chẳng hạn, khi nhận
được một tin nhắn hay một thư điện tử, thiết bị sẽ sử dụng Notification để thông báo
người dùng thông qua nhạc chuông, đèn nền, thể hiện biểu tượng trên thanh tác vụ…
Notification được xây dựng cho mục đích gửi các thông báo đến người dùng thông
qua thanh trạng thái.
Giao diện Notification không thuộc giao diện ứng dụng, nhưng có thể tuỳ chỉnh
giao diện Notification thông qua các phương thức có sẵn.
ThS. Bùi Trung Úy 19
- Bài giảng Lập Trình Di Động - Android
Content Provider
Content Provider được sử dụng để quản lý và chia sẻ dữ liệu giữa các ứng dụng.
Content Provider xây dựng cách thức truy xuất tập hợp các dữ liệu ứng dụng, dữ
liệu có thể lưu trữ ở nhiều dạng như: SQLite, tập tin, tài nguyên Web hoặc bất kì thư
mục lưu trữ nào.
Có thể sử dụng Content Provider để xây dựng các ứng dụng sử dụng chung nguồn
tài nguyên hoặc sử dung riêng. Trong Android, một số Content Provider được xây
dựng sẵn như: Danh bạ, tài nguyên đa truyền thông, lịch,...
2.1.2. Tính tương thích thiết bị
Khi xây dựng một ứng dụng Android, chúng ta cần quan tâm và đảm bảo sự tương
thích chạy trên sự đa dạng của các thiết bị như:
- Hỗ trợ các phiên bản Android: Mỗi phiên bản kế tiếp được bổ sung hoặc loại bỏ
các phương thức API, cần thực thi khai báo các thông tin phiên bản để sử dụng đầy đủ
các tính năng cho ứng dụng.
- Xử lý kích thước màn hình khác nhau: Trong giai đoạn đầu, chỉ có một số ít các
thiết bị có thể chạy Android và hầu như tất cả chúng là điện thoại. Tuy nhiên, trong
những năm qua, với ngày càng nhiều hơn các nhà sản xuất thiết bị áp dụng nền tảng
Android, thì các kích cỡ màn hình và mật độ điểm ảnh bắt đầu trở nên khác nhau.
Android cũng bắt đầu hỗ trợ các thiết bị màn hình lớn, chẳng hạn như máy tính bảng,
Google TV,... Do đó, các nhà phát triển phải dự kiến sử dụng nhiều kích thước hình
ảnh và bố cục để hỗ trợ tất cả các màn hình khác nhau.
Ứng dụng Android cần tương thích với nhiều kích cỡ thiết bị, được phân chia
thành hai thuộc tính:
Kích thước vật lý màn hình (screen size)
Mật độ điểm ảnh (density).
ThS. Bùi Trung Úy 20
nguon tai.lieu . vn