Android10禁用wifi随机mac地址,固定mac地址

文章讲述了在Android设备中,为了防止未连接网络时的潜在风险,如何控制WiFi连接时的随机MAC地址。核心代码涉及`config.xml`配置文件和`WifiConfigController`类,通过修改`config_wifi_connected_mac_randomization_supported`设置为`false`并实现初始化时的修改操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、写在前面,为什么固定?因为在Android设备未连接网络时,会使用随机mac地址,如果想ota升级,不固定mac地址会导致风险。

2、控制wifi是否为随机mac地址功能的核心代码

frameworks/base/core/res/res/values/config.xml
packages/apps/Settings/src/com/android/settings/wifi/WifiConfigController.java
core/res/res/values/config.xml:751:    <bool translatable="false" name="config_wifi_connected_mac_randomization_supported">true</bool>

默认为ture 修改为false

grep一下如果有这几个文件,也需要改为false:

device/google/wahoo/overlay/frameworks/base/core/res/res/values/config.xml:370:    <bool name="config_wifi_connected_mac_randomization_supported">true</bool>
device/google/crosshatch/overlay/frameworks/base/core/res/res/values/config.xml:449:    <bool name="config_wifi_connected_mac_randomization_supported">true</bool>
device/google/bonito/overlay/frameworks/base/core/res/res/values/config.xml:412:    <bool name="config_wifi_connected_mac_randomization_supported">true</bool>

3、在初始化的时候进行修改

diff --git a/packages/apps/Settings/src/com/android/settings/wifi/WifiConfigController.java b/packages/apps/Settings/src/com/android/settings/wifi/WifiConfigController.java
old mode 100644 (file)
new mode 100755 (executable)
index 88f6c3e..9baa158
--- a/packages/apps/Settings/src/com/android/settings/wifi/WifiConfigController.java
+++ b/packages/apps/Settings/src/com/android/settings/wifi/WifiConfigController.java
@@ -449,8 +449,8 @@ public class WifiConfigController implements TextWatcher,
         if (!isSplitSystemUser()) {
             mSharedCheckBox.setVisibility(View.GONE);
         }
-
+        mPrivacySettingsSpinner.setSelection(1);
         mConfigUi.setCancelButton(res.getString(R.string.wifi_cancel));
         if (mConfigUi.getSubmitButton() != null) {
             enableSubmitIfAppropriate();

--- a/packages/apps/Settings/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
+++ b/packages/apps/Settings/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
@@ -93,8 +93,9 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
+               android.util.Log.e("privacy","newValue:"+(String) newValue);
         if (mWifiConfiguration != null) {
-            mWifiConfiguration.macRandomizationSetting = Integer.parseInt((String) newValue);
+            mWifiConfiguration.macRandomizationSetting = 1/*Integer.parseInt((String) newValue)*/;
             mWifiManager.updateNetwork(mWifiConfiguration);
 
             // To activate changing, we need to reconnect network. WiFi will auto connect to
@@ -103,7 +104,7 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
                 mWifiManager.disconnect();
             }
         }
-        updateSummary((DropDownPreference) preference, Integer.parseInt((String) newValue));
+        updateSummary((DropDownPreference) preference, 1/*Integer.parseInt((String) newValue)*/);
         return true;
     }
 
@@ -125,9 +126,9 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
      * @return index value of preference
      */
     public static int translateMacRandomizedValueToPrefValue(int macRandomized) {
-        return (macRandomized == WifiConfiguration.RANDOMIZATION_PERSISTENT)
-            ? PREF_RANDOMIZATION_PERSISTENT : PREF_RANDOMIZATION_NONE;
+        return 1/*(macRandomized == WifiConfiguration.RANDOMIZATION_PERSISTENT)
+            ? PREF_RANDOMIZATION_PERSISTENT : PREF_RANDOMIZATION_NONE*/;
     }
 
     /**
<think>嗯,用户的问题是关于Android 13上MTK平台配置config_wifi_connected_mac_randomization_supported设置为true后,连接Wi-Fi时选择使用本机MAC地址,但连接后显示的却不是本机地址。需要解决这个问题。 首先,我得确认这个配置项的作用。config_wifi_connected_mac_randomization_supported通常用于控制是否支持连接后的MAC随机化。设为true可能意味着启用随机化,但用户希望使用本机MAC,所以这可能是一个配置错误。需要检查是否应该设为false来禁用随机化。 然后,用户提到在连接时选择了本机MAC,但实际使用的是随机MAC。这可能涉及到系统默认行为。在Android 10及以上,默认可能启用随机MAC,除非特别配置。可能需要检查Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED的默认值,或者是否有其他覆盖的设置。 接下来,可能涉及代码层的逻辑。需要查看WifiServiceImpl或相关类中的MAC地址处理逻辑,特别是当用户选择使用本机MAC时,系统是否正确处理,没有受到随机化配置的影响。可能需要修改WifiNative或WifiVendorHal的方法,确保返回正确的MAC地址。 另外,可能存在厂商自定义实现的问题。MTK平台可能有自己的实现方式,比如在WifiConfigManager或WifiStateMachine中处理MAC地址的方式不同。需要检查这些地方是否有强制启用随机化的代码,或者是否错误地忽略了用户的选择。 还有,需要确认MAC地址的获取方式是否正确。比如在WifiInfo中获取的MAC地址是否被正确设置,或者是否有其他模块覆盖了这个值。可能需要添加日志来追踪MAC地址的生成和设置过程,找出哪里出现了问题。 最后,考虑是否有其他配置项或资源文件影响了MAC地址的行为,比如overlay配置或设备特定的设置。需要检查frameworks/base/core/res/res/values/config.xml中的相关配置,确保没有冲突的配置项。 综合这些可能的原因,逐步排查配置、系统默认行为、代码逻辑、厂商实现以及日志分析,应该能找到问题所在并进行修复。</think>针对Android 13 MTK平台MAC地址随机化配置异常的问题,以下是分步排查及修改方案: 1. **配置项验证** ```xml <!-- 检查frameworks/base/core/res/res/values/config.xml --> <bool name="config_wifi_connected_mac_randomization_supported">false</bool> ``` 应将值改为`false`禁用系统级MAC随机化支持(原设置为true可能强制覆盖用户选择) 2. **系统服务层修改** ```java // 修改WifiServiceImpl.java的macAddress属性处理 @Override public String getFactoryMacAddress() { // 确保返回原始MAC而非随机值 return mWifiNative.getFactoryMacAddress(mInterfaceName); } // 在WifiConfigManager.java中检查连接逻辑 if (config.isUsingDeviceMacAddress()) { config.setMacAddress(mDeviceConfigInfo.macAddress); } ``` 3. **厂商HAL层适配** ```cpp // 检查mediatek/hardware/wifi/hal/mtk_wifi_hal.cpp int WifiStaEvent::getSupportedFeatureSet() { // 确认未设置WIFI_FEATURE_MAC_RANDOMIZATION标志 return (features & ~WIFI_FEATURE_MAC_RANDOMIZATION); } ``` 4. **设置应用层覆盖** ```java // 检查Settings应用WiFi配置逻辑 ConnectActionListener listener = new ConnectActionListener(); WifiConfiguration config = new WifiConfiguration(); config.setRandomizedMacAddress(WifiConfiguration.RANDOMIZATION_NONE); ``` 5. **内核驱动检查** ```shell # 确认驱动是否支持MAC地址回滚 adb shell dmesg | grep -i macaddr # 预期输出应包含 Permanent MAC: xx:xx:xx:xx:xx:xx ``` 6. **日志验证** ```logcat // 添加调试日志追踪MAC地址选择过程 WifiConfigManager: User selected MAC type=DEVICE, appliedMac=xx:xx:xx:xx:xx:xx WifiNative: Successfully set MAC address to factory value ``` **完整修复流程**: 1. 修改`config_wifi_connected_mac_randomization_supported`为false 2. 在WifiConfiguration处理流程中增加MAC类型强制校验 3. 更新MTK HAL层实现,确保setMacAddress()支持原始MAC写入 4. 在Settings应用中显式设置RANDOMIZATION_NONE 5. 验证驱动层MAC地址写入功能 6. 通过`adb shell ifconfig wlan0`确认实际生效MAC **注意事项**: - 需同步修改`WifiConnectivityManager`中的扫描随机化配置 - 检查MTK私有API`WifiManager.setMacAddressType()`的调用情况 - 确认CTS测试项`testMacAddressRandomization`的兼容性处理 建议通过`adb shell dumpsys wifi | grep "MAC Address"`实时验证各连接阶段的MAC地址状态,确保从配置到驱动层的完整链路使用设备原始MAC
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值