Bạn có thể cập nhật mô-đun Wi-Fi, tức là mô-đun này có thể nhận các bản cập nhật về chức năng bên ngoài chu kỳ phát hành Android thông thường. Mô-đun này có các thành phần sau.
Hình 1. Cấu trúc và các thành phần của mô-đun Wi-Fi
Mô-đun Wi-Fi mang lại những lợi ích sau.
Người dùng cuối có được trải nghiệm nhất quán về Wi-Fi trên các thiết bị Android và các bản sửa lỗi cho vấn đề về khả năng tương tác thông qua các bản cập nhật mô-đun.
Nhà phát triển ứng dụng sẽ giảm được tình trạng phân mảnh nền tảng.
Các OEM có thể đáp ứng các yêu cầu của nhà mạng, đồng thời giảm chi phí cho từng hoạt động tuỳ chỉnh (vì họ không cần triển khai các yêu cầu giống nhau theo nhiều cách).
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, tệp kê khai APK lớp phủ đượ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. Ứng dụng này lưu trữ các hộp thoại người dùng do dịch vụ yêu cầu khởi chạy.)src/
com/android/wifi/dialog
(Chứa Hoạt động mà các hộp thoại được khởi chạy từ đó)
AndroidManifest.xml
Android.bp
Các thư mục trước đó cũng chứa mã nằm bên ngoài thành phần hệ thống theo mô-đun và ở vị trí hiện tại, ví dụ:
wificond interface
(các lớp trong góiandroid.net.wifi.nl80211
, chẳng hạn nhưWifiNl80211Manager
)- Ứng dụng Lớp phủ tài nguyên mẫu
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
Các OEM có thể sử dụng các lệnh mẫu để giúp di chuyển các bản vá từ thư mục dự án ban đầu sang thư mục dự án mới.
Di chuyển một bản vá từ frameworks/base/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 vá cho root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Di chuyển một 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 vì hệ thống phân cấp thư mục đã thay đổi trong quá trình di chuyển.
Trong frameworks/opt/net/wifi
, hãy chia cam kết thành hai 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 hai tệp bản vá cam kết
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 packages/modules/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Gộp 2 commit thành 1 commit
git rebase -i
Thay đổi thao tác của cam kết thứ hai thành squash
.
Chỉnh sửa thông báo cam kết cho phù hợp.
Ranh giới mô-đun cho Android 11
Dịch vụ Wi-Fi tiếp tục chạy trong quy trình Dịch vụ hệ thống. Mô-đun Wi-Fi bao gồm tất cả mã trong packages/modules/Wifi
, bao gồm cả mã sau.
- SDK và các lớp dịch vụ cho
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
vàWifiRttService
OsuLogin
ServiceWifiResources
Mô-đun này loại trừ các thành phần sau đây, vẫn là một phần trong bản dựng AOSP của OEM.
wificond
thành phần gốc trongsystem/connectivity/wificond
- Giao diện
wificond
(các lớp trong góiandroid.net.wifi.nl80211
, 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 sau này có thể sẽ di chuyển. Để giảm bớt công sức liên quan đến việc chuyển các thay đổi về vị trí tệp, bạn nên chuyển càng nhiều thay đổi càng tốt lên AOSP (sau khi chuyển các thay đổi đó 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 nhằm tách các tiện ích đó khỏi mã AOSP.
Định dạng mô-đun
Mô-đun Wi-Fi (com.android.wifi
) ở định dạng APEX và có sẵn 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 tương tác với khung hình chỉ 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ì chữ ký của nền tảng.
Tuỳ chỉnh
Bạn không thể tuỳ chỉnh trực tiếp mô-đun Wi-Fi, nhưng bạn có thể tuỳ chỉnh cấu hình bằng cách sử dụng lớp phủ tài nguyên thời gian chạy (RRO) hoặc cấu hình của nhà mạng.
Hình 2. Tuỳ chỉnh mô-đun Wi-Fi
- Đối với các tuỳ chỉnh nhỏ, hãy bật hoặc tắt các chế độ cài đặt trong RRO
config
. - Để kiểm soát tốt hơn, hãy tuỳ chỉnh các giá trị cấu hình cho mọi khoá cấu hình nhà mạng được hiển thị dưới dạng
@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 bằng RRO. Để xem danh sách các cấu hình có thể phủ lên, 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
.
Để biết ứng dụng lớp phủ mẫu, hãy tham khảo device/google/coral/rro_overlays/WifiOverlay/
.
Vì tệp 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 cung cấp có tên gói com.google.android.wifi.resources
, nên bạn phải đặt APKS lớp phủ targetPackage
thành com.google.android.wifi.resources
để lớp phủ các cấu hình Wi-Fi thành công.
Di chuyển định dạng bộ nhớ cấu hình
Mô-đun Wi-Fi chỉ có thể phân tích cú pháp định dạng bộ nhớ cấu hình Wi-Fi AOSP. Nếu trước đây bạn đã sửa đổi định dạng bộ nhớ cấu hình Wi-Fi (bao gồm cả danh sách mạng đã lưu của người dùng), thì bạn phải chuyển đổi dữ liệu đó sang định dạng AOSP khi nâng cấp thiết bị lên bất kỳ bản phát hành Android nào có chứa mô-đun Wi-Fi. Các lệnh gọi cần thiết cho lượt chuyển đổi này nằm trong lớp android.net.wifi.WifiMigration
.
Triển khai quá trình chuyển đổi định dạng trong 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 kho lưu trữ dùng chung Wi-Fi đã được chuyển đổi sang định dạng AOSP.
Trước đây (trong Android 10), các tệp này được lưu trữ trong thư mục
/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.
Trước đây (trong Android 10), các tệp này được lưu trữ trong thư mục
/data/misc_ce/<userId>/wifi
trên thiết bị.
Truy cập vào các API Wi-Fi bị ẩ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 mô-đun Wi-Fi không thuộc giao diện API công khai của mô-đun này và không thể truy cập trên các thiết bị đã cài đặt mô-đun. Các thiết bị không có mô-đun Wi-Fi có thể tiếp tục sử dụng API Wi-Fi @hide
theo các bước sau.
Xoá các hạn chế về chế độ hiển thị được đặt trên
framework-wifi
tạipackages/modules/Wifi/framework/Android.bp
bằng cách thay đổi thuộc tínhimpl_library_visibility
thành công khai.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Thay đổi quy tắc bản dựng để cho phép truy cập vào các API Wi-Fi
@hide
của thư viện. Ví dụ: sau đây là quy tắc tạo chojava_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", ], }
Đảm bảo rằng
framework-wifi.impl
xuất hiện trướcframework
trong danh sáchlibs
. Thứ tự của các phần phụ thuộc trong thuộc tínhlibs
là rất quan trọng.
Truy cập vào các API khung ẩn
Mã trong mô-đun Wi-Fi 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. Các thiết bị không có mô-đun Wi-Fi có thể tiếp tục sử dụng các API bên ngoài @hide
(ví dụ: từ framework.jar
) trong service-wifi
bằng cách sửa đổi frameworks/opt/net/wifi/service/Android.bp
như sau.
Trong cả
wifi-service-pre-jarjar
vàservice-wifi
, hãy thay đổi thuộc tínhsdk_version
thànhcore_platform
.Trong cả
wifi-service-pre-jarjar
vàservice-wifi
, hãy thêmframework
vàandroid_system_server_stubs_current
vào thuộc tínhlibs
.Xác minh rằng kết quả tương tự như mẫu mã 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 xác minh các chức năng của mô-đun Wi-Fi bằng cách chạy một bộ kiểm thử CTS toàn diện trên mọi bản phát hành mô-đun. 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à điều chỉnh Wi-Fi.