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ử Trái đất. Đú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 này đầy thử thách nhưng nhóm Android luôn cố gắng đơn giản hóa hành trình của bạn trong mỗi bản phát hành. Và nhóm thực hiện các 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, khởi động mộ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 lớp học lập trình này gồm có hai 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 đố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 cung cấp phản hồi về 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 lớp học lập trình này được lấy từ các yêu cầu dành cho việc 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 như 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ì bạn có thể đang làm việc trên nhiều thiết bị đầu cuối khác nhau và nhiều lệnh được sử dụng dành riêng cho thiết bị đầu cuối nên 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.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 của bạn.
  2. Khi vẫn ở trong thiết bị đầu cuối, hãy cài đặt Repo và lấy thông tin xác thực cho tất cả các kho Git.

Khởi tạo và đồng bộ mã

  1. Điều hướng vào thư mục chính của bạn:

    cd ~
    
  2. Tạo một thư mục con làm việc cục bộ bên trong nó:

    mkdir aosp
    
  3. Điều hướng vào thư mục:

    cd aosp
    
  4. Khởi tạo nhánh chính mã nguồn 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ộ mã nguồn:

    repo sync -j8
    

Quá trình đồng bộ hóa lần đầ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 phép có nhiều hơn 1 lần kiểm tra repo cùng một lúc, miễn là chúng tồn tại trong các thư mục riêng biệt. Tuy nhiên, hãy lưu ý rằng mỗi lần thanh toán và bản dựng sẽ sử dụng khoảng 300 GB (và đang tăng lên), vì vậy, hãy giới hạn ở 2 lần kiểm tra kho lưu trữ hoặc tăng cường hệ thống của bạn bằng ổ đĩ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ị của thiết bị, chẳng hạn như một 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 xây dựng thiết bị Android ảo Cuttlefish để thử nghiệm mà không cần thiết bị vật lý.

Thay vào đó, để xây dựng và cập nhật thiết bị vật lý, hãy chọn mục tiêu khác và làm theo hướng dẫn dành cho thiết bị nhấp nháy .

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

    source build/envsetup.sh
    
  2. Chuyển mục tiêu xây dựng tới lệnh ăn trưa, như thế này:

    lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
    
  3. Tạo mã từ bất kỳ đâu trong quá trình thanh toán của bạn bằng:

    m
    

Dự kiến ​​quá trình xây 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 một 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 các thiết bị Android ảo, trong trường hợp này là Mực nang.

Nếu bạn đang sử dụng phiên cuối cùng được dùng để xây dựng 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 tương tự mà bạn đã sử dụng ở đó trước tiên. Sau đó

  1. Cài đặt các phần phụ thuộc để chạy cục bộ thiết bị ảo Cuttlefish bằng:

    acloud setup
    
  2. Nếu được nhắc, hãy khởi động lại máy trạm của bạn để tất cả thay đổi có hiệu lực.

  3. Tạo một phiên bản cục bộ acloud với:

    acloud create --local-image --local-instance
    
  4. Chọn thiết bị Mực nang.

Bạn sẽ được chào đón bằng 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 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 danh sách thay đổi mẫu này.

  1. Từ thư mục gốc của thanh toán của bạn ( thư mục aosp/ ), hãy điều hướng đến dự án frameworks/native :

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

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

    postComposition();
    
  5. 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();
    
  6. Xây 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
    acloud reconnect
    
  8. Nếu bạn được nhắc chọn 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 listacloud 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.

Example of a successful color change

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 lớp học lập trình sử dụng một thử nghiệm mẫu 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:

  1. Chạy:

    atest DevCodelabTest
    
  2. Cuộc thử nghiệm sẽ thất bại. Để khắc phục, hãy tìm mã nguồn của bài kiểm tra thất bại:

    atest --info android.test.example.devcodelab.DevCodelabTest#testHelloWorld
    
  3. Sau đó nhìn vào đây

    platform_testing/tests/example/devcodelab
    
  4. Để 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
    
  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 tra để xác minh rằng bạn đã khắc phục được sự cố:

    atest DevCodelabTest
    

Tải mã của bạn lên để xem xét

Repo đơn giản hóa việc sử dụng Git bằng cách kết hợp các lệnh như git clone để hoạt động trên nhiều kho lưu trữ Git (hoặc dự án) 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 các 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ã các 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 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
    
  2. Đố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
    
  3. Tải lên thay đổi của bạn:

    repo upload
    

Nếu thành công, bạn sẽ thấy thông báo tương tự 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

Đi đến liên kết được in trong terminal, 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 lớp học lập trình khởi đầu để phát triển nền tảng Android. Xem Gửi bản vá để biết các bước tiếp theo và để biết chi tiết đầy đủ 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, kiểm tra sau 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ì mục đích của lớp học 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 Bỏ qua trong Gerrit.

Sau đó, bỏ nhánh tạm thời được liên kết trong thư mục frameworks/native (hoặc cá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 commitrepo upload thay đổi nên bạn có thể đặt lại chính 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 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 liên kết Trình theo dõi sự cố ở cuối trang bất kỳ. Gửi câu hỏi đến nhóm xây dựng android .