- Build app Android và chạy bộ test bằng đúng lệnh CI: testDebugUnitTest cộng testAndroidHostTest
- Đổi dòng chữ trên màn hình Splash dùng chung qua Compose Resources và hiểu LocaleParityTest
- Tạo safe Git commit đầu tiên làm checkpoint "known good"
Build, Test và Commit Đầu Tiên
Tạo checkpoint an toàn đầu tiên trước khi vào phần architecture.
Video bài học sắp lên sóng
Trong lúc chờ, bạn hãy đọc bản text của bài học bên dưới: đầy đủ lý thuyết, code mẫu và checklist thực hành.
Mục Tiêu Bài Học
Bài này tạo checkpoint đầu tiên của bạn: app build được, bộ test chạy pass, app launch một lần, bạn đổi một dòng chữ trên màn hình Splash, và Git có đúng một commit an toàn.
Vì Sao Checkpoint Này Quan Trọng
Đọc kiến trúc dễ hơn nhiều khi app đã chạy được. Không có checkpoint này, mọi lỗi về sau đều mơ hồ:
- Thay đổi kiến trúc làm hỏng gì đó?
- Project chưa từng được config đúng?
- Thiếu local secret?
- Gradle fail vì môi trường?
Checkpoint cho bạn một thời điểm "known good". Khi có gì hỏng, bạn so với thời điểm này thay vì đoán.
Phần 1: Build App Android
Mở repo trong Android Studio. Sau khi sync xong, bấm icon hình chiếc búa ở góc trên bên phải để build.
Hoặc chạy từ tab Terminal của Android Studio ở repo root:
./gradlew assembleDebug
Trên Command Prompt của Windows, gõ gradlew assembleDebug. Lệnh kết thúc với BUILD SUCCESSFUL là đạt.
Phần 2: Chạy Bộ Test
Test giúp bạn biết mình không lỡ tay làm hỏng tính năng sẵn có khi phát triển tính năng mới. Chạy:
./gradlew testDebugUnitTest testAndroidHostTest
Đây cũng là lệnh CI của repo chạy trên mỗi pull request (.github/workflows/pr-check.yml). Lệnh kết thúc với BUILD SUCCESSFUL là đạt.
Vì sao cần hai task? Trong 14 Gradle module, chỉ :app là Android module thuần. 13 module còn lại là Kotlin Multiplatform, và test của chúng không nằm dưới task testDebugUnitTest:
| Task | Chạy test của |
|---|---|
testDebugUnitTest | Chỉ :app |
testAndroidHostTest | Các KMP module: commonTest và androidHostTest, chạy trên JVM của máy bạn |
Nếu chỉ chạy testDebugUnitTest, Gradle báo xanh trong khi phần lớn bộ test chưa hề chạy. Bạn sẽ gặp bẫy này ở mọi project KMP: tên task quen thuộc từ thời Android thuần không còn bao phủ code chung. Khi nhận một project KMP mới, hãy xác nhận task test nào thật sự chạm tới từng module trước khi tin vào màu xanh.
Test của các KMP module trên iOS Simulator chỉ chạy được trên Mac, bằng task iosSimulatorArm64Test.
Phần 3: Chạy App Một Lần
Chọn emulator hoặc điện thoại thật ở thanh công cụ của Android Studio và bấm Run. Đợi tới khi app qua màn hình Splash và vào Menu.
Phần 4: Tạo Một Thay Đổi Nhỏ Nhìn Thấy Được
Commit đầu tiên chứng minh bạn sửa được một chi tiết nhỏ, kiểm chứng nó, rồi lưu lại an toàn. Đừng refactor screen, rename package hay đổi navigation.
Dòng chữ dưới logo trên màn hình Splash do composable SplashScreen vẽ, trong file:
shared-app/src/commonMain/kotlin/com/creative/kta/shared/splash/SplashScreen.kt
File nằm trong commonMain, nên Android và iOS vẽ cùng một màn hình. Dòng chữ lấy từ string resource knowledge_is_power qua Compose Resources (Res.string.knowledge_is_power). Đổi giá trị của string này ở hai file:
core/src/commonMain/composeResources/values/strings.xml
core/src/commonMain/composeResources/values-vi/strings.xml
File values dùng khi máy để tiếng Anh, values-vi dùng khi máy để tiếng Việt. Bản tiếng Việt phải khác bản tiếng Anh: LocaleParityTest (chạy trong testDebugUnitTest của :app) fail nếu một string tiếng Việt giống y hệt bản tiếng Anh, hoặc nếu một key thiếu bản values-vi.
Repo cũng có knowledge_is_power trong app/src/main/res/values/strings.xml. Đó là Android resource, màn hình Splash không đọc nó. Sửa ở đó sẽ không thấy gì thay đổi.
Chạy lại test ở Phần 2, chạy lại app và xác nhận Splash hiện dòng chữ mới.
Phần 5: Tạo Git Checkpoint An Toàn
git status
git add core/src/commonMain/composeResources/values/strings.xml core/src/commonMain/composeResources/values-vi/strings.xml
git commit -m "Change splash tagline"
Đọc kỹ git status trước khi commit. Mục modified chỉ nên có hai file strings vừa sửa. local.properties và app/google-services.json không xuất hiện vì đã được ignore.
Checkpoint
Bạn hoàn tất bài này khi:
./gradlew assembleDebugvà./gradlew testDebugUnitTest testAndroidHostTestđềuBUILD SUCCESSFUL,- Splash hiện dòng chữ mới bằng cả tiếng Anh và tiếng Việt,
git log -1hiện commit của bạn, và commit chỉ chứa hai file strings.
App đã build, test xanh và có commit đầu tiên trên Android. Đó là checkpoint bạn quay về mỗi khi một thay đổi sau này làm build hỏng.