Chào mừng bạn quay trở lại với series “Android Developer Roadmap“! Sau khi đã cùng nhau tìm hiểu về thiết lập môi trường phát triển, lựa chọn ngôn ngữ phù hợp (Kotlin/Java), làm quen với cú pháp Kotlin, hiểu về Lập trình Hướng đối tượng (OOP), và cả Cấu trúc Dữ liệu & Giải thuật cơ bản, cùng với việc làm quen với Gradle, đã đến lúc chúng ta bắt tay vào công việc thú vị nhất: tạo ra ứng dụng Android đầu tiên của chính mình!
Bước đầu tiên này, thường là tạo một ứng dụng “Hello World”, nghe có vẻ đơn giản nhưng lại cực kỳ quan trọng. Nó giúp bạn làm quen với môi trường Android Studio, hiểu cách các thành phần cơ bản của một ứng dụng Android hoạt động và kết nối với nhau. Chúng ta sẽ đi từng bước, chi tiết và dễ hiểu nhất.
Mục lục
1. Yêu cầu Trước khi Bắt đầu
Để theo kịp bài viết này, bạn nên đảm bảo đã hoàn thành các bước sau:
- Đã cài đặt thành công Android Studio và thiết lập SDK Android cần thiết. Nếu chưa, hãy xem lại bài viết “Lộ trình Học Lập trình viên Android 2025: Thiết lập Môi trường Phát triển Android – Hướng dẫn Chi tiết cho Người mới bắt đầu“.
- Có kiến thức cơ bản về ngôn ngữ lập trình bạn chọn (Kotlin hoặc Java). Nếu chọn Kotlin, bài viết “Học Kotlin cho Android: Cú pháp và Khái niệm Cốt lõi Bạn Cần Nắm Vững” sẽ rất hữu ích.
- Hiểu về các khái niệm cơ bản của Lập trình Hướng đối tượng (OOP), vì Android Framework được xây dựng dựa trên các nguyên tắc OOP.
Nếu bạn đã sẵn sàng, hãy mở Android Studio lên và bắt đầu hành trình của mình!
2. Tạo Dự án Mới trong Android Studio
Đây là bước đầu tiên để “khai sinh” ứng dụng của bạn.
- Mở Android Studio: Sau khi khởi động, bạn sẽ thấy màn hình chào mừng.
- Chọn “Create New Project”: Nhấp vào tùy chọn này.
- Chọn Project Template (Mẫu Dự án): Android Studio cung cấp nhiều mẫu để giúp bạn bắt đầu nhanh hơn. Với ứng dụng đầu tiên, chúng ta sẽ chọn mẫu đơn giản nhất: “Empty Activity”. Mẫu này chỉ tạo ra một màn hình (Activity) và một layout cơ bản. Nhấp “Next”.
- Cấu hình Dự án của Bạn: Màn hình tiếp theo yêu cầu bạn cung cấp thông tin chi tiết cho dự án:
- Name: Tên ứng dụng của bạn, sẽ hiển thị cho người dùng. Hãy đặt là “My First App” hoặc “Hello World App”.
- Package name: Một tên duy nhất để xác định ứng dụng của bạn trên Google Play Store (ví dụ:
com.yourcompany.helloworldapp
). Theo quy ước, nó thường bắt đầu bằng tên miền của công ty hoặc cá nhân bạn viết ngược (ví dụ:vn.evotek.helloworld
). - Save location: Nơi dự án sẽ được lưu trữ trên máy tính của bạn.
- Language: Chọn ngôn ngữ lập trình bạn muốn sử dụng: Kotlin hoặc Java. Chúng ta sẽ sử dụng Kotlin trong ví dụ này, theo khuyến nghị của Google.
- Minimum SDK: Phiên bản Android thấp nhất mà ứng dụng của bạn có thể chạy được. Chọn SDK thấp hơn sẽ giúp ứng dụng chạy trên nhiều thiết bị cũ hơn, nhưng bạn có thể không sử dụng được các tính năng mới nhất của Android. Android Studio sẽ hiển thị tỷ lệ phần trăm thiết bị đang chạy phiên bản đó hoặc cao hơn. Chọn một phiên bản phù hợp, ví dụ API 21 (Android 5.0 Lollipop) là khá phổ biến.
- Hoàn tất (Finish): Sau khi điền đầy đủ thông tin, nhấp “Finish”.
Android Studio sẽ bắt đầu tạo dự án của bạn. Quá trình này có thể mất một chút thời gian vì Gradle (hệ thống xây dựng dự án của Android) sẽ tải xuống các dependency cần thiết và cấu hình dự án. Hãy kiên nhẫn chờ đợi cho đến khi quá trình này hoàn tất và bạn thấy cấu trúc dự án trong cửa sổ Project.
3. Khám phá Cấu trúc Dự án Cơ bản
Khi dự án được tạo xong, bạn sẽ thấy cây cấu trúc thư mục ở cửa sổ “Project” (thường ở bên trái). Hãy chắc chắn bạn đang xem ở chế độ xem “Android”, vì nó tổ chức các tệp theo module và loại tệp phổ biến trong phát triển Android, dễ hiểu hơn chế độ xem “Project Files”.
Các thư mục quan trọng nhất bạn cần biết lúc này bao gồm:
app
: Đây là module chính chứa mã nguồn, tài nguyên và tệp cấu hình cho ứng dụng của bạn. Hầu hết công việc của bạn sẽ nằm ở đây.Gradle Scripts
: Chứa các tệp cấu hình cho Gradle. Bạn sẽ thấy các tệp nhưbuild.gradle (Project: yourprojectname)
vàbuild.gradle (Module: app)
. Các tệp này định cấu hình cách ứng dụng được xây dựng, các thư viện được sử dụng, v.v. Hiện tại, bạn không cần chỉnh sửa gì ở đây.
Đi sâu vào thư mục app
, bạn sẽ thấy các thư mục con quan trọng khác:
manifests
: Chứa tệpAndroidManifest.xml
. Đây là “thẻ căn cước” của ứng dụng của bạn. Nó khai báo các thành phần của ứng dụng (Activities, Services, Broadcast Receivers, Content Providers), các quyền mà ứng dụng yêu cầu (truy cập Internet, danh bạ, v.v.), phiên bản SDK hỗ trợ, và nhiều thông tin quan trọng khác.java
: Chứa mã nguồn Kotlin (hoặc Java) của bạn. Trong thư mục này, bạn sẽ thấy các package. Package chính thường chứa các Activity, class logic nghiệp vụ của bạn. Các package khác có thể dành cho unit tests và instrumental tests.res
(resources): Chứa tất cả các tài nguyên không phải code của ứng dụng, được tổ chức trong các thư mục con:drawable
: Chứa các hình ảnh, biểu tượng (icons) và các tài nguyên đồ họa khác.layout
: Chứa các tệp XML định nghĩa giao diện người dùng (UI) cho các màn hình (Activities, Fragments) của bạn.mipmap
: Thường chứa các biểu tượng ứng dụng (launcher icons) ở các độ phân giải khác nhau.values
: Chứa các tệp XML định nghĩa các giá trị như chuỗi ký tự (strings.xml
), màu sắc (colors.xml
), kích thước (dimens.xml
), kiểu dáng và theme (styles.xml
hoặcthemes.xml
). Việc định nghĩa chuỗi ký tự ở đây giúp dễ dàng dịch ứng dụng sang nhiều ngôn ngữ.
Hiểu được cấu trúc này là bước đầu tiên để điều hướng trong một dự án Android.
4. Hiểu về Các Thành phần Chính: Activity và Layout
Một ứng dụng Android được tạo thành từ nhiều thành phần, nhưng hai thành phần cơ bản và quan trọng nhất bạn sẽ làm việc ngay từ đầu là Activity và Layout.
4.1. Activity (Trong thư mục java
)
Một Activity là một điểm tương tác duy nhất với người dùng. Nó đại diện cho một màn hình hoặc một phần giao diện người dùng mà người dùng có thể tương tác (ví dụ: màn hình đăng nhập, màn hình danh sách sản phẩm, màn hình cài đặt). Ứng dụng “Hello World” của chúng ta chỉ có một Activity chính.
Khi bạn tạo dự án “Empty Activity”, Android Studio sẽ tạo ra một tệp Kotlin (hoặc Java) mặc định, thường có tên là MainActivity.kt
(hoặc MainActivity.java
) trong package chính của bạn.
Mở tệp này ra, bạn sẽ thấy một class kế thừa từ AppCompatActivity
:
package com.yourcompany.helloworldapp // Tên package của bạn
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() { // Class MainActivity kế thừa từ AppCompatActivity
override fun onCreate(savedInstanceState: Bundle?) { // Phương thức onCreate
super.onCreate(savedInstanceState) // Gọi phương thức của lớp cha
setContentView(R.layout.activity_main) // Gán layout cho Activity này
}
}
Đây là Activity cơ bản nhất. Phương thức quan trọng nhất ở đây là onCreate()
. Đây là phương thức được gọi khi Activity được tạo lần đầu tiên. Trong phương thức này, chúng ta thường thực hiện các tác vụ khởi tạo như:
- Gọi
super.onCreate()
: Luôn luôn gọi phương thức của lớp cha trước. - Thiết lập giao diện người dùng bằng cách gọi
setContentView(R.layout.activity_main)
. Dòng này nói với Activity rằng hãy sử dụng tệp layoutactivity_main.xml
(nằm trong thư mụcres/layout
) để hiển thị giao diện. Ký hiệuR
là một lớp được Android tạo tự động, chứa các ID của tất cả tài nguyên trong dự án của bạn.R.layout.activity_main
tham chiếu đến tệp layout có tênactivity_main
.
Các Activity có một vòng đời (lifecycle) với nhiều phương thức khác như onStart()
, onResume()
, onPause()
, onStop()
, onDestroy()
. Chúng ta sẽ tìm hiểu sâu hơn về vòng đời Activity trong các bài viết sau của roadmap.
4.2. Layout (Trong thư mục res/layout
)
Layout định nghĩa cấu trúc giao diện người dùng trên màn hình. Chúng được viết bằng XML. Khi bạn tạo dự án “Empty Activity”, Android Studio cũng tạo ra một tệp layout mặc định, thường là activity_main.xml
.
Mở tệp này ra, bạn sẽ thấy cấu trúc XML. Giao diện người dùng trong Android được xây dựng từ một cây phân cấp các đối tượng View
và ViewGroup
:
- View: Là các phần tử UI nhỏ nhất mà người dùng có thể nhìn thấy và tương tác (ví dụ:
TextView
hiển thị văn bản,Button
,ImageView
hiển thị hình ảnh,EditText
cho phép nhập liệu). - ViewGroup: Là các container tàng hình dùng để sắp xếp và tổ chức các
View
vàViewGroup
con khác (ví dụ:LinearLayout
sắp xếp các View theo chiều dọc hoặc ngang,ConstraintLayout
cho phép định vị View theo quan hệ giữa chúng,FrameLayout
xếp chồng các View lên nhau).
Tệp activity_main.xml
ban đầu có thể trông như thế này (nếu bạn chọn ConstraintLayout là root layout):
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toTopOf="parent" // Lưu ý: Đây là giá trị ví dụ,
app:layout_constraintLeft_toLeftOf="parent" // ConstraintLayout có thể phức tạp hơn
app:layout_constraintRight_toRightOf="parent"// khi thiết kế.
app:layout_constraintTop_toBottomOf="parent" // Thường sẽ căn giữa mặc định.
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Trong XML này:
- Phần tử gốc là
<androidx.constraintlayout.widget.ConstraintLayout>
, một loạiViewGroup
dùng để sắp xếp các phần tử con. Các thuộc tínhandroid:layout_width="match_parent"
vàandroid:layout_height="match_parent"
nghĩa là layout này sẽ chiếm toàn bộ chiều rộng và chiều cao của màn hình. - Bên trong
ConstraintLayout
có một phần tử<TextView>
, một loạiView
dùng để hiển thị văn bản. - Thuộc tính
android:text="Hello World!"
là nội dung văn bản sẽ hiển thị. - Các thuộc tính bắt đầu bằng
app:layout_constraint...
là các thuộc tính đặc trưng củaConstraintLayout
để xác định vị trí củaTextView
.
5. Thực hiện Hiển thị “Hello World”
May mắn thay, khi bạn tạo dự án “Empty Activity”, Android Studio đã tự động thêm một TextView
với nội dung “Hello World!” vào layout mặc định. Dòng setContentView(R.layout.activity_main)
trong MainActivity.kt
đã liên kết Activity này với layout đó.
Vì vậy, về cơ bản, ứng dụng “Hello World” của chúng ta đã sẵn sàng để chạy!
Tuy nhiên, để làm quen hơn với việc chỉnh sửa layout, chúng ta có thể thay đổi nội dung của TextView
hoặc thêm một ID cho nó.
Mở res/layout/activity_main.xml
và tìm thẻ <TextView>
. Thêm thuộc tính android:id
và thay đổi nội dung android:text
:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_message" // Thêm ID cho TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chào mừng đến với Thế giới Android!" // Thay đổi nội dung văn bản
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textSize="24sp" // Thêm kích thước chữ
android:textColor="@android:color/black" // Thêm màu chữ
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Trong mã XML trên:
android:id="@+id/text_message"
: Gán một ID duy nhất choTextView
này. Ký hiệu@+id/
nghĩa là chúng ta đang định nghĩa một ID mới có tên làtext_message
. Bạn có thể sử dụng ID này trong mã Kotlin/Java để tham chiếu đếnTextView
này.android:text="Chào mừng đến với Thế giới Android!"
: Đổi nội dung văn bản.android:textSize="24sp"
: Đặt kích thước chữ là 24 scale-independent pixels (sp). SP là đơn vị được khuyến nghị cho văn bản trên Android vì nó tỉ lệ với cài đặt font chữ của người dùng.android:textColor="@android:color/black"
: Đặt màu chữ là màu đen có sẵn trong hệ thống Android.
Với những thay đổi này, ứng dụng của bạn giờ đây sẽ hiển thị thông điệp mới.
6. Chạy Ứng dụng của Bạn
Đây là khoảnh khắc hồi hộp nhất! Đã đến lúc xem thành quả.
- Chọn Thiết bị Mục tiêu: Trên thanh công cụ của Android Studio (thường ở phía trên), bạn sẽ thấy một dropdown menu hiển thị thiết bị đang chạy (hoặc “No Device”).
- Nếu bạn có thiết bị vật lý: Hãy cắm điện thoại hoặc máy tính bảng Android vào máy tính bằng cáp USB và đảm bảo bạn đã bật “Developer options” và “USB debugging” trên thiết bị. Thiết bị của bạn sẽ xuất hiện trong danh sách.
- Nếu bạn không có thiết bị vật lý: Bạn cần tạo một trình giả lập Android (AVD – Android Virtual Device). Nếu bạn đã làm theo bài viết thiết lập môi trường, bạn có thể đã tạo một AVD rồi. Chọn AVD của bạn từ danh sách. Nếu chưa có, bạn có thể tạo mới bằng cách vào Tools > Device Manager (hoặc AVD Manager trong các phiên bản cũ hơn) và làm theo hướng dẫn để tạo một thiết bị ảo mới.
- Nhấp vào Nút Run: Sau khi chọn thiết bị mục tiêu, nhấp vào biểu tượng mũi tên màu xanh lá cây (Run ‘app’) trên thanh công cụ.
Android Studio sẽ bắt đầu quá trình xây dựng ứng dụng của bạn (Gradle build). Bạn có thể theo dõi tiến trình ở cửa sổ “Build” (thường ở phía dưới). Sau khi xây dựng thành công, Android Studio sẽ cài đặt ứng dụng lên thiết bị bạn đã chọn và chạy nó.
Nếu mọi thứ diễn ra suôn sẻ, bạn sẽ thấy ứng dụng của mình hiển thị trên màn hình giả lập hoặc thiết bị vật lý, với dòng chữ “Chào mừng đến với Thế giới Android!” (hoặc “Hello World!” nếu bạn không thay đổi).
7. Khắc phục Sự cố Thường gặp
Đừng nản lòng nếu ứng dụng của bạn không chạy ngay lần đầu tiên. Đây là một vài vấn đề phổ biến và cách khắc phục:
- Lỗi Build (Gradle): Cửa sổ “Build” hoặc “Sync” ở dưới cùng của Android Studio sẽ hiển thị thông báo lỗi. Đọc kỹ thông báo lỗi để hiểu vấn đề. Có thể do lỗi cú pháp trong code, thiếu dependency (liên quan đến tệp Gradle build), hoặc vấn đề về môi trường. Thử chọn Build > Clean Project và sau đó Build > Rebuild Project. Đôi khi, File > Invalidate Caches / Restart… cũng giải quyết được các vấn đề khó hiểu.
- Ứng dụng Bị Crash (Dừng đột ngột): Nếu ứng dụng cài đặt thành công nhưng bị tắt ngay khi mở hoặc khi thực hiện một hành động nào đó, hãy kiểm tra cửa sổ Logcat (thường ở phía dưới hoặc có thể mở từ View > Tool Windows > Logcat). Logcat hiển thị các thông báo hệ thống và thông báo lỗi từ ứng dụng của bạn. Tìm các dòng có mức độ “Error” hoặc “Fatal” (màu đỏ) gần thời điểm ứng dụng bị crash. Thông báo lỗi (Exception) ở cuối stack trace thường chỉ ra nguyên nhân.
- Thiết bị Không Xuất hiện trong Danh sách: Đảm bảo thiết bị vật lý của bạn đã bật Developer options và USB debugging, và đã cấp quyền cho máy tính của bạn. Đối với AVD, đảm bảo bạn đã tạo AVD đúng cách và tài nguyên máy tính đủ để chạy giả lập.
- Giao diện Không Hiển thị Đúng: Kiểm tra tệp XML layout của bạn. Đảm bảo các View được đặt đúng vị trí và có các thuộc tính layout cần thiết (ví dụ: constraints trong ConstraintLayout, orientation trong LinearLayout). Sử dụng cửa sổ Design của layout editor trong Android Studio có thể giúp bạn trực quan hóa và sửa lỗi layout.
8. Tóm tắt Các Thành phần Chính
Hãy cùng nhìn lại các thành phần cơ bản mà chúng ta đã làm quen trong ứng dụng “Hello World” đầu tiên này qua một bảng tóm tắt:
Thành phần | Vị trí (Thường) | Mô tả | Vai trò trong “Hello World” |
---|---|---|---|
AndroidManifest.xml | app/manifests |
Khai báo các thành phần của ứng dụng, quyền hạn, thông tin cơ bản. | Định nghĩa MainActivity là điểm vào (entry point) của ứng dụng. |
Activity (ví dụ: MainActivity.kt ) |
app/java/your.package.name |
Một điểm tương tác duy nhất với người dùng, thường đại diện cho một màn hình. | Chứa logic khởi tạo, liên kết với layout. |
Layout (ví dụ: activity_main.xml ) |
app/res/layout |
Định nghĩa cấu trúc giao diện người dùng bằng XML. | Chứa TextView để hiển thị văn bản “Hello World”. |
Tài nguyên (ví dụ: strings.xml, colors.xml) | app/res/values |
Lưu trữ các giá trị không phải code như chuỗi, màu, kích thước. | Chứa định nghĩa chuỗi “Hello World!” (hoặc “Chào mừng…”), màu sắc, v.v. |
Gradle Scripts | Gradle Scripts folder |
Tệp cấu hình cho hệ thống build. | Quản lý các thư viện (dependencies) và quá trình xây dựng ứng dụng. |
9. Bước Tiếp theo trên Lộ trình
Chúc mừng! Bạn đã tạo và chạy thành công ứng dụng Android đầu tiên của mình. Đây là một cột mốc quan trọng trên hành trình trở thành nhà phát triển Android.
Ứng dụng “Hello World” chỉ là điểm khởi đầu. Để xây dựng các ứng dụng phức tạp và hữu ích hơn, bạn cần học thêm:
- Các loại View và ViewGroup khác: Tìm hiểu về
Button
,EditText
,ImageView
,RecyclerView
,LinearLayout
,RelativeLayout
, v.v. - Xử lý Tương tác Người dùng: Bắt sự kiện nhấp nút (click listeners), xử lý nhập liệu từ người dùng.
- Activity Lifecycle chi tiết hơn: Hiểu cách Activity chuyển đổi giữa các trạng thái (tạo, bắt đầu, tạm dừng, dừng, hủy).
- Nhiều Activity và Navigation: Cách tạo nhiều màn hình và di chuyển giữa chúng.
- Data Handling: Lưu trữ và quản lý dữ liệu trong ứng dụng.
Tất cả những chủ đề này và nhiều hơn nữa sẽ được chúng ta khám phá trong các bài viết tiếp theo của series “Android Developer Roadmap“.
Kết luận
Việc tạo ra ứng dụng “Hello World” đầu tiên là một bước nhảy vọt từ lý thuyết sang thực hành. Bạn đã làm quen với môi trường Android Studio, cấu trúc dự án, các thành phần cốt lõi như Activity và Layout, và cách chạy ứng dụng trên thiết bị.
Hãy dành thời gian để khám phá dự án bạn vừa tạo, thử nghiệm thay đổi layout, thêm các View khác. Sự tò mò và thực hành là chìa khóa để tiến bộ. Đừng ngần ngại tìm kiếm trên Google hoặc Stack Overflow khi gặp khó khăn – đó là một phần không thể thiếu của quá trình học.
Hãy chuẩn bị cho những bài học tiếp theo, nơi chúng ta sẽ xây dựng thêm kiến thức và kỹ năng để tạo ra các ứng dụng Android ngày càng phức tạp và ấn tượng hơn. Hẹn gặp lại bạn ở bài viết tiếp theo!