โมดูล Wi-Fi สามารถอัปเดตได้ ซึ่งหมายความว่าสามารถรับอัปเดตฟังก์ชันการทำงานนอกรอบการเปิดตัว Android ปกติได้ โมดูลนี้ประกอบด้วยส่วนประกอบต่อไปนี้
รูปที่ 1 ส่วนประกอบและสถาปัตยกรรมโมดูล Wi-Fi
โมดูล Wi-Fi ให้ประโยชน์ดังต่อไปนี้
ผู้ใช้ปลายทางจะได้รับประสบการณ์ Wi-Fi ที่สอดคล้องกันในอุปกรณ์ Android และแก้ไขปัญหาการทำงานร่วมกันผ่านการอัปเดตโมดูล
นักพัฒนาแอปได้รับการกระจายตัวของแพลตฟอร์มที่ลดลง
OEM สามารถตอบสนองความต้องการของผู้ให้บริการในขณะเดียวกันก็ลดต้นทุนสำหรับการปรับแต่งเฉพาะบุคคล (เนื่องจากไม่จำเป็นต้องมีการใช้งานข้อกำหนดเดียวกันที่แตกต่างกันในรูปแบบที่แตกต่างกัน)
ขอบเขตโมดูลสำหรับ Android 12 และ Android 13
-
packages/modules/Wifi
-
framework
-
java/
-
android/net/wifi
(ไฟล์จากframeworks/base/wifi/java
)
-
-
tests/
-
android/net/wifi
(ไฟล์จากframeworks/base/wifi/tests
)
-
-
aidl-export/
-
api/
-
Android.bp
-
-
service/
-
java/
-
com/android/server/wifi
(ไฟล์จากframeworks/opt/net/wifi/service/java
)
-
-
tests/
-
com/android/server/wifi
(ไฟล์จากframeworks/opt/net/wifi/tests
)
-
-
proto/
-
Android.bp
-
proguard.flags
-
wifi.rc
-
-
OsuLogin/
(ไฟล์จากframeworks/base/packages/OsuLogin
) -
ServiceResources/
(ใหม่ใน Android 12 รายการ Overlay APK ถูกเก็บไว้ที่นี่)-
res/
(ใหม่ใน Android 11, การกำหนดค่า Wi-Fi ที่แยกมาจากframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(สิ่งใหม่ในแอป Android 13 เพื่อเปิดกล่องโต้ตอบผู้ใช้ที่ร้องขอโดยบริการจะถูกเก็บไว้ที่นี่)-
src/
-
com/android/wifi/dialog
(ประกอบด้วยกิจกรรมที่เปิดใช้กล่องโต้ตอบ)
-
-
AndroidManifest.xml
-
Android.bp
-
-
ไดเร็กทอรีข้างต้นยังมีโค้ดที่ยังคงอยู่นอกส่วนประกอบระบบโมดูลาร์และอยู่ในตำแหน่งปัจจุบัน เช่น:
-
wificond interface
(คลาสในแพ็คเกจandroid.net.wifi.nl80211
เช่นWifiNl80211Manager
) - แอปตัวอย่างการซ้อนทับทรัพยากร
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
OEM สามารถใช้คำสั่งตัวอย่างเพื่อช่วยย้ายแพตช์จากไดเร็กทอรีโปรเจ็กต์ดั้งเดิมไปยังไดเร็กทอรีโปรเจ็กต์ใหม่
การย้ายแพตช์จากเฟรมเวิร์ก/ฐาน/wifi
กำลังสร้างไฟล์แพตช์ใน root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
การใช้ไฟล์แพทช์กับรูท/แพ็คเกจ/โมดูล/Wifi
git am -p2 --directory=framework/ patch-file.txt
การย้ายแพตช์จาก frameworks/opt/net/wifi
หากต้องการย้ายแพตช์จาก frameworks/opt/net/wifi
จำเป็นต้องมีขั้นตอนที่ซับซ้อนเนื่องจากลำดับชั้นไดเรกทอรีมีการเปลี่ยนแปลงระหว่างการย้ายข้อมูล
ใน frameworks/opt/net/wifi
ให้แบ่งการคอมมิตออกเป็นสองคอมมิต โดยอันหนึ่งสำหรับ service/
และอีกอันสำหรับ tests/
การโอนย้าย 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
กำลังสร้างไฟล์แพทช์คอมมิตสองไฟล์
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
การใช้แพตช์ทั้งสองกับแพ็คเกจ/โมดูล/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
บีบคอมมิตทั้งสองกลับเป็นคอมมิตเดียว
git rebase -i
เปลี่ยนการดำเนินการของการกระทำที่สองเป็น squash
แก้ไขข้อความยืนยันตามความเหมาะสม
ขอบเขตโมดูลสำหรับ Android 11
บริการ Wi-Fi ยังคงทำงานภายในกระบวนการบริการระบบ โมดูล Wi-Fi ประกอบด้วยโค้ดทั้งหมดใน packages/modules/Wifi
รวมถึงสิ่งต่อไปนี้
- SDK และคลาสบริการสำหรับ
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
และWifiRttService
-
OsuLogin
-
ServiceWifiResources
โมดูลนี้ไม่รวมส่วนประกอบต่อไปนี้ ซึ่งยังคงเป็นส่วนหนึ่งของโครงสร้าง AOSP ของ OEM
- องค์ประกอบดั้งเดิม
wificond
ในsystem/connectivity/wificond
- อินเทอร์เฟซ
wificond
(คลาสในแพ็คเกจandroid.net.wifi.nl80211
เช่นWifiNl80211Manager
) -
android.net.wifi.SoftApConfToXmlMigrationUtil
-
android.net.wifi.WifiNetworkScoreCache
-
android.net.wifi.WifiMigration
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Android 11 ไม่ย้ายไฟล์ แต่อาจมีการเปิดตัวในอนาคต เพื่อลดความพยายามที่เกี่ยวข้องกับการเปลี่ยนแปลงตำแหน่งไฟล์ในการย้าย เราขอแนะนำให้ทำการเปลี่ยนแปลงต้นทางกับ AOSP ให้ได้มากที่สุด (หลังจากย้ายไปยัง Android 11 หรือปรับโครงสร้างส่วนขยายที่เป็นกรรมสิทธิ์ใหม่เพื่อใช้ Android API อย่างเป็นทางการหรือส่วนขยาย HAL ของผู้จำหน่ายเพื่อแยกส่วนออกจากโค้ด AOSP
รูปแบบของโมดูล
โมดูล Wi-Fi ( com.android.wifi
) อยู่ในรูปแบบ APEX และพร้อมใช้งานสำหรับอุปกรณ์ที่ใช้ Android 11 ขึ้นไป ไฟล์ APEX มีส่วนประกอบต่อไปนี้
- ไลบรารี SDK (
framework-wifi.jar
) - ไลบรารีบริการ (
service-wifi.jar
) - OsuLogin APK (
OsuLoginGoogle.apk
) - ทรัพยากร APK (
ServiceWifiResourcesGoogle.apk
) - ใบรับรอง WFA
การพึ่งพาโมดูล
โมดูล Wi-Fi ขึ้นอยู่กับส่วนประกอบต่อไปนี้
- การเชื่อมต่อ
- โทรศัพท์
- ไลบรารีโปรโต
- ส่วนประกอบของระบบเบ็ดเตล็ด
- WiFi HAL
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
โมดูลนี้โต้ตอบกับเฟรมเวิร์กโดยใช้ @SystemApi
ที่เสถียรเท่านั้น (ไม่มีการใช้ @hide
API) และลงนามด้วยลายเซ็น Google แทนลายเซ็นแพลตฟอร์ม
การปรับแต่ง
โมดูล Wi-Fi ไม่รองรับการปรับแต่งโดยตรง แต่คุณปรับแต่งการกำหนดค่าได้โดยใช้ Runtime Resource Overlays (RRO) หรือการกำหนดค่าของผู้ให้บริการ
รูปที่ 2 การปรับแต่งโมดูล Wi-Fi
- สำหรับการปรับแต่งเล็กๆ น้อยๆ ให้เปิดหรือปิดการตั้งค่าใน
config
RRO - เพื่อการควบคุมที่มากขึ้น ให้ปรับแต่งค่าการกำหนดค่าสำหรับคีย์การกำหนดค่าผู้ให้บริการใดๆ ที่แสดงเป็น
@SystemAPI
การใช้การซ้อนทับทรัพยากรรันไทม์
คุณสามารถปรับแต่งโมดูล Wi-Fi ได้โดยแทนที่การกำหนดค่าเริ่มต้นโดยใช้ RRO สำหรับรายการการกำหนดค่าแบบซ้อนทับ โปรดดูที่ packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
สำหรับรายละเอียดลักษณะการทำงานของการกำหนดค่า โปรดดูที่ packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
สำหรับตัวอย่างแอปซ้อนทับ โปรดดูที่ device/google/coral/rro_overlays/WifiOverlay/
เนื่องจากไฟล์ device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
จะตั้งค่าแอตทริบิวต์ targetPackage
เป็น com.android.wifi.resources
และ APK ของทรัพยากรที่ส่งโดยโมดูล Wi-Fi มีชื่อแพ็กเกจ com.google.android.wifi.resources
คุณต้องตั้งค่า APKS targetPackage
แบบซ้อนทับเป็น com.google.android.wifi.resources
เพื่อให้การกำหนดค่า Wi-Fi ซ้อนทับได้สำเร็จ
การย้ายรูปแบบที่เก็บข้อมูลการกำหนดค่า
โมดูล Wi-Fi สามารถแยกวิเคราะห์เฉพาะรูปแบบการจัดเก็บข้อมูลการกำหนดค่า AOSP Wi-Fi หากคุณได้แก้ไขรูปแบบที่เก็บข้อมูลการกำหนดค่า Wi-Fi ก่อนหน้านี้ (ซึ่งรวมถึงรายการเครือข่ายที่บันทึกไว้ของผู้ใช้) คุณต้องแปลงข้อมูลนั้นเป็นรูปแบบ AOSP เมื่ออัปเกรดอุปกรณ์เป็น Android ทุกรุ่นที่มีโมดูล Wi-Fi hooks ที่จำเป็นสำหรับการแปลงนี้อยู่ในคลาส android.net.wifi.WifiMigration
ใช้การแปลงรูปแบบในวิธีการต่อไปนี้
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
เรียกใช้โดยโมดูล Wi-Fi เพื่อดึงเนื้อหาไฟล์ร้านค้าที่ใช้ร่วมกัน Wi-Fi ที่ถูกแปลงเป็นรูปแบบ AOSP
ไฟล์เหล่านี้ก่อนหน้านี้ (ใน Android 10) เก็บไว้ในโฟลเดอร์
/data/misc/wifi
บนอุปกรณ์
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
เรียกใช้โดยโมดูล Wi-Fi เพื่อดึงเนื้อหาไฟล์ร้านค้าเฉพาะผู้ใช้ Wi-Fi ที่ถูกแปลงเป็นรูปแบบ AOSP
ไฟล์เหล่านี้ก่อนหน้านี้ (ใน Android 10) ถูกจัดเก็บไว้ในโฟลเดอร์
/data/misc_ce/<userId>/wifi
บนอุปกรณ์
การเข้าถึง Wi-Fi API ที่ซ่อนอยู่
สัญลักษณ์ (คลาส วิธีการ ฟิลด์ ฯลฯ) ที่มีคำอธิบายประกอบด้วย @hide
ในโมดูล Wi-Fi ไม่ได้เป็นส่วนหนึ่งของพื้นผิว API สาธารณะ และไม่สามารถเข้าถึงได้บนอุปกรณ์ที่ติดตั้งโมดูลไว้ อุปกรณ์ที่ไม่มีโมดูล Wi-Fi สามารถใช้ @hide
Wi-Fi API ต่อไปได้โดยใช้ขั้นตอนต่อไปนี้
ลบข้อจำกัดการมองเห็นที่วางอยู่บน
framework-wifi
ที่packages/modules/Wifi/framework/Android.bp
โดยการเปลี่ยนแอตทริบิวต์impl_library_visibility
เป็นสาธารณะjava_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
เปลี่ยนกฎการสร้างเพื่ออนุญาตให้ไลบรารีเข้าถึง
@hide
Wi-Fi API ตัวอย่างเช่น ต่อไปนี้เป็นกฎการ build สำหรับjava_library
java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
หากต้องการอนุญาตการเข้าถึงไลบรารีสำหรับ
foo-lib
ให้เปลี่ยนกฎการสร้างดังที่แสดงด้านล่างjava_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
ตรวจสอบให้แน่ใจว่า
framework-wifi.impl
ปรากฏก่อนframework
ในรายการlibs
ลำดับการขึ้นต่อกันในแอตทริบิวต์libs
มีความสำคัญ
การเข้าถึง API ของเฟรมเวิร์กที่ซ่อนอยู่
สัญลักษณ์ที่มีคำอธิบายประกอบด้วย @hide
ภายนอกโมดูล Wi-Fi ไม่สามารถเข้าถึงได้ด้วยรหัสภายในโมดูล Wi-Fi อุปกรณ์ที่ไม่มีโมดูล Wi-Fi สามารถใช้ @hide
API ภายนอกต่อไปได้ (เช่น จาก framework.jar
) ใน service-wifi
โดยทำการแก้ไขต่อไปนี้กับ frameworks/opt/net/wifi/service/Android.bp
.
ใน ทั้ง
wifi-service-pre-jarjar
และservice-wifi
ให้เปลี่ยนแอตทริบิวต์sdk_version
เป็นcore_platform
ใน ทั้ง
wifi-service-pre-jarjar
และservice-wifi
ให้เพิ่มframework
และandroid_system_server_stubs_current
ให้กับแอตทริบิวต์libs
ตรวจสอบผลลัพธ์จะคล้ายกับตัวอย่างโค้ดต่อไปนี้
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", ], }
การทดสอบ
ชุดทดสอบความเข้ากันได้ของ Android (CTS) จะตรวจสอบการทำงานของโมดูล Wi-Fi โดยการเรียกใช้ชุดการทดสอบ CTS ที่ครอบคลุมในทุกการเปิดตัวโมดูล คุณยังสามารถทำการทดสอบที่อธิบายไว้ใน การทดสอบ การดีบัก และการปรับแต่ง Wi-Fi