mnalis / android-wifi-upgrade

convert WiFi passwords from old Android wpa_supplicant.conf to newer (post-Oreo) WifiConfigStore.xml
Apache License 2.0
17 stars 8 forks source link

Needs changes for Android 10 (Lineage 17) #6

Closed matthijskooijman closed 3 years ago

matthijskooijman commented 3 years ago

I tried your script today to import a wpa_supplicant.conf from Android 7 (Fairphone Open OS) into Android 10 (Lineage 17.1), but it needed some changes to work. In the hope that this might benefit others, I'm documenting what I did here.

Without changes, the produced file produces the following logcat warning:

05-17 19:59:18.227   749  2676 E WifiConfigManager: XML deserialization of store failed. All saved networks are lost!
05-17 19:59:18.227   749  2676 E WifiConfigManager: org.xmlpull.v1.XmlPullParserException: Configuration key does not match. Retrieved: "Jodocus"-WPA_PSK, Calculated: "Jodocus"WPA_PSK

Comparing the system-generated file with the script-generated file confirms that there should not be a dash between the SSID and the keymgmt. Other changes are the file version number (1 vs 3), but that does not seem to matter, Android autobumps it. And some of the Allowed fields have a few more bits in the script-generated version (probably because the script allows everything by default). However, the AllowedProtocols field does seem to cause a problem:

05-17 20:04:17.656   741  2710 E SupplicantStaIfaceHal: java.lang.IllegalArgumentException: Invalid protoMask bit in wificonfig: 3

Bit 3 is WAPI, I suspect Android 10 does not support it anymore (here is also some docs with the WAPI value grayed out). Unsetting that bit, fixes the error.

With the changes below, I managed to import 63 of my networks (one failed, but that one is a bit weird in wpa_supplication.conf).

--- a/convert_wifi.pl
+++ b/convert_wifi.pl
@@ -77,8 +77,8 @@ ()
        #   9 OWE - Opportunististic Wireless Encryption
        #   10 SUITE_B_192

-       #my $AllowedProtocols = '03'; # WPA1+WPA2
-       my $AllowedProtocols = '0b'; # WPA1+WPA2+WAPI
+       my $AllowedProtocols = '03'; # WPA1+WPA2
+       #my $AllowedProtocols = '0b'; # WPA1+WPA2+WAPI
        # https://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol
        #   0 WPA1 (deprecated)
        #   1 RSN WPA2/WPA3/IEEE 802.11i
@@ -147,7 +147,7 @@ ()
        }

        $SSID = quote_xml $SSID;
-       my $ConfigKey = "${SSID}-$key_mgmt";
+       my $ConfigKey = "${SSID}$key_mgmt";
        my $priority = $CUR{priority} || 0;

        # output main config block with all variables filled-in
mnalis commented 3 years ago

thanks @matthijskooijman for the report!

ConfigKey conflicts with a6db43416838e6b5e553716542a89149cea6dff9 and AllowedProtocols with b540f4460624b2267be1ba268adf2a3ab478ea79 from PR https://github.com/mnalis/android-wifi-upgrade/pull/5 by @jimklimov

@jimklimov can you share what Android version and phone model you use? Obviously what works for one fails for other and vice versa, so I'd like to at least document it in readme (or maybe add options to select which to use).

mnalis commented 3 years ago

For now I've documented it and created a new wapi git branch, and reverted those two changes in master. If I get more information about what OS version require WAPI support, I'll update and maybe make it a config option. Thanks for your report!

Hodapp87 commented 2 years ago

I see this issue is closed, but figured I'd add a note here: I am on Android 11 & LIneageOS and master appeared to work fine here.

ildar commented 2 years ago

BTW the file location changed to /data/misc/apexdata/com.android.wifi in recent Androids. Plz add to the README

mnalis commented 2 years ago

@ildar thanks, added