Wi-Fi

Mô-đun Wi-Fi có thể cập nhật, tức là có thể nhận bản cập nhật về các chức năng bên ngoài chu kỳ phát hành thông thường của Android. Mô-đun này có các nội dung sau thành phần.

Thành phần mô-đun Wi-Fi

Hình 1. Cấu trúc và thành phần của mô-đun Wi-Fi

Mô-đun Wi-Fi mang lại các lợi ích sau.

  • Bản sửa lỗi và trải nghiệm Wi-Fi nhất quán cho người dùng cuối trên các thiết bị Android đến các vấn đề về khả năng tương tác thông qua cập nhật mô-đun.

  • Nhà phát triển ứng dụng sẽ ít bị phân mảnh nền tảng hơn.

  • OEM có thể đáp ứng các yêu cầu của nhà mạng, đồng thời giảm chi phí cho riêng lẻ (vì chúng không cần các triển khai khác nhau của yêu cầu giống nhau theo những cách khác nhau).

Ranh giới mô-đun cho Android 12 và Android 13

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (tệp từ frameworks/base/wifi/java)
      • tests/
        • android/net/wifi (tệp từ frameworks/base/wifi/tests)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (tệp từ frameworks/opt/net/wifi/service/java)
      • tests/
        • com/android/server/wifi (tệp từ frameworks/opt/net/wifi/tests)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (tệp từ frameworks/base/packages/OsuLogin)
    • ServiceResources/ (mới trong Android 12, Lớp phủ Tệp kê khai APK được lưu trữ tại đây)
      • res/ (mới trong Android 11, cấu hình Wi-Fi được trích xuất từ frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (mới trong ứng dụng Android 13 cho đến khởi chạy hộp thoại người dùng mà dịch vụ yêu cầu được lưu trữ ở đây).
      • src/
        • com/android/wifi/dialog (Chứa các Hoạt động nên các hộp thoại là khởi chạy)
      • AndroidManifest.xml
      • Android.bp

Các thư mục trước cũng chứa mã bên ngoài thành phần hệ thống mô-đun và trong vị trí hiện tại, ví dụ:

  • wificond interface (các lớp trong gói android.net.wifi.nl80211, đối với ví dụ: WifiNl80211Manager)
  • Ứng dụng Lớp phủ tài nguyên mẫu
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

OEM có thể dùng lệnh mẫu để hỗ trợ di chuyển bản vá từ các thư mục dự án ban đầu đến thư mục dự án mới.

Di chuyển bản vá từ khung/cơ sở/wifi

Tạo tệp bản vá trong root/frameworks/base/wifi

git format-patch -1 commit --stdout > patch-file.txt

Áp dụng tệp bản vá cho thư mục gốc/packages/modules/Wifi

git am -p2 --directory=framework/ patch-file.txt

Di chuyển bản vá từ Frameworks/opt/net/wifi

Để di chuyển bản vá từ frameworks/opt/net/wifi, bạn cần thực hiện các bước phức tạp do hệ thống phân cấp thư mục đã bị thay đổi trong quá trình di chuyển.

Trong frameworks/opt/net/wifi, hãy chia cam kết thành 2 cam kết, một cho service/ và một cho tests/.

Di chuyển cam kết HEAD

git reset HEAD^
git add service/
git commit # Enter your commit message. Call this commit service-commit
git add tests/
git commit # Enter your commit message. Call this commit test-commit

Tạo 2 tệp bản vá xác nhận

git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt

Áp dụng 2 bản vá cho gói/mô-đun/Wifi

git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt

Thu gọn hai cam kết trở lại thành một cam kết

git rebase -i

Thay đổi hoạt động của hoạt động xác nhận thứ hai thành squash.

Chỉnh sửa thông báo cam kết nếu phù hợp.

Ranh giới mô-đun cho Android 11

Dịch vụ Wi-Fi sẽ tiếp tục chạy trong quy trình Dịch vụ hệ thống. Wi-Fi mô-đun bao gồm tất cả mã trong packages/modules/Wifi, bao gồm cả những phần sau.

  • Các lớp SDK và dịch vụ cho WifiService, WifiP2pService, WifiAwareService, WifiScannerServiceWifiRttService
  • OsuLogin
  • ServiceWifiResources

Mô-đun này không bao gồm các thành phần sau đây vẫn là một phần của OEM Bản dựng AOSP (Dự án nguồn mở Android).

  • Thành phần gốc wificond trong system/connectivity/wificond
  • Giao diện wificond (các lớp trong gói android.net.wifi.nl80211, dành cho ví dụ: WifiNl80211Manager)
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 không di chuyển tệp, nhưng các bản phát hành trong tương lai có thể. Để giảm công sức liên quan đến việc chuyển các thay đổi về vị trí tệp, chúng tôi đề xuất ngược dòng nhiều thay đổi nhất có thể cho AOSP (sau khi chuyển chúng sang Android 11 hoặc tái cấu trúc các tiện ích độc quyền để sử dụng API Android chính thức hoặc tiện ích HAL của nhà cung cấp để gỡ rối mã nguồn AOSP (Dự án nguồn mở Android).

Định dạng mô-đun

Mô-đun Wi-Fi (com.android.wifi) đang ở Định dạng APEX và dùng được cho các thiết bị chạy Android 11 trở lên. Tệp APEX bao gồm các thành phần sau.

  • Thư viện SDK (framework-wifi.jar)
  • Thư viện dịch vụ (service-wifi.jar)
  • APK OsuLogin (OsuLoginGoogle.apk)
  • APK tài nguyên (ServiceWifiResourcesGoogle.apk)
  • Chứng chỉ WFA

Phần phụ thuộc của mô-đun

Mô-đun Wi-Fi phụ thuộc vào các thành phần sau.

  • Khả năng kết nối
  • Điện thoại
  • Thư viện proto
  • Các thành phần hệ thống khác
  • HAL Wi-Fi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Mô-đun này chỉ tương tác với khung bằng cách sử dụng @SystemApi ổn định (không sử dụng API @hide) và được ký bằng chữ ký của Google thay vì một nền tảng của bạn.

Tuỳ chỉnh

Mô-đun Wi-Fi không hỗ trợ tuỳ chỉnh trực tiếp, nhưng bạn có thể tuỳ chỉnh cấu hình bằng lớp phủ tài nguyên trong thời gian chạy (RRO) hoặc cấu hình của nhà mạng.

Tuỳ chỉnh Wi-Fi

Hình 2. Tuỳ chỉnh mô-đun Wi-Fi

  • Đối với các thao tác tuỳ chỉnh nhỏ, hãy bật hoặc tắt các chế độ cài đặt trong RRO config.
  • Để có nhiều quyền kiểm soát hơn, hãy tuỳ chỉnh các giá trị cấu hình cho mọi khoá cấu hình của nhà mạng được hiển thị dưới tên @SystemAPI.

Sử dụng lớp phủ tài nguyên trong thời gian chạy

Bạn có thể tuỳ chỉnh mô-đun Wi-Fi bằng cách ghi đè các cấu hình mặc định thông qua RRO. Để biết danh sách các cấu hình có thể phủ, hãy tham khảo packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml. Để biết thông tin chi tiết về hành vi định cấu hình, hãy tham khảo packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml. Đối với ứng dụng lớp phủ mẫu, hãy tham khảo device/google/coral/rro_overlays/WifiOverlay/.

device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml đặt thuộc tính targetPackage thành com.android.wifi.resources và APK tài nguyên do mô-đun Wi-Fi phân phối có tên gói com.google.android.wifi.resources, bạn phải đặt các APK lớp phủ targetPackage đến com.google.android.wifi.resources để phủ Wi-Fi cấu hình thành công.

Di chuyển định dạng lưu trữ cấu hình

Mô-đun Wi-Fi chỉ có thể phân tích cú pháp định dạng lưu trữ cấu hình Wi-Fi AOSP. Nếu bạn đã sửa đổi định dạng lưu trữ cấu hình Wi-Fi ( bao gồm danh sách mạng đã lưu của người dùng), bạn phải chuyển đổi dữ liệu đó sang AOSP (Dự án nguồn mở Android) khi nâng cấp thiết bị lên bản phát hành Android bất kỳ có chứa Wi-Fi . Nội dung hấp dẫn cần thiết cho lượt chuyển đổi này nằm trong Lớp android.net.wifi.WifiMigration.

Triển khai việc chuyển đổi định dạng theo các phương thức sau.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Được mô-đun Wi-Fi gọi để truy xuất nội dung tệp trong cửa hàng chia sẻ Wi-Fi đã được chuyển đổi sang định dạng AOSP (Dự án nguồn mở Android).

    • Các tệp này trước đây (trong Android 10) đã được lưu trữ trong /data/misc/wifi trên thiết bị.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Được mô-đun Wi-Fi gọi để truy xuất nội dung tệp lưu trữ dành riêng cho người dùng Wi-Fi đã được chuyển đổi sang định dạng AOSP (Dự án nguồn mở Android).

    • Những tệp này trước đây (trong Android 10) được lưu trữ trong /data/misc_ce/<userId>/wifi thư mục trên thiết bị.

Truy cập các API Wi-Fi ẩn

Các biểu tượng (lớp, phương thức, trường, v.v.) được chú thích bằng @hide trong Wi-Fi không phải là một phần của nền tảng API công khai và không thể truy cập được trên đã cài đặt mô-đun. Thiết bị không có Wi-Fi mô-đun có thể tiếp tục sử dụng các API Wi-Fi @hide bằng cách làm theo các bước sau.

  1. Xoá các quy định hạn chế về khả năng hiển thị đối với framework-wifi lúc packages/modules/Wifi/framework/Android.bp bằng cách thay đổi Thuộc tính impl_library_visibility thành công khai.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Thay đổi quy tắc bản dựng để cho phép các API Wi-Fi @hide của thư viện truy cập. Cho ví dụ: sau đây là quy tắc tạo cho java_library.

    java_library {
        name: "foo-lib",
    
        // no sdk_version attribute defined
    
        libs: [
            "dependency1",
            "dependency2",
        ],
    }
    

    Để cho phép foo-lib truy cập vào thư viện, hãy thay đổi quy tắc bản dựng như sau:

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Đảm bảo rằng framework-wifi.impl xuất hiện trước framework trong danh sách trong tổng số libs. Thứ tự của các phần phụ thuộc trong thuộc tính libs là rất quan trọng.

Truy cập API khung ẩn

Bạn không thể truy cập vào các biểu tượng được chú thích bằng @hide bên ngoài mô-đun Wi-Fi trong mô-đun Wi-Fi. Các thiết bị không có mô-đun Wi-Fi có thể tiếp tục sử dụng @hide API bên ngoài (ví dụ: từ framework.jar) trong service-wifi bằng cách thực hiện các sửa đổi sau đối với frameworks/opt/net/wifi/service/Android.bp.

  1. Trong cả wifi-service-pre-jarjarservice-wifi, hãy thay đổi sdk_version cho core_platform.

  2. Trong cả wifi-service-pre-jarjarservice-wifi, hãy thêm frameworkandroid_system_server_stubs_current vào thuộc tính libs.

  3. Xác minh rằng kết quả giống với mã mẫu sau.

    java_library {
        name: "wifi-service-pre-jarjar",
        ...
        sdk_version: "core_platform",
        ...
        libs: [
            ...
            "framework",
            "android_system_server_stubs_current",
        ],
    }
    ...
    java_library {
        name: "service-wifi",
        ...
        sdk_version: "core_platform",
        ...
        libs: [
            ...
            "framework",
            "android_system_server_stubs_current",
        ],
    }
    

Thử nghiệm

Bộ kiểm tra tính tương thích (CTS) với Android sẽ xác minh bằng cách chạy một tập hợp các bài kiểm thử CTS toàn diện trên mọi mô-đun bản phát hành. Bạn cũng có thể chạy các kiểm thử được mô tả trong phần Kiểm thử, gỡ lỗi và tinh chỉnh Wi-Fi.