[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7244":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},7244,"VPNHotspot","Mygod\u002FVPNHotspot","Mygod","Share your VPN connection over hotspot or repeater! (root required)","",null,"Kotlin",5927,519,78,9,0,5,45,163,31,104.15,"Apache License 2.0",false,"master",true,[27,28,29,30,31],"android","hotspot","tethering","vpn","wifi-direct","2026-06-12 04:00:32","# VPN Hotspot\n\n[![Test](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Factions\u002Fworkflows\u002Ftest.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Factions\u002Fworkflows\u002Ftest.yml)\n[![Releases](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002FMygod\u002FVPNHotspot\u002Ftotal.svg)](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Freleases)\n[![Android 10-16.1](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAndroid-10--16.1-3DDC84?logo=android&logoColor=white)](mobile\u002Fbuild.gradle.kts)\n\n[![Get it on Obtainium](https:\u002F\u002Fgithub.com\u002FImranR98\u002FObtainium\u002Fraw\u002Fmain\u002Fassets\u002Fgraphics\u002Fbadge_obtainium.png)](https:\u002F\u002Fapps.obtainium.imranr.dev\u002Fredirect?r=obtainium:\u002F\u002Fadd\u002Fhttps:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot)\n\nConnecting things to your VPN made simple. Share your VPN connection over hotspot or repeater. (**root required**)  \n\nThis app is useful for:\n\n* Connecting things that don't support VPN like Chromecasts behind corporate firewalls;\n* Setting up [gapps](https:\u002F\u002Fsupport.google.com\u002Fpixelphone\u002Fanswer\u002F7158475) behind corporate firewalls;\n* Connecting to your mobile hotspot but you're not bothered to set up VPN on your device;\n* Identifying, monitoring and blocking (unwanted) clients;\n* Bypassing tethering limits by:\n    - (recommended) Use this app with a real VPN\u002Fsocksifier;\n    - Use this app with some adblock\u002FDNS apps that uses system VPN service APIs, i.e. fake VPNs; ([troubleshooting\u002Fa list of apps that work](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Fdiscussions\u002F216))\n    - Try your luck and simply use this app.\n\nP.S. You can also do the similar on [Windows](https:\u002F\u002Fwww.expressvpn.com\u002Fsupport\u002Fvpn-setup\u002Fshare-vpn-connection-windows\u002F),\n[Mac](https:\u002F\u002Fwww.expressvpn.com\u002Fsupport\u002Fvpn-setup\u002Fshare-vpn-connection-mac\u002F),\nand [iOS](http:\u002F\u002Fwww.tetherme.net\u002F).\nI don't know about you but I can't get my stupid Windows 10 to work with\n[hosted network](https:\u002F\u002Fmsdn.microsoft.com\u002Fen-us\u002Flibrary\u002Fwindows\u002Fdesktop\u002Fdd815243(v=vs.85).aspx)\nnow that they introduced this\n[Mobile hotspot](https:\u002F\u002Fsupport.microsoft.com\u002Fen-us\u002Fhelp\u002F4027762\u002Fwindows-use-your-pc-as-a-mobile-hotspot).\n\n## Features That Requires System App Installation\n\nThe following features in the app requires it to be installed under `\u002Fsystem\u002Fpriv-app` since some restricted permissions are required.\nOne way to do this is to use [App systemizer for Magisk](https:\u002F\u002Fgithub.com\u002FMagisk-Modules-Repo\u002Fterminal_systemizer).\n\n* (Android 8-10, since app v2.4.0) `android.permission.OVERRIDE_WIFI_CONFIG`: Read\u002Fwrite system Wi-Fi hotspot configuration. ([#117](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Fissues\u002F117))\n\nInstalling as system app also has the side benefit of launching root daemon less frequently due to having privileged permissions listed below.\n\n* `android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS`\n* `android.permission.LOCAL_MAC_ADDRESS`\n* `android.permission.MANAGE_USB`\n* `android.permission.OVERRIDE_WIFI_CONFIG`\n* `android.permission.READ_WIFI_CREDENTIAL`\n* `android.permission.TETHER_PRIVILEGED`\n* `android.permission.WRITE_SECURE_SETTINGS`\n\nWhenever you install an app update, if there was a new protected permission addition (last updated in v2.17.1), you should update the app installed in system as well to make the system grant the privileged permission.\n\n## Settings and How to Use Them\n\nDefault settings are picked to suit general use cases and maximize compatibility but it might not be optimal for battery\n life.\n\n### Upstream\n\n* Upstream network interface: Main upstream regex used to reroute traffic.\n  Leave blank for auto detect system VPN (allow\u002Fdo not bypass this app to use VPN for it to work).\n  Put `none` (or `a^` or other similarly invalid entries) to suppress tethering VPN.\n* Fallback upstream:\n  Fallback upstream is used when some VPN leave certain routes fallback to default network interface.\n  Leave blank for auto detect.\n  Put `none` (or `a^` or other similarly invalid entries) to forbid falling back.\n  Put other interface name if you feel like it.\n* (Android 12+) Platform-managed IPsec tunnel VPNs such as Pixel VPN and some `VpnManager`\u002F`Ikev2VpnProfile`\n  profiles may need a compatibility workaround. VPN Hotspot updates the live IPv4 tunnel forwarding policy in\n  place while sharing and relies on Android to recreate the stock policy when that tunnel is rebuilt.\n* IP Masquerade Mode:\n  - None:\n    Nothing will be done to remap address\u002Fport from downstream.\n    I find turning this option off sometimes works better for dummy VPNs like ad-blockers and socksifiers than Simple mode, e.g. Shadowsocks.\n    But you should never use this for real VPNs like OpenVPN, etc.\n  - Simple: Source address\u002Fport from downstream packets will be remapped and that's about it.\n  - Android Netd Service:\n    Let your system handle masquerade.\n    Android system will do a few extra things to make things like FTP and tethering traffic counter work.\n    You should probably not use this if you are trying to hide your tethering activity from your carrier.\n\n### Downstream\n\n* IPv6 mode:\n  - System:\n    Leave IPv6 handling to the platform\u002Fsystem routing setup.\n  - Block:\n    Prevent IPv6 leaks on downstream interfaces.\n  - NAT:\n    Assigns a deterministic app-owned ULA `\u002F64` to the downstream and proxies downstream IPv6 TCP\u002FUDP through a shared root daemon.\n    This mode operates in userspace thus performance might be degraded.\n* Tethering hardware acceleration:\n    This is a shortcut to the same setting in system Developer options.\n    Turning this option off is probably a must for making VPN tethering over system tethering work,\n     but it might also decrease your battery life while tethering is enabled.\n\n### Misc\n\n* Keep Wi-Fi alive: Acquire Wi-Fi locks when repeater, temporary hotspot or system VPN hotspot is activated.\n   - Choose \"System default\" (default) to save battery life;\n   - Choose \"Disable power save\" to decrease packet latency.\n     An example use case is when a voice connection needs to be kept active even after the device screen goes off.\n     Using this mode may improve the call quality.\n     Requires support from the hardware.\n     Deprecated in Android 14 and is automatically replaced with \"Low latency mode\".\n     Deprecation is due to the impact of it on power dissipation.\n     The \"Low latency mode\" provides much of the same desired functionality with less impact on power dissipation.\n   - Choose \"Low latency mode\" to optimize for reduced packet latency, and this might result in:\n     1. Reduced battery life.\n     2. Reduced throughput.\n     3. Reduced frequency of Wi-Fi scanning.\n        This may cause the device not roaming or switching to the AP with highest signal quality, and location accuracy may be reduced.\n     Example use cases are real time gaming or virtual reality applications where low latency is a key factor for user experience.\n     Requires support from the hardware.\n     Note: Requires this app running in foreground with screen on.\n* Start repeater on boot: Self explanatory.\n* Repeater safe mode: (Android 10, March 2020 security patch or newer)\n  You might be required to turn this mode off if you want to use short SSID (at most 8 bytes long).\n  Unsafe mode might not work for your device, and there is a small chance you will soft brick your device (recoverable).\n  See [#153](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Fissues\u002F153) for more information.\n* Use system configuration for temporary hotspot: (Android 11 or newer)\n  Attempt to start a temporary hotspot using system Wi-Fi hotspot configuration.\n  This feature is most likely only functional on Android 12 or newer.\n  Enabling this switch will also prevent other apps from using the [local-only hotspot](https:\u002F\u002Fdeveloper.android.com\u002Fguide\u002Ftopics\u002Fconnectivity\u002Flocalonlyhotspot) functionality.\n* Network status monitor mode: This option controls how the app monitors connected devices as well as interface changes\n  (when custom upstream is used).\n  Requires restarting the app to take effects. (best way is to go to app info and force stop)\n   - Netlink monitor: Use Linux netlink mechanism, most battery efficient but may not work with SELinux enforcing mode.\n     Sometimes auto fallbacks to Netlink monitor with root and Poll.\n   - Netlink monitor with root: Same as above but runs netlink as root. This option works well with SELinux enforcing mode\n     but might still be bugged on devices heavily modified by OEM and\u002For carriers. Sometimes auto fallbacks to Poll.\n   - Poll: (default) Update network information manually every second. Least battery efficient but it should work on most\n     devices. Recommended to switch to other modes if possible.\n   - Poll with root: Same as Poll but polling is done using a root shell.\n\n\n## Q & A\n\nSearch the [issue tracker](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Fissues) for more.\n\n### [What changes exactly can this app do to my system? (and how to revert them)](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Fissues\u002F8#issuecomment-448529512)\n\n### [No root?](https:\u002F\u002Fgithub.com\u002FMygod\u002FVPNHotspot\u002Fissues\u002F62)\n\n### Failed to create group due to internal error\u002Frepeater shuts down after a while?\n\nThis could caused by the Wi-Fi channel you selected is no longer available, due to:\n\n1. Your device doesn't support operating on this channel, or\n2. There is some nearby Wi-Fi direct device that broadcasted that it can't operate on the channel you picked.\n\nFor maximum stability, you need to set channel = 0 so that your device will pick a channel automatically.\nYou can also use WPS to connect your 2.4GHz-only device to force the repeater to switch from 5GHz to 2.4GHz for this time.\n\n## Private APIs used \u002F Assumptions for Android customizations\n\n_a.k.a. things that can go wrong if this app doesn't work._\n\nThis is a list of stuff that might impact this app's functionality if unavailable.\nThis is only meant to be an index.\nYou can read more in the source code.\nAPI restrictions are updated up to [SHA-256 checksum `9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074`](https:\u002F\u002Fgithub.com\u002FMygod\u002Fhiddenapi\u002Fcommit\u002F2f90e9da30976febeb0630cba48c4da0116c323d).\n\nGreylisted\u002Fblacklisted APIs or internal constants: (some constants are hardcoded or implicitly used)\n\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->getLastTetherError(Ljava\u002Flang\u002FString;)I,max-target-r`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->EXTRA_ACTIVE_LOCAL_ONLY:Ljava\u002Flang\u002FString;,lo-prio,max-target-o`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->EXTRA_ACTIVE_TETHER:Ljava\u002Flang\u002FString;,max-target-r`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->EXTRA_AVAILABLE_TETHER:Ljava\u002Flang\u002FString;,max-target-r`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->ACTION_TETHER_STATE_CHANGED:Ljava\u002Flang\u002FString;,max-target-r`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->EXTRA_ERRORED_TETHER:Ljava\u002Flang\u002FString;,max-target-r`\n* (since API 30) `Landroid\u002Fnet\u002FConnectivityModuleConnector;->IN_PROCESS_SUFFIX:Ljava\u002Flang\u002FString;`\n* (since API 31) `Landroid\u002Fnet\u002FINetd$Stub;->asInterface(Landroid\u002Fos\u002FIBinder;)Landroid\u002Fnet\u002FINetd;`\n* (since API 31) `Landroid\u002Fnet\u002FINetd;->ipSecUpdateSecurityPolicy(IIILjava\u002Flang\u002FString;Ljava\u002Flang\u002FString;IIII)V`\n* (since API 30) `Landroid\u002Fnet\u002FIIntResultListener$Stub;->\u003Cinit>()V,blocked`\n* (since API 30) `Landroid\u002Fnet\u002FIIntResultListener;->onResult(I)V,blocked`\n* (since API 30) `Landroid\u002Fnet\u002FITetheringConnector;->stopTethering(ILjava\u002Flang\u002FString;Landroid\u002Fnet\u002FIIntResultListener;)V,blocked`\n* (since API 30) `Landroid\u002Fnet\u002FITetheringConnector;->stopTethering(ILjava\u002Flang\u002FString;Ljava\u002Flang\u002FString;Landroid\u002Fnet\u002FIIntResultListener;)V,blocked`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$ConnectorConsumer;->onConnectorAvailable(Landroid\u002Fnet\u002FITetheringConnector;)V,blocked`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onTetherableInterfaceRegexpsChanged(Landroid\u002Fnet\u002FTetheringManager$TetheringInterfaceRegexps;)V,blocked`\n* (since API 31) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onSupportedTetheringTypes(Ljava\u002Futil\u002FSet;)V,blocked`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->getConnector(Landroid\u002Fnet\u002FTetheringManager$ConnectorConsumer;)V,blocked`\n* `Landroid\u002Fnet\u002FTetheringManager;->TETHER_ERROR_*:I,blocked`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHERING_VIRTUAL:I,blocked`\n* (since API 31) `Landroid\u002Fnet\u002FIpSecManager;->DIRECTION_FWD:I,blocked`\n* (since API 31) `Landroid\u002Fnet\u002FIpSecManager;->INVALID_SECURITY_PARAMETER_INDEX:I,blocked`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->getCountryCode()Ljava\u002Flang\u002FString;,blocked`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setRandomizedMacAddress(Landroid\u002Fnet\u002FMacAddress;)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,blocked`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->BAND_TYPES:[I,blocked`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getApInstanceIdentifier()Ljava\u002Flang\u002FString;,blocked`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FWifiClient;->getApInstanceIdentifier()Ljava\u002Flang\u002FString;,blocked`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration$KeyMgmt;->FT_PSK:I,lo-prio,max-target-o`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration$KeyMgmt;->WPA_PSK_SHA256:I,blocked`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration;->AP_BAND_2GHZ:I,lo-prio,max-target-o`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration;->AP_BAND_5GHZ:I,lo-prio,max-target-o`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration;->AP_BAND_ANY:I,lo-prio,max-target-o`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration;->apBand:I,unsupported`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration;->apChannel:I,unsupported`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiContext;->ACTION_RESOURCES_APK:Ljava\u002Flang\u002FString;,blocked`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onNumClientsChanged(I)V,greylist-max-o`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->cancelLocalOnlyHotspotRequest()V,unsupported`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pConfig$Builder;->MAC_ANY_ADDRESS:Landroid\u002Fnet\u002FMacAddress;,blocked`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pConfig$Builder;->mNetworkName:Ljava\u002Flang\u002FString;,blocked`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pGroup;->interfaceAddress:[B,unsupported`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager;->startWps(Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$Channel;Landroid\u002Fnet\u002Fwifi\u002FWpsInfo;Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$ActionListener;)V,unsupported`\n* (prior to API 30) `Landroid\u002Fprovider\u002FSettings$Global;->SOFT_AP_TIMEOUT_ENABLED:Ljava\u002Flang\u002FString;,lo-prio,max-target-o`\n* (on API 34) `Landroid\u002Fservice\u002Fquicksettings\u002FTileService;->mToken:Landroid\u002Fos\u002FIBinder;,lo-prio,max-target-o`\n* (prior to API 30) `Lcom\u002Fandroid\u002Finternal\u002FR$array;->config_tether_bluetooth_regexs:I,max-target-q`\n* (prior to API 30) `Lcom\u002Fandroid\u002Finternal\u002FR$array;->config_tether_usb_regexs:I,max-target-q`\n* (prior to API 30) `Lcom\u002Fandroid\u002Finternal\u002FR$array;->config_tether_wifi_regexs:I,max-target-q`\n* (on API 29) `Lcom\u002Fandroid\u002Finternal\u002FR$bool;->config_wifi_p2p_mac_randomization_supported:I,blacklist`\n* (prior to API 30) `Lcom\u002Fandroid\u002Finternal\u002FR$integer;->config_wifi_framework_soft_ap_timeout_delay:I,greylist-max-o`\n* `Lcom\u002Fandroid\u002Finternal\u002FR$string;->config_ethernet_iface_regex:I,lo-prio,max-target-o`\n* `Lcom\u002Fandroid\u002Fserver\u002Fwifi\u002Fp2p\u002FWifiP2pServiceImpl;->ANONYMIZED_DEVICE_ADDRESS:Ljava\u002Flang\u002FString;`\n* (since API 30) `Lcom\u002Fandroid\u002Fserver\u002FSystemServer;->TETHERING_CONNECTOR_CLASS:Ljava\u002Flang\u002FString;`\n* (since API 33) `Ldalvik\u002Fsystem\u002FBaseDexClassLoader;->pathList:Ldalvik\u002Fsystem\u002FDexPathList;,unsupported`\n* (since API 33) `Ldalvik\u002Fsystem\u002FDexPathList;->nativeLibraryDirectories:Ljava\u002Futil\u002FList;,unsupported`\n* (prior to API 33) `Ljava\u002Flang\u002Finvoke\u002FMethodHandles$Lookup;->\u003Cinit>(Ljava\u002Flang\u002FClass;I)V,unsupported`\n* (prior to API 33) `Ljava\u002Flang\u002Finvoke\u002FMethodHandles$Lookup;->ALL_MODES:I,lo-prio,max-target-o`\n\u003Cdetails>\n\u003Csummary>Hidden whitelisted APIs: (same catch as above, however, things in this list are less likely to be broken)\u003C\u002Fsummary>\n\n* `Landroid\u002Fbluetooth\u002FBluetoothPan;->isTetheringOn()Z,sdk,system-api,test-api`\n* `Landroid\u002Fbluetooth\u002FBluetoothProfile;->PAN:I,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager$OnStartTetheringCallback;->\u003Cinit>()V,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager$OnStartTetheringCallback;->onTetheringFailed()V,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager$OnStartTetheringCallback;->onTetheringStarted()V,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->startTethering(IZLandroid\u002Fnet\u002FConnectivityManager$OnStartTetheringCallback;Landroid\u002Fos\u002FHandler;)V,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002FConnectivityManager;->stopTethering(I)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FLinkAddress;->getDeprecationTime()J,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FLinkAddress;->getExpirationTime()J,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002FLinkProperties;->getAllInterfaceNames()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002FLinkProperties;->getAllRoutes()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheredClient$AddressInfo;->getAddress()Landroid\u002Fnet\u002FLinkAddress;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheredClient$AddressInfo;->getHostname()Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheredClient;->getAddresses()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheredClient;->getMacAddress()Landroid\u002Fnet\u002FMacAddress;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheredClient;->getTetheringType()I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onClientsChanged(Ljava\u002Futil\u002FCollection;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onError(Ljava\u002Flang\u002FString;I)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onError(Landroid\u002Fnet\u002FTetheringInterface;I)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onLocalOnlyInterfacesChanged(Ljava\u002Futil\u002FSet;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onOffloadStatusChanged(I)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onTetherableInterfacesChanged(Ljava\u002Futil\u002FList;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onTetherableInterfacesChanged(Ljava\u002Futil\u002FSet;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onTetheringSupported(Z)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringEventCallback;->onUpstreamChanged(Landroid\u002Fnet\u002FNetwork;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringRequest$Builder;->setExemptFromEntitlementCheck(Z)Landroid\u002Fnet\u002FTetheringManager$TetheringRequest$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager$TetheringRequest$Builder;->setShouldShowEntitlementUi(Z)Landroid\u002Fnet\u002FTetheringManager$TetheringRequest$Builder;,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002FTetheringManager;->ACTION_TETHER_STATE_CHANGED:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002FTetheringManager;->EXTRA_ACTIVE_LOCAL_ONLY:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002FTetheringManager;->EXTRA_ACTIVE_TETHER:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002FTetheringManager;->EXTRA_AVAILABLE_TETHER:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002FTetheringManager;->EXTRA_ERRORED_TETHER:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002FTetheringManager;->TETHERING_BLUETOOTH:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHERING_ETHERNET:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHERING_NCM:I,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002FTetheringManager;->TETHERING_USB:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHERING_WIFI_P2P:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHERING_WIGIG:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHER_HARDWARE_OFFLOAD_FAILED:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHER_HARDWARE_OFFLOAD_STARTED:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002FTetheringManager;->TETHER_HARDWARE_OFFLOAD_STOPPED:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FDeauthenticationReasonCode;->REASON_*:I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->SOFTAP_FEATURE_BAND_24G_SUPPORTED:J,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->SOFTAP_FEATURE_BAND_5G_SUPPORTED:J,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->SOFTAP_FEATURE_BAND_60G_SUPPORTED:J,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->SOFTAP_FEATURE_BAND_6G_SUPPORTED:J,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->SOFTAP_FEATURE_*:J,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->areFeaturesSupported(J)Z,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->getMaxSupportedClients()I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;->getSupportedChannelList(I)[I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->\u003Cinit>(Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;)V,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setAllowedAcsChannels(I[I)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setAllowedClientList(Ljava\u002Futil\u002FList;)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setAutoShutdownEnabled(Z)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setBand(I)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setBlockedClientList(Ljava\u002Futil\u002FList;)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setBridgedModeOpportunisticShutdownEnabled(Z)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setBridgedModeOpportunisticShutdownTimeoutMillis(J)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setBssid(Landroid\u002Fnet\u002FMacAddress;)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setChannel(II)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setClientControlByUserEnabled(Z)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 36) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setClientIsolationEnabled(Z)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setHiddenSsid(Z)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setIeee80211axEnabled(Z)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setIeee80211beEnabled(Z)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setMacRandomizationSetting(I)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setMaxChannelBandwidth(I)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setMaxNumberOfClients(I)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setPassphrase(Ljava\u002Flang\u002FString;I)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setShutdownTimeoutMillis(J)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30, prior to API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setSsid(Ljava\u002Flang\u002FString;)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setVendorElements(Ljava\u002Futil\u002FList;)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;->setWifiSsid(Landroid\u002Fnet\u002Fwifi\u002FWifiSsid;)Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration$Builder;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->BAND_2GHZ:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->BAND_5GHZ:I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->BAND_60GHZ:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->BAND_6GHZ:I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->BAND_*:I,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->DEFAULT_TIMEOUT:J,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->RANDOMIZATION_NONE:I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->RANDOMIZATION_NON_PERSISTENT:I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->RANDOMIZATION_PERSISTENT:I,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getAllowedAcsChannels(I)[I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getAllowedClientList()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getBand()I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getBlockedClientList()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getBridgedModeOpportunisticShutdownTimeoutMillis()J,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getChannel()I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getChannels()Landroid\u002Futil\u002FSparseIntArray;,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getMacRandomizationSetting()I,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getMaxChannelBandwidth()I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getMaxNumberOfClients()I,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getPersistentRandomizedMacAddress()Landroid\u002Fnet\u002FMacAddress;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getShutdownTimeoutMillis()J,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->getVendorElements()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->isAutoShutdownEnabled()Z,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->isBridgedModeOpportunisticShutdownEnabled()Z,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->isClientControlByUserEnabled()Z,sdk,system-api,test-api`\n* (since API 36) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->isClientIsolationEnabled()Z,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->isIeee80211axEnabled()Z,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->isIeee80211beEnabled()Z,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;->isUserConfiguration()Z,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->CHANNEL_WIDTH_*:I,sdk,system-api,test-api`\n* (since API 33) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->CHANNEL_WIDTH_AUTO:I,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->CHANNEL_WIDTH_INVALID:I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getAutoShutdownTimeoutMillis()J,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getBandwidth()I,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getBssid()Landroid\u002Fnet\u002FMacAddress;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getFrequency()I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getMldAddress()Landroid\u002Fnet\u002FMacAddress;,sdk,system-api,test-api`\n* (since API 35) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getVendorData()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;->getWifiStandard()I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiClient;->getDisconnectReason()I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiClient;->getMacAddress()Landroid\u002Fnet\u002FMacAddress;,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration$KeyMgmt;->WPA2_PSK:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onBlockedClientConnecting(Landroid\u002Fnet\u002Fwifi\u002FWifiClient;I)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onCapabilityChanged(Landroid\u002Fnet\u002Fwifi\u002FSoftApCapability;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onClientsDisconnected(Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;Ljava\u002Futil\u002FList;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onConnectedClientsChanged(Ljava\u002Futil\u002FList;)V,sdk,system-api,test-api`\n* (on API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onInfoChanged(Landroid\u002Fnet\u002Fwifi\u002FSoftApInfo;)V,sdk,system-api,test-api`\n* (since API 31) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onInfoChanged(Ljava\u002Futil\u002FList;)V,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;->onStateChanged(II)V,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->EXTRA_WIFI_AP_FAILURE_REASON:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->EXTRA_WIFI_AP_INTERFACE_NAME:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->EXTRA_WIFI_AP_STATE:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->SAP_CLIENT_BLOCK_REASON_CODE_*:I,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->SAP_START_FAILURE_*:I,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->WIFI_AP_STATE_CHANGED_ACTION:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->WIFI_AP_STATE_DISABLED:I,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->WIFI_AP_STATE_DISABLING:I,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->WIFI_AP_STATE_ENABLED:I,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->WIFI_AP_STATE_ENABLING:I,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->WIFI_AP_STATE_FAILED:I,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->getSoftApConfiguration()Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->getWifiApConfiguration()Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration;,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->isApMacRandomizationSupported()Z,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->registerSoftApCallback(Ljava\u002Futil\u002Fconcurrent\u002FExecutor;Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;)V,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->setSoftApConfiguration(Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;)Z,sdk,system-api,test-api`\n* (prior to API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->setWifiApConfiguration(Landroid\u002Fnet\u002Fwifi\u002FWifiConfiguration;)Z,sdk,system-api,test-api`\n* (since API 30) `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->startLocalOnlyHotspot(Landroid\u002Fnet\u002Fwifi\u002FSoftApConfiguration;Ljava\u002Futil\u002Fconcurrent\u002FExecutor;Landroid\u002Fnet\u002Fwifi\u002FWifiManager$LocalOnlyHotspotCallback;)V,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002FWifiManager;->unregisterSoftApCallback(Landroid\u002Fnet\u002Fwifi\u002FWifiManager$SoftApCallback;)V,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pGroupList;->getGroupList()Ljava\u002Futil\u002FList;,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$PersistentGroupInfoListener;->onPersistentGroupInfoAvailable(Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pGroupList;)V,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager;->deletePersistentGroup(Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$Channel;ILandroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$ActionListener;)V,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager;->requestPersistentGroupInfo(Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$Channel;Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$PersistentGroupInfoListener;)V,sdk,system-api,test-api`\n* `Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager;->setWifiP2pChannels(Landroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$Channel;IILandroid\u002Fnet\u002Fwifi\u002Fp2p\u002FWifiP2pManager$ActionListener;)V,sdk,system-api,test-api`\n* `Landroid\u002Fprovider\u002FSettings$Global;->TETHER_OFFLOAD_DISABLED:Ljava\u002Flang\u002FString;,sdk,system-api,test-api`\n\n\u003C\u002Fdetails>\n\nNonexported system resources:\n\n* (since API 30) `@com.android.networkstack.tethering:array\u002Fconfig_tether_bluetooth_regexs`\n* (since API 30) `@com.android.networkstack.tethering:array\u002Fconfig_tether_ncm_regexs`\n* (since API 30) `@com.android.networkstack.tethering:array\u002Fconfig_tether_usb_regexs`\n* (since API 30) `@com.android.networkstack.tethering:array\u002Fconfig_tether_wifi_p2p_regexs`\n* (since API 30) `@com.android.networkstack.tethering:array\u002Fconfig_tether_wifi_regexs`\n* (since API 30) `@com.android.networkstack.tethering:array\u002Fconfig_tether_wigig_regexs`\n* (since API 30) `@com.android.wifi.resources:bool\u002Fconfig_wifi_p2p_mac_randomization_supported`\n* (since API 31) `@com.android.wifi.resources:integer\u002Fconfig_wifiFrameworkSoftApShutDownIdleInstanceInBridgedModeTimeoutMillisecond`\n* (since API 30) `@com.android.wifi.resources:integer\u002Fconfig_wifiFrameworkSoftApShutDownTimeoutMilliseconds`\n\nOther:\n\n* Activity `com.android.settings\u002F.Settings$TetherSettingsActivity` is assumed to be exported.\n* `IPv6 NAT` mode depends on the iptables `TPROXY` target and transparent sockets.\n* (since API 30) Relevant tethering APEX classes used here, including `android.net.ITetheringConnector`\n  and, on API 31+, `android.net.INetd*`, may be jarjar-relocated under the optional prefixes\n  `android.net.connectivity` or `com.android.connectivity`.\n* (since API 30) When runtime `TetheringEventCallback.onLocalOnlyInterfacesChanged` is present, AOSP dispatches\n  startup tether-state callbacks from one `executor.execute { ... }` block in `onCallbackStarted`,\n  and later tether-state updates from one `executor.execute { ... }` block in\n  `onTetherStatesChanged`.\n* For `ip rule` priorities, AOSP local-network\u002Ftethering priorities are assumed to be 17000\u002F18000\non API 29..30 and 20000\u002F21000 on API 31+. VPNHotspot uses the 175xx..179xx or 205xx..209xx\ngap between them.\nFor route-table numbers, Android interface tables are assumed to start at ifindex + 1000; `IPv6 NAT`\nTPROXY uses table 900 to stay below that range and away from AOSP fixed tables 97..99 and kernel built-ins.\nClean flushes table 900 because that table is reserved by VPNHotspot. `IPv6 NAT` also adds its\ndeterministic ULA \u002F64 route to Android's shared `local_network` table; Clean never flushes that table\nand only deletes VPNHotspot prefixes reconstructed from current interface names. Clean batches\none-shot deterministic `ip` cleanup commands with `\u002Fsystem\u002Fbin\u002Fip -force -batch -` and one-shot\niptables cleanup with `iptables-restore -w --noflush` and `ip6tables-restore -w --noflush`, which\nare assumed to be supported by Android's bundled iproute2 and iptables on API 29+.\nFor packet marks, Android fwmark is assumed to use low bits for netId and routing metadata; `IPv6 NAT`\nTPROXY uses masked high reserved bits `0x10000000\u002F0x10000000`. Daemon reply sockets use the\nAOSP local-network protected mark `0x00030063`, which assumes `LOCAL_NET_ID = 99` plus the\n`explicitlySelected` and `protectedFromVpn` fwmark bits.\n\nUndocumented system binaries are all bundled and executable:\n\n* `iptables-save`, `ip6tables-save`;\n* `iptables-restore`, `ip6tables-restore` (`-w --noflush`);\n* `echo`;\n* `\u002Fsystem\u002Fbin\u002Fip` (`address link monitor neigh rule unreachable`);\n* `ndc` (`ipfwd nat network`);\n* `iptables`, `ip6tables` (with correct version corresponding to API level, `-nvx -L \u003Cchain>`);\n* `\u002Fsystem\u002Fbin\u002Flinker`, `\u002Fsystem\u002Fbin\u002Flinker64` (`path.zip!\u002Fprogram`);\n* `sh`;\n* `su`.\n\nWi-Fi driver `wpa_supplicant`:\n\n* P2P configuration file is assumed to be saved to [`\u002Fdata\u002Fvendor\u002Fwifi\u002Fwpa\u002Fp2p_supplicant.conf` or `\u002Fdata\u002Fmisc\u002Fwifi\u002Fp2p_supplicant.conf`](https:\u002F\u002Fandroid.googlesource.com\u002Fplatform\u002Fexternal\u002Fwpa_supplicant_8\u002F+\u002F0b4856b6dc451e290f1f64f6af17e010be78c073\u002Fwpa_supplicant\u002Fhidl\u002F1.1\u002Fsupplicant.cpp#26) and have reasonable format;\n* Android system is expected to restart `wpa_supplicant` after it terminates.\n","VPNHotspot 是一款用于通过热点或中继器共享您的VPN连接的Android应用（需要root权限）。它使用Kotlin编写，具备将设备的VPN连接分享给不支持直接设置VPN的其他设备的能力，如Chromecast等。此外，该应用还支持识别、监控以及阻止不需要的客户端，并且能够绕过某些运营商的流量限制。适用于希望在企业防火墙后使用Google服务、或是不愿意在个人设备上单独配置VPN但仍需安全上网的场景。项目采用Apache License 2.0许可协议，拥有活跃的社区支持和持续更新。",2,"2026-06-11 03:11:21","top_language"]