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ử Trái đất. 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ù con đường đầy thách thức, nhóm Android luôn cố gắng đơn giản hóa hành trình của bạn, mọi bản phát hành. Và nhóm cải tiến hàng ngày thông qua công việc trực tiếp trong Dự án mã nguồn mở Android (AOSP).
Vì vậy, hãy ngồi lại, kích hoạt thiết bị đầu cuối và cùng làm nên lịch sử.
Bàn thắng
Nhiệm vụ của phòng thí nghiệm lập trình này có hai mặt:
- Để cung cấp cho bạn một chút hiểu biết 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) như thế nào.
- Khuyến khích bạn cung cấp phản hồi xung quanh các công cụ, tài liệu của Android và quy trình làm việc của nhà phát triển.
điều kiện tiên quyết
Danh sách các yêu cầu đối với phòng học mã này được lấy từ các yêu cầu dành cho phát triển nền tảng chung ( AOSP ). Để thực hiện codelab này, hãy thiết lập như sau:
- Máy trạm Linux vật lý đáp ứng tất cả các yêu cầu chung .
- 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. Bởi vì bạn có thể đang làm việc trong nhiều thiết bị đầu cuối khác nhau và nhiều lệnh được sử dụng là dành riêng cho thiết bị đầu cuối, bạn sẽ cần chạy lại chúng trong mỗi phiên thiết bị đầu cuối. Cụ thể, chúng 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 của bạn.
- Khi vẫn ở trong thiết bị đầu cuối, hãy cài đặt Repo và nhận thông tin xác thực cho tất cả các kho lưu trữ Git.
Khởi tạo và đồng bộ mã
Điều hướng vào thư mục nhà của bạn:
cd ~
Tạo một thư mục con làm việc cục bộ bên trong nó:
mkdir aosp
Điều hướng vào thư mục:
cd aosp
Khởi tạo nhánh chính của mã nguồn 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ộ hóa mã nguồn:
repo sync -j8
Đồng bộ hóa ban đầu có thể mất một giờ hoặc hơn.
Mỗi lần kiểm tra repo được thể hiện bằng một tệp kê khai . Có thể có nhiều hơn 1 kiểm tra repo tại một thời điểm, miễn là chúng tồn tại trong các thư mục riêng biệt. Nhưng lưu ý rằng mỗi lần kiểm tra và xây dựng chiếm khoảng 300 GB sử dụng (và đang tăng lên), vì vậy, hãy giới hạn bản thân ở 2 lần kiểm tra repo hoặc bổ sung hệ thống của bạn bằng một ổ đĩa phụ.
xây dựng mã
Để xây dựng Android, bạn phải chọn loại thiết bị mục tiêu để xây dựng 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 kiểu máy hoặc yếu tố hình thức cụ thể.
Mục tiêu thiết bị được bao gồm bên dưới, aosp_cf_x86_64_phone-userdebug
, cho phép bạn xây dựng thiết bị Android ảo Cuttlefish để thử nghiệm mà không cần thiết bị thực.
Thay vào đó, để xây dựng và cập nhật một thiết bị vật lý, hãy chọn một mục tiêu khác và làm theo hướng dẫn dành cho thiết bị flash .
Thiết lập môi trường của bạn để xây dựng các thiết bị Android bằng cách chạy lệnh sau từ thư mục gốc của kiểm tra mã nguồn của bạn:
source build/envsetup.sh
Chuyển mục tiêu xây dựng cho lệnh lunch, như thế này:
lunch aosp_cf_x86_64_phone-userdebug
Tạo mã từ mọi nơi trong trang thanh toán của bạn với:
m
Dự kiến bản dựng đầu tiên sẽ mất hàng giờ. Các bản dựng tiếp theo mất ít thời gian hơn đáng kể.
Tạo phiên bản Acloud
Acloud là một công cụ dòng lệnh trong AOSP hỗ trợ người dùng tạo thiết bị Android ảo, trong trường hợp này là Cuttlefish.
Nếu bạn đang ở trong cùng phiên cuối được sử dụng để tạo mã , hãy tiếp tục. Nếu không, hãy chạy lại tập lệnh envsetup.sh
và lệnh lunch
giống như bạn đã sử dụng ở đó trước. Sau đó
Tạo một phiên bản cục bộ Acloud với:
acloud create --local-image --local-instance
Chấp nhận cập nhật cho các gói cần thiết.
Nếu được nhắc, hãy khởi động lại máy trạm của bạn để tất cả các thay đổi có hiệu lực.
Chọn thiết bị Mực nang.
Bạn sẽ được chào đón với phiên VNC có chứa thiết bị Android!
Bạn có thể tương tác với thiết bị ảo trên máy trạm của mình bằng chuột và bàn phím. Bạn cũng có thể theo dõi hoạt động trong nhật ký khi sử dụng thiết bị của mình bằng cách sử dụng lệnh logcat
Cầu gỡ lỗi Android (adb):
adb logcat
thực hiện thay đổi
Cập nhật mã nguồn theo ví dụ này danh sách thay đổi .
Từ thư mục gốc của thanh toán (
aosp/
thư mục), điều hướng đến dự ánframeworks/native
Git:cd frameworks/native
Bắt đầu một dự án tạm thời với lệnh này:
repo start <some-name> .
Chỉnh sửa
SurfaceFlinger.cpp
để bao gồm các bản cập nhật từ danh sách thay đổi tại vị trí sau:aosp/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
Tìm dòng này:
postComposition();
Thay thế hai dòng đó bằng dòng sau:
postComposition(); 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}); updateColorMatrixLocked();
Xây 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
acloud reconnect
Nếu bạn được nhắc chọn một thiết bị, hãy chọn thiết bị hiển thị thời gian trôi qua ngắn nhất. (Đây có thể là cái cuối cùng trong danh sách mà bạn nhìn thấy.) Để xem tất cả các phiên bản thiết bị ảo, hãy sử dụng các lệnh
acloud list
vàacloud list -v
.
Xác minh rằng bạn thấy sự thay đổi màu sắc trên thiết bị đã chọn của mình tương tự như những gì hiển thị trong Hình 1.
Hình 1. Giao diện màn hình sau khi đổi màu thành công
Kiểm tra mã của bạn
Phần này của phòng thí nghiệm lập trình sử dụng một bài kiểm tra mẫu nằm trong cây nguồn và không thành công. Điều này sử dụng Atest để chạy thử nghiệm cục bộ và kiểm tra mã.
Để sử dụng bài kiểm tra, hãy làm theo các hướng dẫn sau:
Chạy:
atest DevCodelabTest
Bài kiểm tra sẽ thất bại. Để khắc phục, hãy tìm mã nguồn của bài kiểm tra không thành công:
atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
Sau đó nhìn vào đây
platform_testing/tests/example/devcodelab
Để chỉnh sửa tệp, hãy lấy tên của bài kiểm tra trong
android.test.example.devcodelab.DevCodelabTest
và thay thế phần mở rộng.
với/
, để có đượ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 tra để xác minh rằng bạn đã khắc phục sự cố:
atest DevCodelabTest
Tải lên mã của bạn để xem xét
Repo đơn giản hóa 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 Git (hoặc dự án) cùng một lúc.
Xem Công cụ kiểm soát nguồn để biết tổng quan về Git và Repo, với liên kết đến tài liệu đầy đủ về cách làm việc với mã nguồn Android. Xem kho lưu trữ AOSP để biết danh sách đầy đủ các dự án Git và các dự án riêng lẻ (đường dẫn) cho các nhánh được liên kết với từng dự án.
Để đánh giá 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 của Gerrit .
Giả sử bạn đã thực hiện các thay đổi của mình trong dự án
frameworks/native
, hãy chạy các lệnh sau để tải chúng 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 thông tin sau:
Android codelab change Test: manual atest
Tải lên thay đổi của bạn:
repo upload
Nếu bạn thành công, bạn sẽ thấy một thông báo giống như thông báo này:
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 liên kết, được in trong thiết bị đầu cuối, giống như liên kết này:
https://android-review.googlesource.com/c/platform/frameworks/native/+/1098432
Điều này hoàn thành phòng thí nghiệm mã bắt đầu để phát triển nền tảng Android. Xem phần Gửi bản vá để biết các bước tiếp theo và để biết đầy đủ 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.
Hoàn nguyên thay đổi của bạn
Thông thường, sau khi kiểm tra và sau khi xem xét và phê duyệt, bạn gửi thay đổi của mình trong Gerrit và hợp nhất nó vào kho lưu trữ.
Thay vào đó, với mục đích của phòng thí nghiệm lập trình này, hãy hoàn nguyên danh sách thay đổi của bạn bằng cách nhấp vào Abandon in Gerrit.
Sau đó từ bỏ nhánh tạm thời được liên kết trong thư mục dự án frameworks/native
(hoặc thư mục con của nó):
repo abandon codelab .
Cũng nhớ hoàn nguyên những thay đổi bạn đã thực hiện đối với tệp thử nghiệm. Vì bạn không repo start
, git commit
và repo upload
thay đổi nên bạn có thể tự đặt lại tệp. Giả sử bạn đang ở trong aosp/platform_testing directory
, hãy sử dụng cách sau để đặt lại tệp:
git reset HEAD tests/example/devcodelab/src/android/test/example/devcodelab/DevCodelabTest.java
git checkout .
Tại thời điểm này, bạn đã hoàn tất! Công việc tốt đẹp!
Được giúp đỡ
Nếu bạn gặp phải lỗi trong quá trình học mã này, vui lòng báo cáo bằng cách sử dụng liên kết Trình theo dõi sự cố ở cuối bất kỳ trang nào. Gửi câu hỏi đến nhóm xây dựng android .