โมดูล 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 configs แยกมาจากframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(ใหม่ใน Android 13 App เพื่อเปิดกล่องโต้ตอบผู้ใช้ที่ร้องขอโดยบริการจะถูกเก็บไว้ที่นี่)-
src/
-
com/android/wifi/dialog
(ประกอบด้วยกิจกรรมที่เปิดใช้กล่องโต้ตอบ)
-
-
AndroidManifest.xml
-
Android.bp
-
-
ไดเร็กทอรีด้านบนยังมีโค้ดที่ยังคงอยู่นอกส่วนประกอบของระบบโมดูลาร์และในตำแหน่งปัจจุบัน เช่น:
-
wificond interface
(คลาสในแพ็คเกจandroid.net.wifi.nl80211
เช่นWifiNl80211Manager
) - ตัวอย่างแอป Resource Overlay
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
OEM สามารถใช้คำสั่งตัวอย่างเพื่อช่วยย้ายแพตช์จากไดเร็กทอรีโปรเจ็กต์เดิมไปยังไดเร็กทอรีโปรเจ็กต์ใหม่
ย้ายแพตช์จาก frameworks/base/wifi
การสร้างไฟล์แพตช์ใน root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
การใช้ไฟล์แพตช์กับ root/packages/modules/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 APIs หรือส่วนขยาย 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 ไม่รองรับการปรับแต่งโดยตรง แต่คุณสามารถปรับแต่งการกำหนดค่าได้โดยใช้ รันไทม์รีซอร์สโอเวอร์เลย์ (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 ตะขอที่จำเป็นสำหรับการแปลงนี้อยู่ในคลาส android.net.wifi.WifiMigration
ดำเนินการแปลงรูปแบบด้วยวิธีต่อไปนี้
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
เรียกใช้โดยโมดูล Wi-Fi เพื่อดึงเนื้อหาไฟล์ที่เก็บแชร์ Wi-Fi ที่แปลงเป็นรูปแบบ AOSP
ไฟล์เหล่านี้เคยถูกจัดเก็บไว้ในโฟลเดอร์
/data/misc/wifi
บนอุปกรณ์ก่อนหน้านี้ (ใน Android 10)
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 ตัวอย่างเช่น ต่อไปนี้คือกฎการสร้างสำหรับ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
บี 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