โมดูล Wi-Fi สามารถอัปเดตได้ ซึ่งหมายความว่าจะรับการอัปเดตความสามารถต่างๆ ได้ อยู่นอกรอบการเผยแพร่ปกติของ Android โมดูลนี้ประกอบด้วยเนื้อหาต่อไปนี้ คอมโพเนนต์
รูปที่ 1 ส่วนประกอบและสถาปัตยกรรมโมดูล Wi-Fi
โมดูล Wi-Fi มีประโยชน์ดังต่อไปนี้
ผู้ใช้ปลายทางได้รับประสบการณ์การใช้งาน Wi-Fi ที่สอดคล้องกันในอุปกรณ์ Android และการแก้ไขต่างๆ ปัญหาความสามารถในการทำงานร่วมกันผ่านการอัปเดตโมดูล
นักพัฒนาแอปจะได้รับการกระจาย Fragment ของแพลตฟอร์มน้อยลง
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, โฆษณาซ้อนทับ ไฟล์ Manifest ของ 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 สามารถใช้คำสั่งตัวอย่างเพื่อช่วยย้ายแพตช์ จากไดเรกทอรีโปรเจ็กต์เดิมไปยังไดเรกทอรีโปรเจ็กต์ใหม่
ย้ายแพตช์จากเฟรมเวิร์ก/ฐาน/Wi-Fi
สร้างไฟล์แพตช์ในรูท/เฟรมเวิร์ก/ฐาน/Wi-Fi
git format-patch -1 commit --stdout > patch-file.txt
การใช้ไฟล์แพตช์กับรูท/แพ็กเกจ/โมดูล/Wi-Fi
git am -p2 --directory=framework/ patch-file.txt
ย้ายแพตช์จากเฟรมเวิร์ก/opt/net/wifi
ต้องมีขั้นตอนที่ซับซ้อนเพื่อย้ายแพตช์จาก frameworks/opt/net/wifi
เนื่องจากลำดับชั้นของไดเรกทอรีมีการเปลี่ยนแปลงระหว่างการย้ายข้อมูล
ใน frameworks/opt/net/wifi
ให้แบ่งคอมมิตออกเป็น 2 รายการ รายการหนึ่งสำหรับ
service/
และอีก 1 ราคา 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
การสร้างไฟล์แพตช์คอมมิต 2 ไฟล์
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
การใช้แพตช์ 2 รายการกับแพ็กเกจ/โมดูล/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
การบีบทั้ง 2 ข้อให้กลับมาเป็นสัญญาผูกมัดเดียว
git rebase -i
เปลี่ยนการดำเนินการของคอมมิตที่ 2 เป็น squash
แก้ไขข้อความคอมมิตตามความเหมาะสม
ขอบเขตโมดูลสำหรับ Android 11
บริการ Wi-Fi จะทำงานอย่างต่อเนื่องในกระบวนการของบริการระบบ Wi-Fi
โมดูลมีโค้ดทั้งหมดใน packages/modules/Wifi
รวมถึงโค้ดต่อไปนี้
- SDK และคลาสบริการสำหรับ
WifiService
,WifiP2pService
WifiAwareService
WifiScannerService
และWifiRttService
OsuLogin
ServiceWifiResources
โมดูลนี้ไม่รวมส่วนประกอบต่อไปนี้ซึ่งยังคงเป็นส่วนหนึ่งของ OEM บิลด์ AOSP
- คอมโพเนนต์ดั้งเดิม
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 หรือการเปลี่ยนโครงสร้างภายในโค้ดส่วนขยายที่เป็นกรรมสิทธิ์เพื่อใช้งาน API อย่างเป็นทางการของ Android หรือส่วนขยาย HAL ของผู้ให้บริการเพื่อให้แยกออกจากโค้ด AOSP
รูปแบบโมดูล
โมดูล Wi-Fi (com.android.wifi
) อยู่ใน
รูปแบบ APEX และพร้อมให้บริการสำหรับอุปกรณ์
ที่ใช้ Android 11 ขึ้นไป ไฟล์ APEX ประกอบด้วย
คอมโพเนนต์ดังต่อไปนี้
- ไลบรารี SDK (
framework-wifi.jar
) - ไลบรารีบริการ (
service-wifi.jar
) - APK ของ OsuLogin (
OsuLoginGoogle.apk
) - แหล่งข้อมูล APK (
ServiceWifiResourcesGoogle.apk
) - ใบรับรอง WFA
ทรัพยากร Dependency ของโมดูล
โมดูล Wi-Fi ขึ้นอยู่กับคอมโพเนนต์ต่อไปนี้
- การเชื่อมต่อ
- โทรศัพท์
- ไลบรารี Proto
- คอมโพเนนต์ระบบอื่นๆ
- HAL ของ Wi-Fi
wificond
bouncycastle
ksoap2
libnanohttpd
โมดูลนี้จะโต้ตอบกับเฟรมเวิร์กโดยใช้ @SystemApi
ที่เสถียรเท่านั้น (ไม่
การใช้ API ของ @hide
) และลงนามด้วยลายเซ็น Google แทนแพลตฟอร์ม
ลายเซ็น
การปรับแต่ง
โมดูล Wi-Fi ไม่สนับสนุนการกำหนดค่าโดยตรง แต่คุณสามารถปรับแต่ง กำหนดค่าโดยใช้การวางซ้อนทรัพยากรรันไทม์ (RRO) หรือการกำหนดค่าผู้ให้บริการ
รูปที่ 2 การกำหนดค่าโมดูล Wi-Fi
- สำหรับการปรับแต่งเพียงเล็กน้อย ให้เปิดหรือปิดการตั้งค่าใน RRO
config
- ปรับแต่งการกำหนดค่าสำหรับคีย์การกำหนดค่าของผู้ให้บริการเพื่อให้ควบคุมได้มากขึ้น
แสดงเป็น
@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
คุณต้องตั้งค่า APK ที่วางซ้อน
targetPackage
ไปยัง com.google.android.wifi.resources
เพื่อวางซ้อน Wi-Fi
การกำหนดค่าสำเร็จ
ย้ายข้อมูลรูปแบบพื้นที่เก็บข้อมูลการกำหนดค่า
โมดูล Wi-Fi จะแยกวิเคราะห์ได้เฉพาะรูปแบบพื้นที่เก็บข้อมูลการกำหนดค่า Wi-Fi ของ AOSP เท่านั้น ถ้า
คุณได้แก้ไขรูปแบบพื้นที่เก็บข้อมูลการกำหนดค่า Wi-Fi (ซึ่ง
มีรายการเครือข่ายที่บันทึกไว้ของผู้ใช้) คุณจะต้องแปลงข้อมูลดังกล่าวเป็น AOSP
เมื่ออัปเกรดอุปกรณ์เป็น Android รุ่นใดก็ตามที่มี Wi-Fi
ฮุกที่จำเป็นสำหรับ Conversion นี้อยู่ใน
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
โมดูลจะยังคงใช้ API Wi-Fi ของ @hide
ต่อไปได้โดยทำตามขั้นตอนต่อไปนี้
นำข้อจำกัดระดับการมองเห็นออกเมื่อวันที่
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. ], ... }
เปลี่ยนกฎการสร้างเพื่ออนุญาตให้เข้าถึง Wi-Fi API ของไลบรารี
@hide
สำหรับ ต่อไปนี้คือกฎบิลด์สำหรับ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
ลำดับของทรัพยากร Dependency ในแอตทริบิวต์libs
มีนัยสำคัญ
เข้าถึง API เฟรมเวิร์กที่ซ่อนอยู่
เข้าถึงสัญลักษณ์ที่มีคำอธิบายประกอบด้วย @hide
นอกโมดูล Wi-Fi ไม่ได้
ภายในโมดูล Wi-Fi อุปกรณ์ที่ไม่มีโมดูล Wi-Fi สามารถ
ยังคงใช้ API ภายนอก @hide
รายการ (เช่น จาก 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