Được chỉnh sửa ngày 07/04/2023.
Chào mừng các bạn đã đến với bài học Android số 5, bài học về Các thành phần cơ bản của một ứng dụng Android. Đây là bài học trong chuỗi bài viết về lập trình ứng dụng Android của Yellow Code Books.
Bài này chúng ta cùng tìm hiểu xem một ứng dụng Android thực chất được hình thành như thế nào, các thành phần chính để tạo nên ứng dụng bao gồm những gì nhé.
Tóm Tắt Quá Trình Tạo Một Ứng Dụng Android
Chúng ta đều đã biết các ứng dụng Android được viết trên ngôn ngữ lập trình Java hoặc Kotlin (mặc dù tới bài này chúng ta vẫn chưa đụng đến đoạn code Java hay Kotlin nào). Có khi bạn còn phải kết hợp cả ngôn ngữ C++ nữa, nhưng bạn đừng quá lo lắng, bạn chỉ cần biết hoặc Java hoặc Kotlin là đủ xây dựng ứng dụng Android rồi.
Sau khi viết ra một ứng dụng hoàn chỉnh bằng ngôn ngữ lập trình thông qua Android Studio, công cụ này sẽ dùng Android SDK để biên dịch mã code đó, kết hợp với vài dữ liệu khác, và đóng gói các resource kèm theo để tạo thành một file cài đặt, đó là file APK (viết tắt của từ Android Package).
Về sau Android có hỗ trợ một định dạng mới để chứa tất cả các thứ được biên dịch trên đây để mang đi “xuất xưởng”, và được gọi với cái tên Android App Bundle (viết tắt là AAB). Tuy nhiên AAB lại không phải là một file cài đặt cuối như APK. Nó chỉ chứa đầy đủ các nội dung cần thiết để rồi khi bạn đưa file này lên Google Play, chính Google Play sẽ quyết định thiết bị cài đặt ứng dụng của bạn cần những gì, nó sẽ tạo ra một APK cuối cùng để có thể cài đặt riêng và phù hợp nhất trên thiết bị đó.
Nếu bạn chọn biên dịch ra APK, thành phẩm cuối cùng bạn có là một file .apk. Nếu bạn chọn biên dịch ra AAB, bạn sẽ nhận được file .aab. File .apk hay .aab này chứa tất cả các thông tin cần thiết để có thể mang đi cài đặt lên các thiết bị khác (chỉ có .apk mới làm được chuyện này thôi), hoặc dùng để xuất bản lên Google Play.
Quá trình tóm tắt để tạo ra một ứng dụng Android như vậy, phần chi tiết hơn thì mình sẽ nói sau khi bạn “lành nghề” hơn với lập trình ứng dụng cho hệ điều hành này.
Vậy ngôn ngữ lập trình, các dữ liệu khác, hay các resource kèm theo được nhắc đến ở trên là gì? Chúng kết hợp lại với nhau như thế nào để Android SDK có thể hiểu và biên dịch ra file .apk hay .aab? Chúng ta sẽ hiểu phần nào ở mục sau đây (còn hiểu sâu hơn thì cần theo dõi tiếp bài sau để tiến hành xây dựng một ứng dụng nhé).
Các Thành Phần Của Một Ứng Dụng
Để dễ hình dung, mình sẽ ví dụ cho bạn thấy rằng việc xây dựng ứng dụng Android cũng giống như việc sản xuất ra một chiếc Ô tô vậy. Ô tô hay ứng dụng đều có những thành phần cơ bản không thể thiếu. Chẳng hạn nhé, ô tô cần phải có động cơ; Ô tô cần phải có bộ khung hay các trang trí khác để tạo thành bộ “giao diện”; Ô tô cần phải có hệ thống điện – điện tử để giải trí hay giám sát; Ô tô cần phải có hệ thống thu phát tín hiệu,… tất cả các thành phần đó tạo thành một thành phẩm ô tô. Một điều lưu ý là thành phẩm ô tô đó có thể có tất cả các thành phần cơ bản, khi đó tính năng của xe sẽ tốt và giá thành thì rất cao. Hoặc cũng có những ô tô chỉ cần một vài thành phần thôi cũng đáp ứng nhu cầu của bộ phận khách hàng nào đó.
Quay lại nói về một ứng dụng, chúng ta cũng có khái niệm các thành phần cơ bản của ứng dụng, cũng có khái niệm ứng dụng có hết tất cả các thành phần, hoặc chỉ cần một hay một vài thành phần là đủ. Tuy nhiên để có thể gọi là một ứng dụng Android thì nó phải có ít nhất một trong các thành phần sau. Chúng ta cùng điểm qua các thành phần đó của ứng dụng.
Activities
Bạn sử dụng Activity để tạo nên một giao diện màn hình. Đây là nơi mà người dùng sẽ nhìn thấy và bắt đầu tương tác với ứng dụng. Mình giả sử bạn đang muốn xây dựng một ứng dụng email, vậy bạn phải suy nghĩ ra các màn hình liên quan cho nó, bạn cần có một màn hình để hiển thị danh sách các email mới nhất. Và cũng cần một màn hình để hiển thị nội dung email. Và một màn hình khác giúp người dùng soạn thảo email mới. Và một màn hình khác…. Và…. Tất cả các “và” như vậy tạo thành một ứng dụng với nhiều màn hình, mỗi màn hình là một Activity. Mỗi Activity như vậy tuy độc lập nhưng lại có thể kết nối với nhau tạo thành một trải nghiệm của người dùng trong ứng dụng email của bạn.
Bạn đã hiểu sơ về khái niệm thành phần đầu tiên của một ứng dụng Android rồi đúng không nào. Chúng ta sẽ được học kỹ hơn về Activity ở bài tiếp theo, học cách làm sao để quản lý chu kỳ sống của một Activity, hay cách thức từ Activity này chuyển qua Activity khác, hay đóng một Activity,…
Services
Khác với Activity được dùng để hiển thị giao diện lên màn hình cho người dùng, Service lại được dùng cho các tác vụ chạy nền, tức là các tác vụ mà người dùng không hề trông thấy. Chẳng hạn như với một ứng dụng nghe nhạc, Activity sẽ hiển thị giao diện các bài nhạc cho người dùng chọn để chơi, còn khi người dùng đã chọn một bài thì thực chất công việc chơi nhạc là của Service. Bằng chứng là khi bạn chuyển qua ứng dụng khác, hay tắt màn hình điện thoại, tuy người dùng không còn nhìn thấy các Activity (các màn hình của ứng dụng) nữa nhưng Service vẫn đang hoạt động ở nền và luôn chơi bản nhạc đó, hay tự chuyển qua bản nhạc khác một cách tự động.
Content Providers
Một Content Providers sẽ lo việc chia sẻ dữ liệu của một ứng dụng. Dù cho ứng dụng của bạn có lưu dữ liệu ở file hệ thống, hay ở cơ sở dữ liệu SQLite, hay ở trên Web, hay bất cứ đâu mà nó có thể truy xuất được. Thì với Content Provider, ứng dụng khác cũng hoàn toàn có thể truy xuất vào dữ liệu của bạn, chỉnh sửa nó (nếu Content Provider cho phép). Một ví dụ điển hình là ứng dụng Quản Lý Danh Bạ của Android, ứng dụng này chứa đựng thông tin số điện thoại và các thông tin khác trên Danh Bạ người dùng, tuy vậy ứng dụng của bạn với khai báo các permission (các quyền cho phép) cần thiết vẫn có thể đọc hay chỉnh sửa thông tin đó.
Broadcast Receivers
Một Broadcast Receivers là một thành phần có khả năng thu nhận các thông báo của hệ thống. Bạn hãy tưởng tượng Broadcast Receiver giống như một cột ăng-ten thu sóng, và nguồn phát sóng chính là từ hệ thống. Hệ thống sẽ phát các tín hiệu như là, màn hình tắt, pin yếu, hay là vừa chụp một hình ảnh,… Tùy vào bạn dựng lên cột ăng-ten muốn lắng nghe loại sóng nào. Broadcast Receiver cũng giống như Service ở chỗ không hiển thị giao diện cho người dùng. Nhưng Broadcast Receiver có thể tạo một thông báo trên thanh Notification của thiết bị.
Một khía cạnh độc đáo khác của Android là việc cho phép một ứng dụng nào đó có thể khởi động một thành phần của một ứng dụng nào đó khác. Một minh chứng cho khía cạnh này là, ví dụ bạn đang xây dựng một ứng dụng mà trong đó có chức năng chụp ảnh dựa trên máy ảnh của thiết bị, thì thay vì bạn phải mày mò xây dựng chức năng này, ứng dụng của bạn hoàn toàn có thể gọi một dứng dụng có sẵn chức năng chụp ảnh để giúp bạn làm việc đó một cách dễ dàng nhanh chóng, bằng cách gọi thẳng đến Activity của ứng dụng chụp ảnh đó, ứng dụng chụp ảnh sẽ điều khiển máy ảnh, chụp ảnh và lưu ảnh lại, ứng dụng của bạn chỉ cần lấy ảnh vừa lưu lại mang ra sử dụng, điều này diễn ra một cách nhịp nhàng và người dùng hoàn toàn bị đánh lừa rằng chỉ có ứng dụng của bạn đang làm tất cả mọi chuyện.
Kích Hoạt Các Thành Phần
Chúng ta vừa dạo qua các thành phần giúp tạo nên một ứng dụng Android ở trên. Giờ chúng ta nói đến việc làm sao để kích hoạt, hay làm cách nào để các thành phần đó hoạt động.
Vậy thì bạn nên nhớ là (hoặc ghi chú lại sau này mình nhắc lại sẽ nhớ rõ), ba trong bốn thành phần kể trên bao gồm Activity, Service và Broadcast Receiver được kích hoạt bởi một thông điệp bất đồng bộ (asynchronous message) có tên là Intent.
Trong một ứng dụng thì Intent như là thành phần trung gian kết dính các thành phần khác với nhau, chẳng hạn từ một Activity này bạn có thể kích hoạt một Activity khác, hoặc kích hoạt một Service hoạt động. Intent cũng giúp làm trung gian để từ một ứng dụng có thể kích hoạt thành phần của ứng dụng khác, như ví dụ về việc mở một ứng dụng có chức năng chụp ảnh trên đây.
Về phía phân loại Intent thì có hai dạng là tường minh và ngầm hiểu. Vậy thôi, bạn sẽ được biết cách sử dụng Intent một cách cụ thể ở các bài học sau.
File Manifest
Wow, chúng ta đã xem qua một ứng dụng Android có các thành phần gì, chúng ta cũng đã xem qua cách để kích hoạt các thành phần đó. Điều quan trọng cuối cùng trong một ứng dụng Android, đó là để sử dụng các thành phần mà chúng ta mong muốn, trước khi kích hoạt chúng, chúng ta cần phải “khai báo” chúng. Tất cả các khai báo đó đều được để trong một file, đó là file Manifest.
Ngoài việc giúp khai báo các thành phần sẽ được sử dụng trong ứng dụng, file Manifest còn là nơi bạn khai báo các mục đích khác như:
- Đăng ký các user permission, tạm hiểu là các quyền hạn mà ứng dụng xin phép người dùng để sử dụng các tính năng của hệ thống, như là quyền được truy cập internet, được đọc danh bạ (contacts), được ghi file ra thẻ nhớ ngoài,…
- Chỉ định Minimum Required SDK, là chỉ định thông số hệ điều hành thấp nhất của Android mà ứng dụng của bạn hỗ trợ, ngoài việc khai báo giá trị này trong file Manifest, chúng ta còn có thể khai báo trong file build.gradle mà mình sẽ nói ở các bài sau.
- Chỉ định các tính năng phần cứng và phần mềm mà ứng dụng của ta muốn sử dụng đến, như camera, bluetooth, hay ngay cả tính năng multitouch.
- Khai báo các thư viện bên ngoài (bên ngoài ở đây có thể hiểu là các thư viện không có sẵn trong các API Framework của Android) mà ứng dụng của bạn có sử dụng đến, như thư viện Google Maps, Google Play,… Và phần này cũng có thể được khai báo trong file build.gradle mà chúng ta cũng sẽ tìm hiểu sau.
Các Resource
Một ứng dụng Android không thể nào thiếu các resource. Bạn có thể hiểu các thành phần được nói trên đây là các source code, nó chứa đựng các logic cho ứng dụng được dựng lên bởi một ngôn ngữ lập trình nào đó. File Manifest như là một file cấu hình của ứng dụng. Thì các resource chính là các loại file còn lại bổ trợ thêm cho ứng dụng của bạn, chúng bao gồm các file hình ảnh, âm thanh, video, các file text, màu sắc,… hay thậm chí một file giao diện XML. Bạn sẽ có cơ hội được tìm hiểu sâu hơn về các resource bên trong một ứng dụng Android, và cách thức làm việc với file giao diện XML sau này.
Kết Luận
Mình nghĩ bài học thứ 5 nên kết thúc ở đây, với bài học này bạn có một cái nhìn tổng quát về cấu tạo của một ứng dụng. Bạn sẽ học cách sử dụng từng thành được nói ở trên, cách sử dụng Intent để kích hoạt các thành phần này, hay cách sử dụng file Manifest cũng như file build.gradle để khai báo các nhu cầu cần thiết cho ứng dụng của bạn ở các bài tiếp theo.
Cảm ơn bạn đã đọc các bài viết của Yellow Code Books. Bạn hãy ủng hộ blog bằng cách:
– Đánh giá 5 sao ở mỗi bài viết nếu thấy thích.
– Comment bên dưới mỗi bài viết nếu có thắc mắc.
– Để lại địa chỉ email của bạn ở thanh bên phải để nhận được thông báo sớm nhất khi có bài viết mới.
– Chia sẻ các bài viết của Yellow Code Books đến nhiều người khác.
– Ủng hộ blog theo hướng dẫn ở thanh bên phải để blog ngày càng phát triển hơn.
Bài Kế Tiếp
Bạn sẽ được biết ứng dụng TourNote là gì. Bạn sẽ xem qua các cách hiệu quả nhất để debug một ứng dụng.
Reblogged this on gioilaptrinh.
Bài viết hay quá. Cảm ơn tác giả 😉
Bài viết rất hay ạ! Hi vọng tác giả sẽ ra thêm nhiều bài viết bổ ích ntn.
Bạn làm khóa học online đi, cách viết của bạn cực kì dễ hiểu.