Lớp học lập trình dành cho nhà phát triển Android

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:

  1. Để 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).
  2. 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ô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.shlunch.

Thiết lập máy trạm

  1. Cài đặt các gói cần thiết trên máy trạm.
  2. 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ã

  1. Chuyển đến thư mục gốc:

    cd ~
    
  2. Tạo một thư mục con cục bộ đang hoạt động trong đó:

    mkdir aosp
    
  3. Chuyển đến thư mục:

    cd aosp
    
  4. 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
    
  5. Nhập hoặc chấp nhận thông tin đăng nhập Git của bạn (tên, địa chỉ email).

  6. Đồ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.

  1. 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
    
  2. 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
    
  3. 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.

  1. 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.

  2. Phóng to mực ống:

    launch_cvd --daemon
    
  3. 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.

  1. Từ gốc của trang thanh toán (thư mục aosp/), hãy chuyển đến dự án Git frameworks/native:

    cd frameworks/native
    
  2. Bắt đầu một dự án tạm thời bằng lệnh sau:

    repo start <some-name> .
    
  3. 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
    
  4. Tìm dòng này:

    void SurfaceFlinger::updateColorMatrixLocked() {
    
  5. 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});
    
  6. Tạo bản dựng mã:

    m
    
  7. 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.

Ví dụ về trường hợp thay đổi màu thành công

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:

  1. Chạy:

    atest DevCodelabTest
    
  2. 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
    
  3. Rồi xem tại đây

    platform_testing/tests/example/devcodelab
    
  4. Để 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
    
  5. 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)
    
  6. 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.

  1. 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
    
  2. Đố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
    
  3. 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 commitrepo 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.