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.
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óiandroid.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
,WifiScannerService
vàWifiRttService
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
trongsystem/connectivity/wificond
- Giao diện
wificond
(các lớp trong góiandroid.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.
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/
.
Vì 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.
Xoá các quy định hạn chế về khả năng hiển thị đối với
framework-wifi
lúcpackages/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 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 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ách trong tổng sốlibs
. 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 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
.
Trong cả
wifi-service-pre-jarjar
vàservice-wifi
, hãy thay đổisdk_version
chocore_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ả 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.