Bạn có thể giúp phát triển hệ điều hành được cài đặt rộng rãi nhất trong lịch sử của Earth. Vâng, bạn ở đây để bắt đầu hành trình trở thành kỹ sư nền tảng Android.
Mặc dù lộ trình này đầy thách thức, nhưng nhóm Android đều cố gắng đơn giản hoá hành trình của bạn ở mọi bản phát hành. Đồng thời, đội ngũ này thực hiện các điểm cải tiến mỗi ngày thông qua công việc trực tiếp trong Dự án nguồn mở Android (AOSP).
Hãy ngồi xuống, bật thiết bị đầu cuối và cùng chúng ta làm nên lịch sử.
Bàn thắng
Sứ mệnh của lớp học lập trình này có 2 phần:
- Để giúp bạn nắm được một chút thông tin về quy trình làm việc của nhà phát triển đối với các kỹ sư Android làm việc trên nền tảng (hệ điều hành).
- Khuyến khích bạn đưa ra ý kiến phản hồi về các công cụ, tài liệu và quy trình làm việc của nhà phát triển của Android.
Điều kiện tiên quyết
Danh sách các yêu cầu dành cho lớp học lập trình này có nguồn gốc từ các yêu cầu để phát triển nền tảng chung (AOSP). Để tham gia lớp học lập trình này, hãy thiết lập các phần sau:
- Máy trạm Linux thực tế đáp ứng tất cả yêu cầu công khai.
- Repo và cấu hình Git cần thiết để chỉnh sửa cơ sở mã Android.
Môi trường
Thông thường, người dùng xây dựng và phát triển trực tiếp trên máy trạm. Vì có thể bạn đang làm việc trên nhiều thiết bị đầu cuối và nhiều lệnh được sử dụng dành riêng cho thiết bị đầu cuối, nên bạn cần chạy lại các lệnh đó trong từng phiên thiết bị đầu cuối. Cụ thể, những lệnh này bao gồm các lệnh source build/envsetup.sh
và lunch
.
Thiết lập máy trạm
- Cài đặt các gói cần thiết trên máy trạm.
- Khi vẫn ở trong thiết bị đầu cuối, hãy cài đặt Repo và lấy thông tin đăng nhập vào tất cả kho lưu trữ Git.
Khởi chạy và đồng bộ hoá mã
Chuyển đến thư mục gốc:
cd ~
Tạo một thư mục con cục bộ đang hoạt động trong đó:
mkdir aosp
Chuyển đến thư mục:
cd aosp
Khởi chạy nhánh chính của mã nguồn của kho lưu trữ AOSP (mặc định):
repo init -u https://android.googlesource.com/platform/manifest
Nhập hoặc chấp nhận thông tin đăng nhập Git của bạn (tên, địa chỉ email).
Đồng bộ hoá mã nguồn:
repo sync -j8
Quá trình đồng bộ hoá ban đầu có thể mất một giờ hoặc lâu hơn.
Mỗi quy trình thanh toán repo được biểu thị bằng một tệp kê khai. Bạn có thể cho phép thực hiện nhiều quy trình thanh toán repo cùng một lúc, miễn là các repo đó tồn tại trong các thư mục riêng biệt. Tuy nhiên, xin lưu ý rằng mỗi lượt thanh toán và bản dựng sẽ chiếm khoảng 300 GB mức sử dụng (và ngày càng tăng). Vì vậy, bạn chỉ nên sử dụng 2 quy trình thanh toán kho lưu trữ hoặc tăng cường hệ thống bằng một ổ đĩa phụ.
Tạo mã
Để tạo bản dựng Android, bạn phải chọn một loại thiết bị target (mục tiêu) để tạo bằng lệnh lunch
. Mục tiêu là một hoán vị thiết bị, chẳng hạn như một mô hình hoặc hệ số hình dạng cụ thể.
Mục tiêu thiết bị aosp_cf_x86_64_phone-userdebug
cho phép bạn tạo thiết bị Android ảo Cuttlefish để kiểm thử mà không cần thiết bị thực.
Để tạo và cập nhật một thiết bị thực, hãy chọn một đích khác và làm theo hướng dẫn dành cho thiết bị cài đặt ROM.
Thiết lập môi trường để xây dựng thiết bị Android bằng cách chạy lệnh sau từ thư mục gốc của quy trình thanh toán mã nguồn:
source build/envsetup.sh
Truyền mục tiêu bản dựng đến lệnh trưa, như sau:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Tạo mã từ bất cứ đâu trong quy trình thanh toán bằng:
m
Dự kiến bản dựng đầu tiên sẽ mất vài giờ. Các bản dựng tiếp theo sẽ mất ít thời gian hơn đáng kể.
Phóng to mực ống
Cuttlefish là trình mô phỏng Android dùng để kiểm thử các bản dựng của bạn.
Nếu chưa từng cài đặt Mực ống thì bạn phải cài đặt các phần phụ thuộc cần thiết cho mực ống. Trong cửa sổ dòng lệnh, hãy chạy các lệnh sau để tải xuống, tạo và cài đặt các gói Debian lưu trữ:
sudo apt install -y git devscripts equivs config-package-dev debhelper-compat golang curl
git clone https://github.com/google/android-cuttlefish
cd android-cuttlefish
for dir in base frontend; do pushd $dir # Install build dependencies sudo mk-build-deps -i dpkg-buildpackage -uc -us popd done
sudo dpkg -i ./cuttlefish-base_*_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user_*_*64.deb || sudo apt-get install -f
sudo usermod -aG kvm,cvdnetwork,render $USER
sudo reboot
Quá trình khởi động lại sẽ kích hoạt quá trình cài đặt các mô-đun nhân bổ sung và áp dụng các quy tắc
udev
.Phóng to mực ống:
launch_cvd --daemon
Kết nối với thiết bị Mực ống bằng cách chuyển đến
https://localhost:8443
trên trình duyệt web. Chúng tôi sẽ chào đón bạn bằng một luồng video về thiết bị chạy Android mà bạn vừa tạo.
Thực hiện thay đổi
Cập nhật mã nguồn theo danh sách thay đổi trong ví dụ này.
Từ gốc của trang thanh toán (thư mục
aosp/
), hãy chuyển đến dự án Gitframeworks/native
:cd frameworks/native
Bắt đầu một dự án tạm thời bằng lệnh sau:
repo start <some-name> .
Chỉnh sửa
SurfaceFlinger.cpp
để đưa nội dung cập nhật từ danh sách thay đổi vào tại vị trí sau:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Tìm dòng này:
void SurfaceFlinger::updateColorMatrixLocked() {
Thêm hai dòng sau vào đầu updateColorMatrixlock():
mClientColorMatrix = mat4(vec4{1.0f, 0.0f, 0.0f, 0.0f}, vec4{0.0f, -1.0f, 0.0f, 0.0f}, vec4{0.0f, 0.0f, -1.0f, 0.0f}, vec4{0.0f, 1.0f, 1.0f, 1.0f});
Tạo bản dựng mã:
m
Cập nhật bản dựng trên thiết bị:
adb root
adb remount
adb sync
adb reboot
Xác minh rằng bạn thấy sự thay đổi màu sắc trên thiết bị đã chọn giống như màu trong Hình 1.
Hình 1. Giao diện màn hình sau khi thay đổi màu thành công
Kiểm thử mã
Phần này của lớp học lập trình sử dụng một chương trình kiểm thử mẫu trong cây nguồn và không thành công. Thao tác này sử dụng Atest (kiểm thử) để chạy kiểm thử cục bộ và kiểm thử mã nguồn.
Để sử dụng bài kiểm tra, hãy làm theo các hướng dẫn sau:
Chạy:
atest DevCodelabTest
Thử nghiệm sẽ không thành công. Để khắc phục, hãy tìm mã nguồn của lượt kiểm thử không đạt:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
Rồi xem tại đây
platform_testing/tests/example/devcodelab
Để lấy tệp cần chỉnh sửa, hãy lấy tên của chương trình kiểm thử trong
android.test.example.devcodelab.DevCodelabTest
rồi thay thế.
bằng/
, để nhận được kết quả này:src/android/test/example/devcodelab/DevCodelabTest.java
Sau đó chỉnh sửa
platform_testing/tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
để thay thế
Assert.assertTrue(false)
với
Assert.assertTrue(true)
Chạy lại kiểm thử để xác minh rằng bạn đã khắc phục xong vấn đề:
atest DevCodelabTest
Tải mã của bạn lên để được xem xét
Repo đơn giản hoá việc sử dụng Git bằng cách nhóm các lệnh như git clone
để hoạt động trên nhiều kho lưu trữ (hoặc dự án) Git cùng một lúc.
Xem Công cụ kiểm soát nguồn để biết thông tin tổng quan về Git và Repo, kèm theo đường liên kết đến tài liệu đầy đủ về cách làm việc với mã nguồn Android. Hãy xem kho lưu trữ AOSP (Dự án nguồn mở Android) để biết danh sách đầy đủ các dự án Git và từng dự án (đường dẫn) riêng lẻ cho các nhánh được liên kết với từng dự án.
Để xem xét mã dự án của bạn trong Git, bạn sẽ sử dụng hệ thống đánh giá mã dựa trên web Gerrit.
Giả sử bạn đã thực hiện các thay đổi trong dự án
frameworks/native
, hãy chạy các lệnh sau để tải những thay đổi đó lên:cd frameworks/native
repo start codelab .
git add .
git commit
Đối với thông báo cam kết của bạn, hãy nhập như sau:
Android codelab change Test: manual atest
Tải lên thay đổi của bạn:
repo upload
Nếu thành công, bạn sẽ thấy một thông báo giống như sau:
Upload project frameworks/native/ to remote branch main:
branch codelab ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
ff46b36d android codelab change
to https://android-review.googlesource.com/ (y/N)? y
remote: Processing changes: refs: 1, new: 1, done
remote:
remote: SUCCESS
remote:
remote: https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432 android codelab change [NEW]
remote:
To https://android-review.googlesource.com/platform/frameworks/native
* [new branch] codelab -> refs/for/main
Xem thay đổi của bạn trong Gerrit
Truy cập vào đường liên kết được in trong cửa sổ dòng lệnh giống với đường liên kết sau:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Đến đây, bạn đã hoàn thành lớp học lập trình khởi đầu để phát triển nền tảng Android. Hãy xem phần Gửi bản vá để biết các bước tiếp theo và để biết toàn bộ thông tin chi tiết về cách phát triển Android, hãy xem phần còn lại của trang web này.
Huỷ bỏ thay đổi
Thông thường, sau khi kiểm thử, sau khi xem xét và phê duyệt, bạn sẽ gửi thay đổi trongGerrit và hợp nhất thay đổi đó vào kho lưu trữ.
Thay vào đó, nhằm phục vụ mục đích của lớp học lập trình này, hãy huỷ bỏ danh sách thay đổi của bạn bằng cách nhấp vào Bỏ qua trong Gerrit.
Sau đó, hãy bỏ qua nhánh tạm thời được liên kết trong thư mục dự án frameworks/native
(hoặc các thư mục con của dự án):
repo abandon codelab .
Ngoài ra, hãy nhớ huỷ bỏ những thay đổi bạn đã thực hiện đối với tệp thử nghiệm. Vì bạn không thực hiện thay đổi repo start
, git commit
và repo upload
, nên bạn có thể đặt lại chính tệp đó. Giả sử bạn đang ở aosp/platform_testing directory
, hãy làm theo các bước sau để đặt lại tệp:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
Đến đây, bạn đã hoàn tất! Làm tốt lắm!
Yêu cầu trợ giúp
Nếu bạn gặp lỗi trong lớp học lập trình này, hãy báo cáo lỗi bằng đường liên kết Công cụ theo dõi lỗi ở cuối một trang bất kỳ. Gửi câu hỏi cho nhóm android-building.