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 đang ở đây để bắt đầu hành trình trở thành kỹ sư nền tảng Android.

Mặc dù quá trình này khó thực hiện, nhưng nhóm Android cố gắng đơn giản hoá hành trình, mọi bản phát hành. Và nhóm cải tiến mỗi ngày thông qua tính năng trực tiếp hoạt động 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ử.

Mục tiêu

Sứ mệnh của lớp học lập trình này có 2 phần:

  1. Để giúp bạn hiểu sơ qua về quy trình làm việc của nhà phát triển giống như 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 liên quan đến 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 yêu cầu cho lớp học lập trình này được lấy 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, thiết lập như sau:

Môi trường

Thông thường, người dùng sẽ trực tiếp xây dựng và phát triển trên máy trạm. Vì bạn có thể hoạt động trong nhiều thiết bị đầu cuối 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 hoạt động đầu cuối. Cụ thể, các lệnh này bao gồm 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ả cá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 lần thanh toán repo cùng một lúc, miễn là tồn tại trong các thư mục riêng biệt. Nhưng lưu ý rằng mỗi lượt thanh toán và số tiền chuyển đến sử dụng khoảng 300 GB (và ngày càng tăng), vì vậy hãy tự giới hạn ở 2 lần thanh toán repo, hoặc tăng cường hệ thống bằng một ổ đĩa phụ.

Tạo mã

Để xây dựng Android, bạn phải chọn một mục tiêu loại thiết bị cần tạo bằng lệnh lunch. Mục tiêu là một phép hoán vị thiết bị, chẳng hạn như kiểu máy hoặc kiểu 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 cho thử nghiệm mà không cần thiết bị thực.

Để tạo và cập nhật thiết bị thực, hãy chọn một mục tiêu khác và làm theo hướng dẫn về cách cài đặt ROM cho thiết bị.

  1. Thiết lập môi trường để xây dựng thiết bị Android bằng cách chạy sau đây từ thư mục gốc của mã nguồn kiểm tra:

    source build/envsetup.sh
  2. Truyền mục tiêu bản dựng đến lệnh lunch, như sau:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
  3. Tạo mã từ bất kỳ nơi nào trong thanh toán bằng:

    m

Dự kiến bản dựng đầu tiên sẽ mất vài giờ. Các lần xây dựng tiếp theo sẽ mất đáng kể thời gian.

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, bạn phải cài đặt Các phần phụ thuộc 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

    Thao tác khởi động lại sẽ kích hoạt việc cài đặt các mô-đun hạt nhân bổ sung và áp dụng các quy tắc udev.

  2. Chạy Cuttlefish:

    launch_cvd --daemon
    
  3. Kết nối với thiết bị Mực nang bằng cách di chuyển đến https://localhost:8443 trong trình duyệt web của bạn. Bạn sẽ được chào đón bằng một luồng video về ứng dụng 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 để bao gồm nội dung cập nhật từ danh sách thay đổi tại vị trí sau đây:

    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 về màu sắc trên thiết bị đã chọn tương tự như 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 cho chạy kiểm thử cục bộ và kiểm thử mã.

Để 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. Kiểm tra dấu vết ngăn xếp của lượt kiểm thử không đạt:

    STACKTRACE:
    java.lang.AssertionError
     at org.junit.Assert.fail(Assert.java:87)
     at org.junit.Assert.assertTrue(Assert.java:42)
     at org.junit.Assert.assertTrue(Assert.java:53)
     at android.test.example.devcodelab.DevCodelabTest.testHelloWorld(DevCodelabTest.java:29)
  3. Rồi xem tại đây

    platform_testing/tests/example/devcodelab
    
  4. Để lấy tệp để chỉnh sửa, hãy lấy tên của thử nghiệm trong android.test.example.devcodelab.DevCodelabTest rồi thay thế . bằng /, để nhận 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 tổng quan về Git và Repo, với đường 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 (Dự án nguồn mở Android) để xem danh sách đầy đủ các dự án Git và từng dự án (đường dẫn) riêng lẻ các nhánh được liên kết với mỗi dự án.

Để xem xét mã dự án của bạn trong Git, bạn sẽ sử dụng Gerrit hệ thống xem xét mã dựa trên web.

  1. Giả sử bạn đã thực hiện các thay đổi trong dự án frameworks/native, hãy chạy sau đây là các lệnh để tải chúng 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. Để 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 tra và sau khi xem xét và phê duyệt, bạn gửi thay đổi của mình trong Hãy Gerrit rồi hợp nhất tệp đó vào kho lưu trữ.

Thay vào đó, cho mục đích của lớp học lập trình này, hãy huỷ bỏ danh sách thay đổi bằng cách nhấp vào Thoát trong Gerrit.

Sau đó, hãy huỷ nhánh tạm thời được liên kết trong dự án frameworks/native thư mục (hoặc thư mục con của thư mục):

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 repo start, git commitrepo upload thay đổi, bạn có thể đặt lại . Giả sử bạn đang ở aosp/platform_testing directory, hãy sử dụng nội dung 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!

Nhận 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 cách sử dụng Công cụ theo dõi lỗi ở cuối trang bất kỳ. Gửi câu hỏi đến xây dựng android nhóm.