Đồ án tốt nghiệp ngành công nghệ thông tin PTIT Học viện Công nghệ Bưu chính Viễn thông. Phát triển ứng dụng nghe nhạc trên nền tảng Android.....................................................................................................................................................................................................................................................
Trang 1Đề tài: “Xây dựng ứng dụng nghe nhạc trực
tuyến trên nền tảng Android”
Giảng viên hướng dẫn : TS Trần Tiến Công
Sinh viên thực hiện: Nguyễn Bá Nhật MSSV: B17DCCN479
HÀ NỘI - 2021
Trang 2BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
-
ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC
Đề tài: “Xây dựng ứng dụng nghe nhạc trực tuyến trên nền tảng
Android”
Giảng viên hướng dẫn: TS Trần Tiến Công
Sinh viên thực hiện: Nguyễn Bá Nhật
Trang 3Đồ án tốt nghiệp Đại học
NHẬN XÉT (Của giảng viên phản biện)
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Hà Nội, 12/2021 Giảng viên phản biện
Trang 4Đồ án tốt nghiệp Đại học
NHẬN XÉT (Của giảng viên hướng dẫn)
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Hà Nội, 12/2021 Giảng viên hướng dẫn
Trang 5Đồ án tốt nghiệp Đại học Lời cảm ơn
Mặc dù em đã cố gắng hoàn thành luận văn trong phạm vi và khả năng cho phép, nhƣng chắc chắn sẽ không tránh khỏi những thiếu sót, kính mong sự cảm thông và tận tình chỉ bảo của quý Thầy Cô và các bạn
Sinh viên thực hiện Nguyễn Bá Nhật
Trang 6Đồ án tốt nghiệp Đại học Mục lục
MỤC LỤC
LỜI CẢM ƠN i
MỤC LỤC ii
DANH MỤC CÁC KÍ HIỆU VÀ CHỮ VIẾT TẮT iv
DANH MỤC CÁC BẢNG vi
DANH MỤC CÁC HÌNH VẼ vii
MỞ ĐẦU 10
CHƯƠNG 1: GIỚI THIỆU CHUNG 11
1.1 Sự phát triển của các app di động 11
1.2 Mục tiêu của đồ án 12
CHƯƠNG 2: CÁC KIẾN THỨC, KỸ THUẬT SỬ DỤNG 14
2.1 Hệ điều hành Android 14
2.1.1 Giới thiệu 14
2.1.2 Kiến trúc của hệ điều hành Android 15
2.2 Ngôn ngữ Java và kỹ thuật lập trình hướng đối tượng 16
2.2.1 Ngôn ngữ lập trình Java 16
2.2.2 Kỹ thuật lập trình hướng đối tượng 18
2.3 Webservice 18
2.3.1 Giới thiệu về Webservice 18
2.3.2 RESTful API 19
2.3.4 Spring Boot 20
2.3.5 Hệ quản trị cơ sở dữ liệu MySQL 20
2.3.6 JPA (Java Persistence API) 21
2.4 Một số kiến thức lập trình Android 22
2.4.1 Activity 22
2.4.2 Fragment 23
2.4.3 Các thư viện sử dụng 24
2.4.4 ExoPlayer 24
2.4.6 Service 25
2.4.7 RecyclerView 26
CHƯƠNG 3: PHÂN TÍCH, THIẾT KẾ 28
3.1 Biểu đồ Use case 28
3.1.1 Biểu đồ Use case tổng quát 28
3.1.2 Biểu đồ Use case chi tiết 28
3.2 Biểu đồ hoạt động (activity diagram) 36
3.2.1 Use case đăng ký 36
3.2.2 Use case đăng nhập 36
Trang 7Đồ án tốt nghiệp Đại học Mục lục
3.2.3 Use case đăng xuất 37
3.2.4 Use case xem chi tiết nghệ sĩ/album/playlist/thể loại 37
3.2.5 Use case tạo playlist 37
3.2.6 Use case thêm bài hát vào playlist 38
3.2.7 Use case theo dõi nghệ sĩ 38
3.2.8 Use case lưu bài hát yêu thích 38
3.2.9 Use case xem bảng xếp hạng 39
3.2.10 Use case tìm kiếm nghệ sĩ/bài hát/album/playlist/thể loại 39
3.2.11 Use case chơi nhạc 39
3.2.12 Use case thêm admin/nghệ sĩ/bài hát/album/playlist/thể loại 40
3.2.13 Use case sửa admin/nghệ sĩ/bài hát/album/playlist/thể loại 40
3.2.14 Use case xóa admin/nghệ sĩ/bài hát/album/playlist/thể loại 41
3.3 Biểu đồ lớp phân tích 41
3.4 Kiến trúc hệ thống 42
3.5 Thiết kế cơ sở dữ liệu 42
CHƯƠNG 4: TỔNG KẾT 44
4.1 Giao diện ứng dụng 44
4.1.1 Giao diện website admin 44
4.1.2 Giao diện ứng dụng 53
4.2 Kết luận 56
4.2.1 Đạt được 56
4.2.2 Hạn chế 56
4.3 Hướng phát triển trong tương lai 56
DANH MỤC TÀI LIỆU THAM KHẢO 57
Trang 8Đồ án tốt nghiệp Đại học Danh mục các ký hiệu và chữ viết tắt
DANH MỤC CÁC KÍ HIỆU VÀ CHỮ VIẾT TẮT
API: Application Programming Interface Giao diện lập trình ứng dụng
OOP: Object Oriented Programming Lập trình hướng đối tượng
JVM: Java Virtual Machine Máy ảo Java
RMI: Remote Method Invocation Lời gọi phương thức từ xa
EJB: Enterprise Java Beans Giao diện lập trình ứng dụng Java phía
máy chủ
W3C: World Wide Web Consortium Tổ chức tiêu chuẩn quốc tế chính
cho World Wide Web
XML: Extensible markup language Ngôn ngữ đánh dấu có thể mở rộng URL: Uniform Resource Locators Bộ định vị tài nguyên thống nhất
B2B: Business-to-business
Mô hình kinh doanh thương mại điện tử trong đó giao dịch xảy ra trực tiếp giữa các doanh nghiệp với nhau
JSON: JavaScript Object Notation Ký hiệu đối tượng JavaScript
REST: Representational State Transfer Chuyển trạng thái trình bày
HTTP: Hypertext Transfer Protocol Giao thức truyền siêu văn bản
HTML: Hypertext Markup Language Ngôn ngữ đánh dấu siêu văn bản
DBMS: Database Management System Hệ quản trị cơ sở dữ liệu
JPA: Java Persistence API Là một đặc tả các tiêu chuẩn của Java để
làm việc với cơ sở dữ liệu quan hệ ORM: Object Relational Mapping Ánh xạ quan hệ đối tượng
Trang 9Đồ án tốt nghiệp Đại học Danh mục các ký hiệu và chữ viết tắt
SQL: Structured Query Language Ngôn ngữ truy vấn có cấu trúc
JDBC: Java Database Connectivity Kết nối cơ sở dữ liệu bằng Java
IPC: Interprocess Communication Giao tiếp liên tiến trình
ER Diagram: Entity Relationship Diagram Biểu đồ quan hệ thực thể
AI: Artificial Intelligence Trí tuệ nhân tạo
Trang 10Đồ án tốt nghiệp Đại học Danh mục các bảng, hình vẽ
DANH MỤC CÁC BẢNG
Bảng 3.1: Kịch bản use case đăng ký 28
Bảng 3 2: Kịch bản use case đăng nhập 29
Bảng 3 3: Kịch bản use case đăng xuất 29
Bảng 3 4: Kịch bản use case xem chi tiết 30
Bảng 3 5: Kịch bản use case tạo playlist 31
Bảng 3 6: Kịch bản use case thêm bài hát vào playlist 31
Bảng 3 7: Kịch bản use case theo dõi nghệ sĩ 31
Bảng 3 8: Kịch bản use case lưu bài hát yêu thích 32
Bảng 3 9: Kịch bản use case xem bảng xếp hạng 32
Bảng 3 10: Kịch bản use case tìm kiếm 33
Bảng 3 11: Kịch bản use case chơi nhạc 33
Bảng 3 12: Kịch bản use case thêm 34
Bảng 3 13: Kịch bản use case sửa 34
Bảng 3 14: Kịch bản use case xóa 35
Trang 11Đồ án tốt nghiệp Đại học Danh mục các bảng, hình vẽ
DANH MỤC CÁC HÌNH VẼ
Hình 1 1: Steve Jobs và chiếc iPhone đầu tiên (Nguồn: Business Insider) 11
Hình 2 1: Biểu tượng của hệ điều hành Android (Nguồn: android.com) 15
Hình 2 2: Kiến trúc hệ điều hành Android (Nguồn: developer.android.com) 15
Hình 2 3: Quá trình chạy một chương trình Java (Nguồn: Topdev) 17
Hình 2 4: Minh họa Webservice (Nguồn: atpsolution.vn) 19
Hình 2 5: Ví dụ về 1 file JSON (Nguồn: ResearchGate) 20
Hình 2 6: Minh họa Spring Boot (Nguồn: Javatpoint) 20
Hình 2 7: Cơ chế của JPA (Nguồn: Thistechnologylife.com) 21
Hình 2 8: Vòng đời của một Activity (Nguồn: developer.android.com) 23
Hình 2 9: Mối quan hệ giữa Activity và Fragment (Nguồn: viblo.asia) 24
Hình 2 10: Vòng đời của Service (Nguồn: developer.android.com) 26
Hình 2 11: Cơ chế tái sử dụng View của RecyclerView (Nguồn: viblo.asia) 27
Hình 3 1: Use case tổng quát 28
Hình 3 2: Use case đăng ký 28
Hình 3 3: Use case đăng nhập 29
Hình 3 4: Use case đăng xuất 29
Hình 3 5: Use case xem chi tiết 30
Hình 3 6: Use case tạo playlist 30
Hình 3 7: Use case thêm bài hát vào playlist 31
Hình 3 8: Use case theo dõi nghệ sĩ 31
Hình 3 9: Use case lưu bài hát yêu thích 31
Hình 3 10: Use case xem bảng xếp hạng 32
Hình 3 11: Use case tìm kiếm 32
Hình 3 12: Use case chơi nhạc 33
Hình 3 13: Use case thêm 33
Hình 3 14: Use case sửa 34
Hình 3 15: Use case xóa 35
Hình 3 16: Activity đăng ký 36
Hình 3 17: Activity đăng nhập 36
Hình 3 18: Activity đăng xuất 37
Hình 3 19: Activity xem chi tiết 37
Hình 3 20: Activity tạo playlist 37
Hình 3 21: Activity thêm bài hát vào playlist 38
Hình 3 22: Activity theo dõi nghệ sĩ 38
Hình 3 23: Activity lưu bài hát yêu thích 38
Trang 12Đồ án tốt nghiệp Đại học Danh mục các bảng, hình vẽ
Hình 3 24: Activity xem bảng xếp hạng 39
Hình 3 25: Activity tìm kiếm 39
Hình 3 26: Activity chơi nhạc 39
Hình 3 27: Activity thêm admin/nghệ sĩ/bài hát/album/playlist/thể loại 40
Hình 3 28: Activity sửa admin/nghệ sĩ/bài hát/album/playlist/thể loại 40
Hình 3 29: Activity xóa admin/nghệ sĩ/bài hát/album/playlist/thể loại 41
Hình 3 30: Biểu đồ lớp phân tích của hệ thống 41
Hình 3 31: Kiến trúc hệ thống 42
Hình 3 32: ER diagram của hệ thống 43
Hình 4 1: Giao diện danh sách admin 44
Hình 4 2: Giao diện thêm admin 44
Hình 4 3: Giao diện sửa admim 45
Hình 4 4: Giao diện xóa admin 45
Hình 4 5: Giao diện danh sách nghệ sĩ 45
Hình 4 6: Giao diện thêm nghệ sĩ 46
Hình 4 7: Giao diện sửa nghệ sĩ 46
Hình 4 8: Giao diện xóa nghệ sĩ 46
Hình 4 9: Giao diện danh sách bài hát 47
Hình 4 10: Giao diện thêm bài hát 47
Hình 4 11: Giao diện sửa bài hát 47
Hình 4 12: Giao diện xóa bài hát 48
Hình 4 13: Giao diện danh sách album 48
Hình 4 14: Giao diện thêm album 48
Hình 4 15: Giao diện sửa album 49
Hình 4 16: Giao diện xóa album 49
Hình 4 17: Giao diện danh sách playlist 49
Hình 4 18: Giao diện thêm playlist 50
Hình 4 19: Giao diện sửa playlist 50
Hình 4 20: Giao diện xóa playlist 50
Hình 4 21: Giao diện danh sách thể loại 51
Hình 4 22: Giao diện thêm thể loại 51
Hình 4 23: Giao diện sửa thể loại 51
Hình 4 24: Giao diện xóa thể loại 52
Hình 4 25: Màn hình welcome 53
Hình 4 26: Màn hình đăng ký 53
Hình 4 27: Màn hình đăng nhập 53
Hình 4 28: Màn hình profile 53
Trang 13Đồ án tốt nghiệp Đại học Danh mục các bảng, hình vẽ
Hình 4 29: Màn hình discover 54
Hình 4 30: Màn hình trending 54
Hình 4 31: Màn hình tìm kiếm (1) 54
Hình 4 32: Màn hình tìm kiếm (2) 54
Hình 4 33: Màn hình chi tiết nghệ sĩ 55
Hình 4 34: Màn hình chi tiết album 55
Hình 4 35: Màn hình chi tiết playlist 55
Hình 4 36: Màn hình chơi nhạc 55
Trang 14Đồ án tốt nghiệp Đại học Mở đầu
MỞ ĐẦU
Hiện tại khoa học và công nghệ phát triển nhanh đến chóng mặt, con người ngày càng được hưởng nhiều lợi ích từ nó, điển hình là sự ra đời của smartphone Năm 2007, hãng Apple đã “trình làng” chiếc điện thoại iPhone đầu tiên Sự ra đời này đánh dấu sự sáng tạo đột phá về kiểu dáng với nét đặc trưng là màn hình cảm ứng siêu nhạy giúp người sử dụng có thể thao tác dễ dàng chỉ bằng việc “lướt” nhẹ các ngón tay IPhone đã tạo nên cơn sốt chưa từng
có và chính thức khởi đầu cho cuộc chạy đua cạnh tranh khốc liệt trong phân khúc dòng điện
thoại thông minh (smartphone) Theo báo cáo của Hootsuite về thế giới số năm 2020, lượng
người dùng smartphone trên toàn cầu trong năm 2020 là 5.22 tỷ, chiếm 66% dân số thế giới
Tuy iPhone là cảm hứng cho cho sự ra đời của những smartphone sau này với thiết kế không nút bấm nhưng hệ điều hành iOS của nó lại không phải là hệ điều hành phổ biến nhất
Ra mắt vào 10/2008, Android hiện đang là hệ điều hành di động phổ biến nhất thế giới với 70.74% thị phần toàn cầu tính đến 11/2021 (theo statcounter.com), tại Việt Nam chiếm 60.8% thị phần (theo số liệu năm 2020 của Appota)
Cùng với sự bùng nổ của smartphone, nhu cầu giải trí của người dùng trên đó cũng tăng theo Đồ án này sẽ giới thiệu về việc phát triển ứng dụng nghe nhạc cho các thiết bị di động chạy hệ điều Android – hệ điều hành phổ biến nhất thế giới hiện tại Người dùng giờ đây chỉ cần chiếc smartphone là có thể nghe nhạc ở bất cứ đâu với các bản nhạc hot nhất hiện nay
Trang 15Đồ án tốt nghiệp Đại học Chương 1: Giới thiệu chung
CHƯƠNG 1: GIỚI THIỆU CHUNG
1.1 Sự phát triển của các app di động
Các ứng dụng di động giờ đây đang là một phần thiết yếu của cuộc sống chúng ta Chúng ta
sử dụng chúng để chat với bạn bè, mua sắm, chụp ảnh và nhiều thứ khác Theo thống kê, chúng ta dành nhiều thời gian cho smartphone hơn là máy tính cá nhân (PC) Vậy chúng ta sẽ cùng đi qua lịch sử phát triển của ứng dụng di động để hiểu tại sao chúng lại trở nên phổ biến như vậy
Những app di động đầu tiên
Nhiều người trong số chúng ta chắc vẫn nhớ mình đã từng có chiếc điện thoại cổ lỗ với một
số tính năng như: calculator, clock, calendar và contact book Đó là những ứng dụng đầu tiên của điện thoại di động Nhân tiện, bạn có nhớ Snake không? Trò chơi mà bạn là một hàng dài các chấm và phải “ăn” các chấm khác, mỗi chấm bạn ăn làm “đuôi” bạn dài ra Mục tiêu của bạn là ăn hết các chấm mà không cắn phải đuôi mình Đó là sự nhàm chán trong những năm
80, 90 Tuy vậy, chúng đã mở đường cho các ứng dụng hiện đại ngày nay
Sự thay đổi lớn
Hình 1 1: Steve Jobs và chiếc iPhone đầu tiên (Nguồn: Business Insider)
Việc công bố chiếc iPhone đầu tiên là một bước nhảy vọt đối với sự phát triển của ứng dụng
di động Bàn phím kỹ thuật số, màn hình cảm ứng đa điểm và cuối cùng là một trình duyệt web chức năng đã hoàn toàn cách mạng hóa cách mọi người sử dụng các ứng dụng dành cho thiết bị di động Tháng 7 năm 2008 là khi mọi thứ thay đổi: App Store của Apple ra mắt Trong một ngày, Apple đã phát hành một loạt ứng dụng mà bạn có thể tải xuống iPhone của mình Chính xác hơn, họ đã phát hành khoảng 552 ứng dụng, trong đó 135 ứng dụng được tải xuống miễn phí Chỉ trong một tuần, người dùng iPhone đã tải xuống khoảng 10.000.000 ứng dụng Từ “app” đã trở thành từ của năm vào năm 2010, theo American Dialect Society
Các con số ấn tượng
- Số người sử dụng smartphone trên toàn cầu là 3.8 tỉ người
- Đã có 218 tỷ lượt tải ứng dụng vào năm 2020
- Trong năm 2020, người dùng điện thoại thông minh trung bình có 40 ứng dụng được cài đặt trên điện thoại di động của họ
- Thị trường ứng dụng dành cho thiết bị di động được dự đoán sẽ tạo ra doanh thu lên tới 581,9 tỷ đô la vào cuối năm 2020
Trang 16Đồ án tốt nghiệp Đại học Chương 1: Giới thiệu chung
- Những người từ 18 đến 24 tuổi dành 66% thời gian cho phương tiện truyền thông kỹ thuật
số của họ để sử dụng các ứng dụng trên điện thoại thông minh
- 87% người dùng điện thoại thông minh dành thời gian trên thiết bị di động của họ cho các ứng dụng
Các app làm thay đổi cuộc sống của chúng ta
Tinder
Tinder thành lập năm 2012 Ứng dụng hẹn hò dựa trên vị trí cho phép người dùng thao tác vuốt sang phải để thích và vuốt sang trái để bỏ qua Nếu hai người dùng cùng quan tâm, sẽ được ghép cặp bằng thuật toán, dựa trên thông tin có sẵn của nửa kia, như tiểu sử rút gọn, tài khoản Instagram, Facebook và Spotify liên kết
Uber
Uber được thành lập vào năm 2009 dưới tên UberCab bởi lập trình viên Garett Camp và Travis Kalanick Ý tưởng phát triển ứng dụng gọi xe dựa trên nền tảng kinh tế chia sẻ xuất hiện khi Camp rủ thêm người đi cùng một chuyến taxi để giảm chi phí Thời điểm đó, Kalanick, vừa bán start-up Red Swoosh với giá 19 triệu USD, đã chịu toàn bộ chi phí cho dự
án phát triển Uber
Trello
Trello là một ứng dụng, phần mềm, công cụ quản lý công việc dùng để thiết lập và quản lý các đầu việc vô cùng logic hiệu quả Tính năng nổi bật của Trello đó chính là quản lý công việc theo nhóm Các công việc chung của nhóm thì thành viên chỉ cần nhìn qua là nắm được toàn bộ và công việc của mình
Duoligo
Duolingo là một nền tảng học tập ngôn ngữ miễn phí, quá trình học ngoại ngữ sẽ hiệu quả và thú vị hơn khi chơi game Ứng dụng này sẽ chia quá trình học tập ngoại ngữ thành cấp độ khác nhau, người dùng có thể lựa chọn theo mức độ của riêng mình Hoàn thành một giai đoạn học tập, người dùng có thể nhận được điểm thưởng Dịch vụ này là miễn phí, bạn không cần phải chi tiền để học Mục tiêu duolingo là để làm cho bạn thông thạo một trong 13 ngôn ngữ mà nó hỗ trợ, và nó thậm chí có thể nhắc nhở bạn làm bài tập cho lần đầu tiên Nó tương thích với các thiết bị iOS và Android
Shyp
Shyp giúp bạn giải quyết những vấn đề chính của dịch vụ bưu chính, nó có tiềm năng để “lật đổ” toàn bộ ngành công nghiệp vận chuyển Sử dụng ứng dụng điện thoại di động này, bạn chỉ cần gửi hình ảnh đồ bạn cần gửi, nhân viên chuyển phát nhanh của Shyp sẽ tới nơi để nhận hàng, đóng gói và gửi tới điểm chuyển đồ gần nhất Đây là phần mềm miễn phí cài đặt trên iOS, Android
1.2 Mục tiêu của đồ án
Trong quá trình phát triển không ngừng nghỉ của xã hội, con người phải liên tục cập nhật các
xu hướng, kiến thức và đòi hỏi việc đó phải trau dồi từng ngày để không bị bỏ lại ở phía sau Điều này vô hình tạo nên những áp lực, stress cho chúng ta Âm nhạc là thứ mà con người ta thường tìm đến mỗi khi cảm thấy stress Tuy nhiên các cách thức nghe nhạc truyền thống như: đĩa CD, đĩa than,… có nhiều nhược điểm về: giá cả, tính di động,… nên khó tiếp cận
Trang 17Đồ án tốt nghiệp Đại học Chương 1: Giới thiệu chung được phần đông thính giả Để giải quyết vấn đề này, tôi xây dựng nên “Ứng dụng nghe nhạc trực tuyến trên nền tảng Android” Với ứng dụng này, bạn có thể nghe nhạc miễn phí mọi lúc, mọi nơi chỉ với chiếc smartphone kết nối internet
Chức năng của ứng dụng:
- Người dùng cần đăng ký tài khoản để có thể nghe nhạc và lưu lại những bài hát, album mà mình yêu thích; theo dõi nghệ sĩ mình yêu thích
- Chức năng Discover hiển thị những bài hát, album hot nhất những ngày qua
- Người dùng có thể xem các bảng xếp hạng V-POP, US-UK, K-POP
- Chức năng tìm kiếm cho phép người dùng tìm kiếm bài hát, album, playlist, nghệ sĩ mình yêu thích
- Chức năng chơi nhạc
Chức năng của website admin:
- Thêm, sửa, xóa, tìm kiếm bài hát, nghệ sĩ, album, playlist
Trang 18Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
CHƯƠNG 2: CÁC KIẾN THỨC, KỸ THUẬT SỬ DỤNG
2.1 Hệ điều hành Android
2.1.1 Giới thiệu
Android là một điều hành dựa trên nền tảng Linux được thiết kế dành riêng 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 Ban đầu, Android được phát triển bởi Tổng công ty Android, với sự hỗ trợ tài chính từ Google và sau này được chính Google mua lại vào năm 2005, Android ra mắt vào năm 2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm các công ty phần cứng, phần mềm,
và viễn thông với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động Chiếc điện thoại đầu tiên chạy Android được bán vào năm 2008
Android có mã nguồn mở và Google phát hành mã nguồn 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ác lập trình viên nhiệt huyết được điều chỉnh và phân phối Android một cách tự do Ngoài ra, Android còn có một cộng đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng chức năng của thiết bị Tháng 10 năm 2012, có khoảng 700.000 ứng dụng trên Android, và số lượt tải ứng dụng từ Google Play, cửa hàng ứng dụng chính của Android, ước tính khoảng 25 tỷ lượt
Những yếu tố này đã giúp Android trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới, vượt qua Symbian OS vào quý 4 năm 2010, và được các công ty công nghệ lựa chọn khi
họ cần một hệ điều hành không nặng nề, có khả năng tinh chỉnh, và giá rẻ chạy trên các thiết
bị công nghệ cao thay vì tạo dựng từ đầu Kết quả là mặc dù được thiết kế để chạy trên điện thoại và máy tính bảng, Android đã xuất hiện trên TV, máy chơi game và các thiết bị điện tử khác 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
Android chiếm 87,7% thị phần điện thoại thông minh trên toàn thế giới vào thời điểm quý 2 năm 2017, với tổng cộng 2 tỷ thiết bị đã được kích hoạt và 1,3 triệu lượt kích hoạt mỗi ngày Sự thành công của hệ điều hành cũng khiến nó trở thành mục tiêu trong các vụ kiện liên quan đến bằng phát minh, góp mặt trong cái gọi là "cuộc chiến điện thoại thông minh" giữa các công ty công nghệ
Trang 19Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Hình 2 1: Biểu tượng của hệ điều hành Android (Nguồn: android.com)
2.1.2 Kiến trúc của hệ điều hành Android
Hình 2 2: Kiến trúc hệ điều hành Android (Nguồn: developer.android.com)
Tầng System App
Người dùng sẽ nhìn thấy tất cả các ứng dụng ở lớp trên cùng Các ứng dụng được tạo ra được cài đặt ở lớp trên cùng này
Tầng Java API Framework
Toàn bộ các tính năng của hệ điều hành Android có sẵn cho bạn thông qua các API được viết bằng ngôn ngữ Java Các API này giúp bạn tạo ứng dụng Android chỉ bằng việc sử dụng lại các thành phần, dịch vụ hệ thống modular, core Các thành phần đó là:
Trang 20Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
- View System phong phú và có thể mở rộng Giúp bạn xây dựng giao diện cho app của mình
Nó bao gồm: lists, grids, text box, button, thậm chí là trình duyệt web được nhúng trong giao diện
- Resource Manager: Cung cấp quyền truy cập tới các tài nguyên không phải source code
như: strings, đồ họa (ảnh, video), các layout file (các file tạo giao diện)
- Notification Manager: Cho phép các app hiển thị thông báo trong status bar
- Activity Manager: Quản lý vòng đời của app và cung cấp cơ chế back stack
- Content Provider: Cho phép ứng dụng của bạn truy cập tới dữ liệu của các ứng dụng khác
(ví dụ khi bạn muốn lấy thông tin trong danh bạ điện thoại) hoặc chia sẻ dữ liệu của bạn tới các ứng dụng khác
Tầng Native C/C++ libraries và Android Runtime
- Native C/C++ libraries: Bao gồm một tập các thư viện được viết bằng C/C++ như: Webkit,
OpenGL ES,…
- Android Runtime: Được xây dựng với mục đích làm cho các thiết bị di động có thể chạy
nhiều máy ảo một cách hiệu quả Trước khi thực thi, bất kì ứng dụng Android nào cũng được convert thành file thực thi với định dạng nén Dalvik Executable (.dex) Định dạng này được thiết kế để phù hợp với các thiết bị hạn chế về bộ nhớ cũng như tốc độ xử lý Ngoài ra máy ảo Dalvik sử dụng bộ nhân Linux để cung cấp các tính năng như thread, low-level memory management
Tầng Hardware Abstraction Layer (HAL)
Để các ứng dụng có thể truy cập được các thành phần phần cứng của thiết bị (camera, bàn phím, màn hình, bluetooth,…) thì phải thông qua tầng này
Tầng HAL gồm nhiều module thư viện, mỗi cái implement 1 interface cho 1 kiểu phần cứng
cụ thể Khi một framework API thực hiện 1 lời gọi để truy cập phần cứng thiết bị, hệ điều hành Android sẽ load module thư viện ứng với phần cứng đó
Java là một ngôn ngữ lập trình hướng đối tượng (OOP) được phát triển bởi Sun Microsystem
do James Gosling khởi xướng và phát hành vào năm 1995 Java có các đặc điểm sau:
Viết một lần, chạy mọi nơi (Write One, Run Anywhere)
Không giống như nhiều ngôn ngữ lập trình khác như C và C++, khi Java được biên dịch, nó không được biên dịch sang mã máy cụ thể, mà thay vào đó là mã bytecode chạy trên máy ảo Java (JVM) Điều này đồng nghĩa với việc bất cứ thiết bị nào có cài đặt JVM sẽ có thể thực thi được các chương trình Java
Trang 21Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Hình 2 3: Quá trình chạy một chương trình Java (Nguồn: Topdev)
Java là ngôn ngữ lập trình hướng đối tượng
An toàn và bảo mật
Tính an toàn
- Java yêu cầu chặt chẽ về kiểu dữ liệu, dữ liệu phải được khai báo tường minh
- Không sử dụng con trỏ và các phép toán với con trỏ
- Java kiểm soát chặt chẽ việc truy cập đến mảng, chuỗi Không cho phép sử dụng các kỹ thuật tràn Do đó các truy cập sẽ không vượt quá kích thước của mảng, chuỗi
- Quá trình cấp phát và giải phóng bộ nhớ được thực hiện tự động (garbage collection)
Tính bảo mật
- Java không hỗ trợ con trỏ tường minh
- Hỗ trợ các access modifiers: private, public, protected, default
- Các chương trình Java chạy bên trong một máy ảo sandbox (Vituarl Machine Sandbox)
- Bytecode Verifier: Nó kiểm tra các đoạn mã để tìm mã bất hợp pháp có thể vi phạm quyền truy cập vào các đối tượng
- Ngoài ra, Java cũng cung cấp các thư viện cho việc bảo mật
Đa luồng là việc xử lý đồng thời nhiều tác vụ trong một chương trình Lợi ích của đa luồng:
- Sử dụng tối đa tài nguyên
- Cải thiện hiệu năng cho các ứng dụng phức tạp
Phân tán
Lập trình phân tán hữu dụng khi phát triển một dự án lớn Một chương trình có thể được chia nhỏ thành nhiều phần, và các phần này được lưu trữ trên các máy tính khác nhau Chương trình chạy trên máy tính này có thể giao tiếp với chương trình chạy trên máy tính khác RMI
Trang 22Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng (Remote Method Invocation) và EJB (Enterprise JavaBeans) trong Java hỗ trợ lập trình phân tán
2.2.2 Kỹ thuật lập trình hướng đối tượng
Java là một ngôn ngữ hỗ trợ lập trình hướng đối tượng, vậy lập trình hướng đối tượng là gì? Lập trình hướng đối tượng (OOP) là một phương pháp lập trình dựa trên khái niệm về lớp và đối tượng OOP tập trung vào các đối tượng hơn là chức năng hoặc logic chương trình
Tính đa hình (Polymorphism)
Đa hình được hiểu là cùng một vật nhưng trong nhiều hình thức (form) khác nhau Trong Java, chúng ta sử dụng nạp chồng phương thức (method overloading) và ghi đè phương thức (method overriding) để đạt được tính đa hình:
- Nạp chồng (overloading): Đây là khả năng cho phép một lớp có nhiều phương thức cùng tên nhưng với các tham số khác nhau về loại cũng như về số lượng Khi được gọi, dựa vào tham
số truyền vào, phương thức tương ứng sẽ được thực hiện
- Ghi đè (overriding): Là việc định nghĩa lại một phương thức ở lớp cha tại lớp con Khi đối tượng lớp con gọi phương thức, nếu lớp con không overriding phương thức thì phương thức của lớp cha sẽ được gọi, ngược lại nếu có, phương thức của lớp con được gọi
Tính trừu tượng (Abstraction)
Tính trừu tượng ẩn các chi tiết trình triển khai và chỉ hiển thị tính năng tới người dùng Tính trừu tượng cho phép bạn loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình
Tính trừu tượng giúp bạn tập trung vào những cốt lõi cần thiết của đối tượng thay vì quan tâm đến cách nó thực hiện
Trong Java, chúng ta sử dụng abstract class và interface để có tính trừu tượng
2.3 Webservice
2.3.1 Giới thiệu về Webservice
Theo định nghĩa của W3C (World Wide Web Consortium), dịch vụ Web là một hệ thống phần mềm được thiết kế để hỗ trợ khả năng tương tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng internet, giao diện chung và sự gắn kết của nó được mô tả bằng XML Dịch vụ Web là tài nguyên phần mềm có thể xác định bằng địa chỉ URL, thực hiện các chức năng và đưa ra các thông tin người dùng yêu cầu Một dịch vụ Web được tạo nên bằng
Trang 23Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng cách lấy các chức năng và đóng gói chúng sao cho các ứng dụng khác dễ dàng nhìn thấy và có thể truy cập đến những dịch vụ mà nó thực hiện, đồng thời có thể yêu cầu thông tin từ dịch vụ Web khác Nó bao gồm các mô đun độc lập cho hoạt động của khách hàng và doanh nghiệp
và bản thân nó được thực thi trên server
Trước hết có thể nói rằng ứng dụng cơ bản của dịch vụ Web là tích hợp các hệ thống và là một trong những hoạt động chính khi phát triển hệ thống Trong thời gian gần đây, việc phát triển mạnh mẽ của thương mại điện tử và B2B cũng đòi hỏi hệ thống phải có khả năng tích hợp với cơ sở dữ liệu của các đối tác kinh doanh (nghĩa là tương tác với hệ thống bên ngoài bên cạnh tương tác với các thành phần bên trong của hệ thống trong doanh nghiệp) Trong đồ
án này, tôi sử dụng Webservice để tích hợp Android app với server chứa database Android app sẽ yêu cầu các thông tin về bài hát như: nhạc sĩ, ca sĩ, file mp3,… từ server Nhiệm vụ của server là lấy các thông tin này trong database và trả về cho Android app dưới dạng JSON
Hình 2 4: Minh họa Webservice (Nguồn: atpsolution.vn) 2.3.2 RESTful API
Theo Redhat, RESTful API là một giao diện lập trình ứng dụng (API hay web API) tuân theo các ràng buộc của kiến trúc REST cho phép client tương tác với web services REST là viết tắt của Representational State Transfer được tạo bởi Roy Fielding
Các đặc điểm của RESTful API:
- Sử dụng các HTTP method như: GET, POST, DELETE, PUT để truy xuất, thêm, xóa, sửa
dữ liệu
- Restful có thể trả về dữ liệu dạng: JSON, XML, HTML
- Thông điệp (message) của Restful được vận chuyển bằng phương thức HTTP
- Restful sử dụng URL để yêu cầu tài nguyên hay gọi dịch vụ
2.3.3 Định dạng JSON
JSON (viết tắt của JavaScript Object Notation) là 1 định dạng nhẹ để lưu trữ và vận chuyển
dữ liệu JSON thường được sử dụng khi dữ liệu được gửi từ server đến client JSON là tự mô
tả (self-describing) nên dễ dàng để hiểu
Trang 24Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Hình 2 5: Ví dụ về 1 file JSON (Nguồn: ResearchGate) 2.3.4 Spring Boot
Spring Boot là một framework giúp bạn tạo các ứng dụng web dễ dàng và nhanh chóng với cấu hình tối thiểu
Trước kia khi sử dụng Spring framework bạn phải làm đủ thứ cấu hình để tạo một ứng dụng web đơn giản Nhưng với Spring Boot việc tạo một ứng dụng web trở nên nhanh chóng Các đặc điểm của Spring Boot:
- Tạo các ứng dụng độc lập
- Các web server như: Tomcat, Jetty hay Undertow được nhúng trực tiếp vào project
- Không tạo mã và không cần xml để cấu hình
- Viết ít mã hơn
Hình 2 6: Minh họa Spring Boot (Nguồn: Javatpoint)
2.3.5 Hệ quản trị cơ sở dữ liệu MySQL
Cơ sở dữ liệu quan hệ là gì?
Được đề xuất bởi Codd năm 1970, mô hình dữ liệu quan hệ được phát triển dựa trên khái
niệm về quan hệ toán học Liên quan đến lý thuyết tập hợp và logic mệnh đề
Cơ sở dữ liệu (csdl) quan hệ được biểu diễn dưới dạng các bảng (các quan hệ) Trong csdl quan hệ, mỗi hàng trong một bảng là một bản ghi với một ID duy nhất còn gọi là khóa chính
Trang 25Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng Các cột trong bảng là các thuộc tính của dữ liệu, mỗi bản ghi chứa giá trị cho mỗi thuộc tính Các bảng có quan hệ với nhau qua khóa ngoại
Hệ quản trị cơ sở dữ liệu là gì?
Hệ quản trị csdl (DBMS – Database Management System) là một hệ thống phần mềm cho phép tạo lập và quản lý csdl
MySQL là một hệ quản trị cơ sở dữ liệu quan hệ, nghĩa là nó cho phép tạo và quản lý cơ sở
dữ liệu quan hệ
2.3.6 JPA (Java Persistence API)
JPA (viết tắt của Java Persistence API), là một đặc tả Java cho việc ánh xạ giữa các đối tượng Java với cơ sở dữ liệu quan hệ sử dụng công nghệ phổ biến là ORM (Object Relational Mapping)
Hình 2 7: Cơ chế của JPA (Nguồn: Thistechnologylife.com) Vậy ORM là gì? ORM là viết tắt của Object Relational Mapping, công nghệ cho phép chuyển đổi từ các object trong ngôn ngữ hướng đối tượng sang database quan hệ và ngược lại ORM
có khả năng xử lý các thao tác của nhiều loại cơ sở dữ liệu khác nhau một cách dễ dàng mà không quan tâm đến loại database sử dụng (SQL Server, MySQL, PostgreSQL, …) hay loại thao tác sử dụng (INSERT, UPDATE, DELETE, SELECT, …)
JPA chỉ là một API định nghĩa các đặc tả cần thiết và không có code hiện thực từ những đặc
tả đó Nó chỉ chứa những hướng dẫn để hiện thực ORM Do đó cần phải có một cài đặt ORM
để hoạt động và persist các đối tượng Java Các ORM Framework có thể sử dụng cho JPA như: Hibernate, iBatis, Eclipse Link, OpenJPA,… Trong đồ án này, tôi sử dụng Hibernate để mapping Java object với database
Tại sao nên dùng JPA?
- Viết ít code hơn
Trang 26Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
}
Với JDBC code bị lặp lại nhiều và dễ gây nhầm lẫn khi code
- Với Hibernate:
@Entity
@Table(name = "user")
public class UserModel {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger userNo;
@NotEmpty
@Column(name = "lastName")
private String email;
public BigInteger getUserNo() {
public void setUserNo(BigInteger userNo) {
public String getLastName() {
public void setLastName(String lastName) {
Trang 27Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Hình 2 8: Vòng đời của một Activity (Nguồn: developer.android.com)
Trang 28Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Hình 2 9: Mối quan hệ giữa Activity và Fragment (Nguồn: viblo.asia)
2.4.3 Các thư viện sử dụng
- Retrofit: là một thư viện dùng để gọi API từ server
- Gson: Thư viện Java cho phép chuyển đổi một đối tượng Java sang JSON hoặc ngược lại
- Glide: Thư viện hỗ trợ load ảnh từ url trên Android
2.4.4 ExoPlayer
ExoPlayer là thư viện phát lại phương tiện mã nguồn mở dành cho Android do Google viết bằng Java có nhiều lợi thế hơn MediaPlayer như tối ưu, linh hoạt và ổn định Các tính năng của Exoplayer là phát video và âm thanh, xáo trộn, lặp lại, phụ đề, danh sách phát, lưu trữ / tải xuống, phát quảng cáo, phát trực tiếp, nghệ thuật album, ngoại tuyến, tiện ích mở rộng và hơn thế nữa
2.4.5 Intent
Intent như là một thông điệp cho phép các thành phần của Android yêu cầu chức năng từ các thành phần khác Ví dụ như từ 1 Activity có thể gọi 1 Activity, Service hoặc BroadcastReceiver để thực hiện hành động
Trang 29Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Có 2 loại Intent là explicit intent (intent tường minh) và implicit intent (intent không tương minh)
- Explicit intent: Xác định rõ, cụ thể thành phần nào sẽ được gọi, sẽ thực hiện hành động Được sử dụng khi ta biết ta cần gọi chính xác thành phần nào
startActivity(new Intent(MainActivity.this, DestinationActivity.class));
- Implicit intent: Chỉ rõ hành động sẽ được thực hiện và dữ liệu cho hành động nhưng không chỉ ra thành phần nào sẽ thực hiện hành động Khi một implicit intent được gửi, hệ thống Android sẽ tìm tất cả các thành phần có thể thực hiện hành động được định nghĩa trong implicit intent Nếu chỉ có 1 thành phần có thể thực hiện, hệ thống Android sẽ start thành phần đó ngay lập tức Nếu có nhiều hơn 1 thành phần, thì hệ thống sẽ hiện hộp thoại để người dùng lựa chọn thành phần thực hiện hành động
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://youtube.com"));
startActivity(intent);
2.4.6 Service
Service là một thành phần của ứng dụng Android mà có thể chạy lâu dài trong background
Nó không có giao diện người dùng Service có thể tiếp tục chạy dù người dùng chuyển sang ứng dụng khác
Có 3 loại Service:
- Foreground Service: Foreground Service thực hiện một số hoạt động mà có thể thông báo
tới người dùng Ví dụ một audio app sẽ sử dụng foreground service để chơi audio Foreground Service phải hiển thị một Notification Foreground Service tiếp tục chạy ngay cả khi người dùng không tương tác với ứng dụng
- Background Service: Background Service thực hiện các hoạt động mà không thông báo
cho người dùng biết (người dùng không thể nhận biết là dịch vụ đang chạy như foreground service) Ví dụ nếu một ứng dụng sử dụng service để dọn dẹp bộ nhớ, đó thường là background service
- Bound Service: Một Service được gọi là Bound Service khi có một thành phần ứng dụng
(application component) gắn tới nó bằng việc gọi phương thức bindService() Một Bound Service cung cấp giao diện Client-Server, cho phép các components tương tác với Service (gửi request, nhận kết quả) thậm chí giao tiếp giữa các tiến trình (IPC) Bound Service chỉ chạy khi một application component được bind tới nó Nhiều components có thể cùng bind tới
1 Service ở cùng 1 thời điểm nhưng khi tất cả các component này unbound thì Service sẽ bị destroy
Trang 30Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Hình 2 10: Vòng đời của Service (Nguồn: developer.android.com)
2.4.7 RecyclerView
RecyclerView là một ViewGroup dùng để hiển thị danh sách các item có thể cuộn RecyclerView là một sự thay thế hoàn hảo cho ListView
Ưu điểm của RecyclerView so với ListView:
- Hỗ trợ tạo animation khi thêm, xóa item trong danh sách
- Hỗ trợ cuộn theo chiều ngang
- Smooth scroller: cuộn danh sách mượt mà hơn
- Hỗ trợ LayoutManager để tạo nhiều kiểu danh sách: LinearLayout, GridLayout, StaggeredGridLayout
- Sử dụng ViewHolder trong Adapter là bắt buộc trong RecyclerView Việc sử dụng ViewHolder giúp cải thiện hiệu năng khi số lượng item trong danh sách nhiều lên ViewHolder giữ lại các tham chiếu của View, do đó không phải tạo View mới (ý nghĩa của từ Recycler) và không phải gọi hàm findViewById mỗi lần tạo dữ liệu cho 1 position Trong ListView thì mỗi lần tạo dữ liệu cho 1 position của danh sách ta phải gọi hàm findViewById trong phương thức getView() của Adapter
Trang 31Đồ án tốt nghiệp Đại học Chương 2: Các kiến thức, kỹ thuật sử dụng
Hình 2 11: Cơ chế tái sử dụng View của RecyclerView (Nguồn: viblo.asia)