一、NetworkFactory注册
frameworks/base/services/java/com/android/server/SystemServer.java
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiService.java
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeImpl.java
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNetworkFactory.java
frameworks/libs/net/common/src_servicescommon/android/net/NetworkFactory.java
frameworks/base/core/java/android/net/ConnectivityManager.java
frameworks/base/services/core/java/com/android/server/ConnectivityService.java
*[SystemServer.java]
├──startOtherServices(@NonNull TimingsTraceAndSlog t)
└──if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI))
// Wifi Service must be started first for wifi-related services.
t.traceBegin("StartWifi");
mSystemServiceManager.startServiceFromJar(WIFI_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);//启动WifiService
t.traceEnd();
t.traceBegin("StartWifiScanning");
mSystemServiceManager.startServiceFromJar(WIFI_SCANNING_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);//启动WifiScanningService
t.traceEnd();
|
*[WifiService.java]
├──onBootPhase(int phase)
└──if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY)
createNotificationChannels(mWifiContext);
mImpl.checkAndStartWifi();
└──else if (phase == SystemService.PHASE_BOOT_COMPLETED)
mImpl.handleBootCompleted();
|
*[WifiServiceImpl.java]
├──handleBootCompleted()
└──mWifiThreadRunner.post(() -> {
mClientModeImpl.handleBootCompleted();})
|
*[ClientModeImpl.java]
*
// Make the network factories.
mNetworkFactory = mWifiInjector.makeWifiNetworkFactory(mNetworkCapabilitiesFilter, mWifiConnectivityManager);//创建WifiNetworkFactory对象
// CHECKSTYLE:OFF IndentationCheck
addState(mDefaultState);
addState(mConnectModeState, mDefaultState);
addState(mL2ConnectedState, mConnectModeState);
addState(mObtainingIpState, mL2ConnectedState);
addState(mConnectedState, mL2ConnectedState);
addState(mRoamingState, mL2ConnectedState);
addState(mDisconnectingState, mConnectModeState);
addState(mDisconnectedState, mConnectModeState);
// CHECKSTYLE:ON IndentationCheck
setInitialState(mDefaultState);
*
├──handleBootCompleted()
└──sendMessage(CMD_BOOT_COMPLETED);
├──DefaultState.processMessage(Message message)
└──case CMD_BOOT_COMPLETED:
└──registerNetworkFactory()
├──regist