Total Pageviews

Showing posts with label android. Show all posts
Showing posts with label android. Show all posts

Wednesday, 23 September 2026

安卓手机的VPNHotspot app

 Share your VPN connection over hotspot or repeater! (root required).

Releases Android 10-17an

Get it on Obtainium (Pre-release channel)

Connecting things to your VPN made simple. Share your VPN connection over hotspot or repeater. (root required)

This app is useful for:

  • Connecting things that don't support VPN like Chromecasts behind corporate firewalls;
  • Setting up gapps behind corporate firewalls;
  • Connecting to your mobile hotspot but you're not bothered to set up VPN on your device;
  • Identifying, monitoring and blocking (unwanted) clients;
  • Bypassing tethering limits by:
    • (recommended) Use this app with a real VPN/socksifier;
    • Use this app with some adblock/DNS apps that uses system VPN service APIs, i.e. fake VPNs; (troubleshooting/a list of apps that work)
    • Try your luck and simply use this app.

P.S. You can also do the similar on Windows, Mac, and iOS.

Features That Requires System App Installation

The following features in the app requires it to be installed under /system/priv-app since some restricted permissions are required. One way to do this is to use App systemizer for Magisk.

  • (Android 8-10, since app v2.4.0) android.permission.OVERRIDE_WIFI_CONFIG: Read/write system Wi-Fi hotspot configuration. (#117)

Installing as system app also has the side benefit of launching root daemon less frequently due to having privileged permissions listed below.

  • android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS
  • android.permission.LOCAL_MAC_ADDRESS
  • android.permission.MANAGE_USB
  • android.permission.OVERRIDE_WIFI_CONFIG
  • android.permission.READ_WIFI_CREDENTIAL
  • android.permission.TETHER_PRIVILEGED
  • android.permission.WRITE_SECURE_SETTINGS
  • Other system-app exclusive features that are not gated by permissions.

Whenever 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.

Q & A

Search the issue tracker for more.

What persistent changes can this app do to my system?

This app only indirectly write persistent changes through system APIs thus it should be generally pretty safe.

  1. In Supplicant mode, the repeater asks wpa_supplicant to create a persistent group on startup, which Android persists in /data/vendor/wifi/wpa/p2p_supplicant.conf or /data/misc/wifi/p2p_supplicant.conf.
  2. If you edited the system Wi-Fi hotspot configuration through this app, those changes will persist.
  3. If you toggle tethering hardware offload through this app, the Android global tether_offload_disabled setting will persist. Toggle it back in this app or the matching Developer options setting to revert it.

Routing, firewall, addresses, and daemon/service state managed by this app are cleaned up when stopped, by Clean, or upon reboot.

Failed to create group due to internal error/repeater shuts down after a while?

This could caused by the Wi-Fi channel you selected is no longer available, due to:

  1. Your device doesn't support operating on this channel, or
  2. There is some nearby Wi-Fi direct device that broadcasted that it can't operate on the channel you picked.

For maximum stability, you need to set channel = 0 so that your device will pick a channel automatically. You 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.

Private APIs used / Assumptions for Android customizations

a.k.a. things that can go wrong if this app doesn't work.

This is a list of stuff that might impact this app's functionality if unavailable. This is only meant to be an index. You can read more in the source code. API restrictions are updated up to SHA-256 checksum 9102af02fe6ab68b92464bdff5e5b09f3bd62c65d1130aaf85d3296f17d38074.

Greylisted/blacklisted APIs or internal constants: (some constants are hardcoded or implicitly used)

  • (prior to API 30) Landroid/net/ConnectivityManager;->getLastTetherError(Ljava/lang/String;)I,max-target-r
  • (prior to API 30) Landroid/net/ConnectivityManager;->EXTRA_ACTIVE_LOCAL_ONLY:Ljava/lang/String;,lo-prio,max-target-o
  • (prior to API 30) Landroid/net/ConnectivityManager;->EXTRA_ACTIVE_TETHER:Ljava/lang/String;,max-target-r
  • (prior to API 30) Landroid/net/ConnectivityManager;->EXTRA_AVAILABLE_TETHER:Ljava/lang/String;,max-target-r
  • (prior to API 30) Landroid/net/ConnectivityManager;->ACTION_TETHER_STATE_CHANGED:Ljava/lang/String;,max-target-r
  • (prior to API 30) Landroid/net/ConnectivityManager;->EXTRA_ERRORED_TETHER:Ljava/lang/String;,max-target-r
  • (since API 30) Landroid/net/ConnectivityModuleConnector;->IN_PROCESS_SUFFIX:Ljava/lang/String;
  • (since API 31) Landroid/net/INetd$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/INetd;
  • (since API 31) Landroid/net/INetd;->ipSecUpdateSecurityPolicy(IIILjava/lang/String;Ljava/lang/String;IIII)V
  • (since API 30) Landroid/net/IIntResultListener$Stub;-><init>()V,blocked
  • (since API 30) Landroid/net/IIntResultListener;->onResult(I)V,blocked
  • (since API 30) Landroid/net/ITetheringConnector;->stopTethering(ILjava/lang/String;Landroid/net/IIntResultListener;)V,blocked
  • (since API 30) Landroid/net/ITetheringConnector;->stopTethering(ILjava/lang/String;Ljava/lang/String;Landroid/net/IIntResultListener;)V,blocked
  • (since API 30) Landroid/net/TetheringManager$ConnectorConsumer;->onConnectorAvailable(Landroid/net/ITetheringConnector;)V,blocked
  • (since API 30) Landroid/net/TetheringManager$TetheringEventCallback;->onTetherableInterfaceRegexpsChanged(Landroid/net/TetheringManager$TetheringInterfaceRegexps;)V,blocked
  • (since API 31) Landroid/net/TetheringManager$TetheringEventCallback;->onSupportedTetheringTypes(Ljava/util/Set;)V,blocked
  • (since API 30) Landroid/net/TetheringManager;->getConnector(Landroid/net/TetheringManager$ConnectorConsumer;)V,blocked
  • Landroid/net/TetheringManager;->TETHER_ERROR_*:I,blocked
  • (since API 30) Landroid/net/TetheringManager;->TETHERING_VIRTUAL:I,blocked
  • (since API 30) Landroid/net/TetheringManager;->TETHERING_WIGIG:I,blocked
  • (since API 31) Landroid/net/IpSecManager;->DIRECTION_FWD:I,blocked
  • (since API 31) Landroid/net/IpSecManager;->INVALID_SECURITY_PARAMETER_INDEX:I,blocked
  • (since API 31) Landroid/net/wifi/SoftApCapability;->getCountryCode()Ljava/lang/String;,blocked
  • (since API 33) Landroid/net/wifi/SoftApConfiguration$Builder;->setRandomizedMacAddress(Landroid/net/MacAddress;)Landroid/net/wifi/SoftApConfiguration$Builder;,blocked
  • (since API 31) Landroid/net/wifi/SoftApConfiguration;->BAND_TYPES:[I,blocked
  • (since API 31) Landroid/net/wifi/SoftApInfo;->getApInstanceIdentifier()Ljava/lang/String;,blocked
  • Landroid/net/wifi/ISoftApCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/wifi/ISoftApCallback;,lo-prio,max-target-o
  • (since API 33) Landroid/net/wifi/IWifiManager;->registerLocalOnlyHotspotSoftApCallback(Landroid/net/wifi/ISoftApCallback;Landroid/os/Bundle;)V,blocked
  • (prior to API 31) Landroid/net/wifi/IWifiManager;->registerSoftApCallback(Landroid/os/IBinder;Landroid/net/wifi/ISoftApCallback;I)V,max-target-o
  • (since API 31) Landroid/net/wifi/IWifiManager;->registerSoftApCallback(Landroid/net/wifi/ISoftApCallback;)V,blocked
  • (since API 33) Landroid/net/wifi/IWifiManager;->unregisterLocalOnlyHotspotSoftApCallback(Landroid/net/wifi/ISoftApCallback;Landroid/os/Bundle;)V,blocked
  • (prior to API 31) Landroid/net/wifi/IWifiManager;->unregisterSoftApCallback(I)V,max-target-o
  • (since API 31) Landroid/net/wifi/IWifiManager;->unregisterSoftApCallback(Landroid/net/wifi/ISoftApCallback;)V,blocked
  • (since API 31) Landroid/net/wifi/WifiClient;->getApInstanceIdentifier()Ljava/lang/String;,blocked
  • (prior to API 30) Landroid/net/wifi/WifiConfiguration;->AP_BAND_2GHZ:I,lo-prio,max-target-o
  • (prior to API 30) Landroid/net/wifi/WifiConfiguration;->AP_BAND_5GHZ:I,lo-prio,max-target-o
  • (prior to API 30) Landroid/net/wifi/WifiConfiguration;->AP_BAND_ANY:I,lo-prio,max-target-o
  • (prior to API 30) Landroid/net/wifi/WifiConfiguration;->apBand:I,unsupported
  • (prior to API 30) Landroid/net/wifi/WifiConfiguration;->apChannel:I,unsupported
  • (since API 30) Landroid/net/wifi/WifiContext;->ACTION_RESOURCES_APK:Ljava/lang/String;,blocked
  • (since API 30) Landroid/net/wifi/WifiContext;-><init>(Landroid/content/Context;)V,blocked
  • Landroid/net/wifi/WifiManager$SoftApCallbackProxy;-><init>(Landroid/net/wifi/WifiManager;Landroid/os/Looper;Landroid/net/wifi/WifiManager$SoftApCallback;)V
  • Landroid/net/wifi/WifiManager$SoftApCallbackProxy;-><init>(Landroid/net/wifi/WifiManager;Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$SoftApCallback;)V,blocked
  • Landroid/net/wifi/WifiManager$SoftApCallbackProxy;-><init>(Landroid/net/wifi/WifiManager;Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$SoftApCallback;I)V,blocked
  • Landroid/net/wifi/WifiManager$SoftApCallbackProxy;-><init>(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$SoftApCallback;I)V
  • (prior to API 30) Landroid/net/wifi/WifiManager$SoftApCallback;->onNumClientsChanged(I)V,greylist-max-o
  • (since API 33) Landroid/net/wifi/WifiManager;->EXTRA_PARAM_KEY_ATTRIBUTION_SOURCE:Ljava/lang/String;,blocked
  • Landroid/net/wifi/WifiManager;->cancelLocalOnlyHotspotRequest()V,unsupported
  • Landroid/net/wifi/WifiManager;->mService:Landroid/net/wifi/IWifiManager;,unsupported
  • Landroid/net/wifi/p2p/WifiP2pConfig$Builder;->MAC_ANY_ADDRESS:Landroid/net/MacAddress;,blocked
  • Landroid/net/wifi/p2p/WifiP2pConfig$Builder;->mNetworkName:Ljava/lang/String;,blocked
  • (since API 30) Landroid/net/wifi/p2p/WifiP2pGroup;->interfaceAddress:[B,unsupported
  • Landroid/net/wifi/p2p/WifiP2pManager;->startWps(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/WpsInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V,unsupported
  • Landroid/hardware/wifi/supplicant/V1_0/IfaceType;->P2P:I
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;->getService()Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;->getInterface(Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$getInterfaceCallback;)V
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$getInterfaceCallback;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Landroid/hardware/wifi/supplicant/V1_0/ISupplicantIface;)V
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicant;->listInterfaces(Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$listInterfacesCallback;)V
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;->name:Ljava/lang/String;
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$IfaceInfo;->type:I
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicant$listInterfacesCallback;->onValues(Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;Ljava/util/ArrayList;)V
  • Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;->asInterface(Landroid/os/IHwBinder;)Landroid/hardware/wifi/supplicant/V1_0/ISupplicantP2pIface;
  • Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatusCode;->FAILURE_ARGS_INVALID:I
  • Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;->code:I
  • Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;->debugMessage:Ljava/lang/String;
  • Landroid/hardware/wifi/supplicant/V1_2/ISupplicantP2pIface;->addGroup_1_2(Ljava/util/ArrayList;Ljava/lang/String;ZI[BZ)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
  • Landroid/hardware/wifi/supplicant/V1_2/ISupplicantP2pIface;->castFrom(Landroid/os/IHwInterface;)Landroid/hardware/wifi/supplicant/V1_2/ISupplicantP2pIface;
  • Landroid/hardware/wifi/supplicant/V1_2/ISupplicantP2pIface;->setMacRandomization(Z)Landroid/hardware/wifi/supplicant/V1_0/SupplicantStatus;
  • (since API 30) Landroid/os/ServiceManager;->waitForDeclaredService(Ljava/lang/String;)Landroid/os/IBinder;,blocked
  • (since API 30) Landroid/os/ServiceManager;->waitForService(Ljava/lang/String;)Landroid/os/IBinder;,blocked
  • (since API 30) Lcom/android/server/wifi/SupplicantStaIfaceHalAidlMainlineImpl;->isServiceAvailable(Landroid/content/Context;)Z
  • (since API 30) Landroid/system/wifi/mainline_supplicant/IMainlineSupplicant$Stub;->asInterface(Landroid/os/IBinder;)Landroid/system/wifi/mainline_supplicant/IMainlineSupplicant;
  • (since API 30) Landroid/system/wifi/mainline_supplicant/IMainlineSupplicant;->getVendorSupplicant()Lcom/android/wifi/x/android/hardware/wifi/supplicant/ISupplicant;
  • (prior to API 30) Landroid/provider/Settings$Global;->SOFT_AP_TIMEOUT_ENABLED:Ljava/lang/String;,lo-prio,max-target-o
  • (on API 34) Landroid/service/quicksettings/TileService;->mToken:Landroid/os/IBinder;,lo-prio,max-target-o
  • (prior to API 30) Lcom/android/internal/R$array;->config_tether_bluetooth_regexs:I,max-target-q
  • (prior to API 30) Lcom/android/internal/R$array;->config_tether_usb_regexs:I,max-target-q
  • (prior to API 30) Lcom/android/internal/R$array;->config_tether_wifi_regexs:I,max-target-q
  • (on API 29) Lcom/android/internal/R$bool;->config_wifi_p2p_mac_randomization_supported:I,blacklist
  • (prior to API 30) Lcom/android/internal/R$integer;->config_wifi_framework_soft_ap_timeout_delay:I,greylist-max-o
  • Lcom/android/internal/R$string;->config_ethernet_iface_regex:I,lo-prio,max-target-o
  • (since API 31) Lcom/android/server/IpSecService;->FULL_MASK:I
  • (since API 30) Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHalAidlBase;->HAL_INSTANCE_NAME:Ljava/lang/String;
  • (since API 30) Lcom/android/server/wifi/p2p/SupplicantP2pIfaceHalAidlMainlineImpl;->MAINLINE_SUPPLICANT_SERVICE_NAME:Ljava/lang/String;
  • Lcom/android/server/wifi/p2p/WifiP2pServiceImpl;->ANONYMIZED_DEVICE_ADDRESS:Ljava/lang/String;
  • (since API 30) Lcom/android/server/SystemServer;->TETHERING_CONNECTOR_CLASS:Ljava/lang/String;
  • (since API 33) Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList;,unsupported
  • (since API 33) Ldalvik/system/DexPathList;->nativeLibraryDirectories:Ljava/util/List;,unsupported
  • (prior to API 33) Ljava/lang/invoke/MethodHandles$Lookup;-><init>(Ljava/lang/Class;I)V,unsupported
  • (prior to API 33) Ljava/lang/invoke/MethodHandles$Lookup;->ALL_MODES:I,lo-prio,max-target-o

See mobile/src/hiddenApiStubs for hidden whitelisted/system APIs as well as partial SDK-class stubs.

Nonexported system resources:

  • (since API 30) @com.android.networkstack.tethering:array/config_tether_bluetooth_regexs
  • (since API 30) @com.android.networkstack.tethering:array/config_tether_ncm_regexs
  • (since API 30) @com.android.networkstack.tethering:array/config_tether_usb_regexs
  • (since API 30) @com.android.networkstack.tethering:array/config_tether_wifi_p2p_regexs
  • (since API 30) @com.android.networkstack.tethering:array/config_tether_wifi_regexs
  • (since API 30) @com.android.networkstack.tethering:array/config_tether_wigig_regexs
  • (since API 30) @com.android.wifi.resources:bool/config_wifi_p2p_mac_randomization_supported
  • (since API 31) @com.android.wifi.resources:integer/config_wifiFrameworkSoftApShutDownIdleInstanceInBridgedModeTimeoutMillisecond
  • (since API 30) @com.android.wifi.resources:integer/config_wifiFrameworkSoftApShutDownTimeoutMilliseconds

Other:

  • (prior to API 30) Activity com.android.settings/.Settings$TetherSettingsActivity is assumed to be exported.
  • P2P HIDL fallback probes generated supplicant HIDL Java classes from Android 10 wifi-service.jar and Android 11+ AOSP Wi-Fi service-wifi.jar com.android.wifi.x.* jarjar packages.
  • P2P AIDL mode probes the Wi-Fi mainline service wifi_mainline_supplicant from live service-wifi.jar to recover the stable vendor supplicant AIDL binder before falling back to direct vendor HAL registration.
  • IPv6 NAT mode depends on the iptables TPROXY and NFQUEUE targets and transparent sockets. ICMPv6 Echo interception uses app-owned queue 30000 and assumes queued downstream packets expose six-byte source hardware-address metadata through NFQA_HWADDR.
  • (since API 30) Relevant tethering APEX classes used here, including android.net.ITetheringConnector, may be jarjar-relocated under the optional prefixes android.net.connectivity or com.android.connectivity.
  • (since API 31) Relevant netd APEX classes used here, including android.net.INetd*, may be jarjar-relocated under the optional prefixes android.net.connectivity or com.android.connectivity.
  • (since API 30) When runtime TetheringEventCallback.onLocalOnlyInterfacesChanged is present, AOSP dispatches startup tether-state callbacks from one executor.execute { ... } block in onCallbackStarted, and later tether-state updates from one executor.execute { ... } block in onTetherStatesChanged.
  • The Rust DNS proxy submits upstream queries through android_res_nsend/android_res_nresult. To keep daemon tasks nonblocking while still using android_res_nresult as the public result reader/closer, it waits for dnsproxyd to close the one-shot resnsend client socket before reading the result. This assumes resnsend writes the complete resolver result before returning and the socket receive buffer can hold that result until the framework socket listener closes the client socket.
  • For ip rule priorities, AOSP local-network/tethering priorities are assumed to be 17000/18000 on API 29..30 and 20000/21000 on API 31+. VPNHotspot uses the 17500..17900 or 20500..20900 gap between them.
  • For route-table numbers, Android interface tables are assumed to start at ifindex + 1000; IPv6 NAT TPROXY uses table 900 to stay below that range and away from AOSP fixed tables 97..99 and kernel built-ins.
  • Clean flushes table 900 because that table is reserved by VPNHotspot. IPv6 NAT also adds its deterministic ULA /64 route to Android's shared local_network route table 97; Clean never flushes that table and only deletes VPNHotspot prefixes reconstructed from current interface names.
  • For packet marks, Android fwmark is assumed to use low bits for netId and routing metadata.
  • IPv6 NAT fwmark fallback for TPROXY uses masked high reserved bits 0x10000000/0x10000000. That fallback is expected on only kernels without effective FRA_IP_PROTO policy-rule support, which upstream Linux added in 4.17. Probe cleanup deletes at most one rule, omitting FRA_IP_PROTO when support or the mutation outcome is uncertain; repeated stale-rule deletion is reserved for Clean.
  • Daemon reply sockets use the AOSP local-network protected mark 0x00030063, which assumes LOCAL_NET_ID = 99 plus the explicitlySelected and protectedFromVpn fwmark bits.

System/root command assumptions:

The following Android system binaries are assumed to be bundled and executable:

  • /system/bin/dumpsys (ipsec);
  • /system/bin/iptables-restore, /system/bin/ip6tables-restore (-w --noflush, restore input commands including -I, -D, -N, -nvx -L <chain>);
  • /system/bin/ndc (ipfwd, nat);
  • /system/bin/settings (put global);
  • /system/bin/linker or /system/bin/linker64 (path.zip!/program).

from  https://github.com/Mygod/VPNHotspot

Friday, 11 September 2026

Acode - powerful code editor for android

 

 

• Overview

Welcome to Acode Editor - a powerful and versatile code editing tool designed specifically for Android devices. Whether you're working on HTML, CSS, JavaScript, or other programming languages, Acode empowers you to code on-the-go with confidence.

• Features

  • Edit and create websites, and instantly preview them in a browser.
  • Seamlessly modify source files for various languages like Python, Java, JavaScript, and more.
  • Built-in javascript console
  • S/FTP and SSH terminal integration
  • Built-in terminal(Alpine)
  • Enjoy multi-language editing support with easy management tools.
  • Enjoy a large collections of community plugins to enhance your coding experience.

• Installation

You can get Acode Editor from popular platforms:

Get it on Google Play Get it on F-Droid

• Project Structure

Acode/
|
|- src/   - Core code and language files
|
|- www/   - Public documents, compiled files, and HTML templates
|
|- utils/ - CLI tools for building, string manipulation, and more

• Multi-language Support

Enhance Acode's capabilities by adding new languages easily. Just create a file with the language code (e.g., en-us for English) in src/lang/ and include it in src/lib/lang.js. Manage strings across languages effortlessly using utility commands:

pnpm run lang add
pnpm run lang remove
pnpm run lang search
pnpm run lang update
from  https://github.com/Acode-Foundation/Acode

WebViewTvLive, A TV Live Streaming App developed using Tencent X5 WebView

 

www.v2ex.com/t/1077160

A TV Live Streaming App developed using Tencent X5 WebView

Open official web pages with one click, providing a convenient and quick way to watch official TV live broadcasts.

Features

  • Automatic channel list updates
  • Multiple live streaming sources
  • Customizable application settings
  • Channel switching via number keys
  • Gesture controls for screen brightness and volume
  • Optimized for phones, tablets, TVs, and car head units

Roadmap

  • Automatic source switching/refreshing on playback errors
  • Support for custom playlist sources
  • LAN remote configuration
  • Support for playback/catch-up features

Usage

Get the App

Advantages

  • Directly uses official live streaming links, ensuring stability and reliability
  • Compatible with m3u8 links

Disadvantages

  • Built on WebView, which requires certain device performance; see Device Requirements for details
  • Slightly longer channel loading times
  • Video quality selection is unavailable, and frame rates are limited (mostly 24FPS)
  • Due to copyright restrictions, official sites may not broadcast during certain time slots

Device Requirements

Item Minimum Configuration Recommended Configuration
CPU Quad-core ARM Cortex-A53 (≥1.2GHz) Quad-core or above ARM Cortex-A55 / A76 hybrid architecture
RAM 2GB 4GB and above
OS Version Android 5.0 Android 11 and above
WebView Version WebView 78 WebView 120 and above
  • Using devices below the recommended configuration may affect user experience, causing issues like lag, slow channel switching, or crashes after prolonged use.

FAQ

Important Notes

  • Due to the challenging open-source environment in mainland China, this project has paused open sourcing. The final open-source version is 1.6. The source code is provided for learning and communication purposes only.
  • For repackaged applications, usage is limited to personal use or moderate sharing with the original app name credited.
  • Do not use this project for profit.

from  https://github.com/hxh19950701/WebViewTvLive

Thursday, 16 July 2026

如何有效的一起使用智能手机和计算机

 

I am going to discuss some of the ways you can share data from your phone to your PC and vice versa. Not only that, you can also use these devices as one ecosystem like what Apple has their own.

  1. Transfer Files
    There is no perfect working files sharing feature between Android and Windows. Some rumours suggest that Chrome browser in Windows 10 will feature nearby share. This feature is available on Android for some time now and it will be useful to have it on PC. Here are some steps and software/apps which will ease the process of sharing files.

    1. Bluetooth
      This might sound pretty old but it can be helpful if you don't want to download extra apps on your PC and mobile. As the speeds are slow it is useless for larger files. You can quickly share some photos and audio files.

    2. AirDroid
      AirDroid is one of the most popular apps to share files. Apart from this it can send and receive SMS from your phone and show you your device's notification on your PC. It's free and you have to pay to the subscription to use all its services.
      Free|Subscription: $1.99 per month.

    3. Resilio Sync
      Resilio Sync works like a cloud storage but data is stored locally on your PC. You can sync/transfer as much data as you want. This app is free for limited use. You can pay one time to unlock all its features and services.
      Free|One-time purchase $75

    4. Google Drive
      Drive is a cloud-based storage service. You can upload files and backup your mobile data. You can create link and send large files to others. The free version only provides 15 GB of storage. You need to pay to the subscription to get more storage.
      Free|Subscription at $1.99 for 100 GB per month

    5. Smash
      As Google Drive gives you 15 GB of storage, Smash gives you unlimited storage. You can send unlimited files of unlimited sizes to any system and anyone without even signup. Smash keeps your files for only 14 days which is not bad.
      Free

    Not to forget our old school USB cables. They can transfer files at the highest speeds :)


  2. Sync browser tabs and open link seamlessly
    Many times, we need to open links from phone to our computers. You may have used WhatsApp Web to send link cross platform. Instead use backup and sync on Chrome. Here's how to do that:
    • First login to your same Google account on Chrome on both the devices.
    • Then go to settings --> Sync and Google services --> Turn Sync your Chrome data on.
    • When you click share button on Chrome there's an option named Send to your devices. Click it and select your device. The link will instantly pop up on your other device. Chrome also backups your saved passwords and logins for websites. It has wide variety of Extensions.

    If you are privacy-focussed then try Mozilla Firefox or Brave browser. These browsers provide similar features. The main advantage is that they block tracking of websites so you can browse without concerning about your privacy.

Sunday, 12 July 2026

一些Android/Linux/MacOS/Windows程序的下载地址


 https://file.cnxiaobai.com/Android/

 https://file.cnxiaobai.com/Linux/

 https://file.cnxiaobai.com/MacOS/

 https://file.cnxiaobai.com/Windows/

from   https://file.cnxiaobai.com

Wednesday, 8 July 2026

本田思域车主请注意:你的车载系统可能正被「恶意的代客泊车」盯上

 你有没有想过,把车交给酒店代客泊车的那一刻,你交出去的不只是方向盘?

2026 年 6 月,一位叫 Eric McDonald 的安全研究员在个人博客上发布了一篇更新,披露了一个名为 EvilValet 的漏洞——攻击者只需物理接触你的本田思域(2021 款第十代)中控屏的 USB 接口,就能通过 USB 更新路径,在车载系统上实现任意代码执行。

这不是理论推演,而是已经开源了完整工具链、可以直接复现的实战漏洞。 
一个被遗忘的 AOSP 测试密钥

Eric 的研究始于 2023 年。他花了一年多的时间逆向自己的 2021 款本田思域车机,最终在 2026 年 6 月公开了完整成果。

最致命的一点是:本田在车机的 Android 系统中,保留了 AOSP(Android 开源项目)的公开测试密钥(res/keys/ 目录下的 testkey)。这意味着任何人都可以用这个公开密钥签名一个更新包,让车机误以为这是官方更新。

换句话说,只要有人能插上一根 U 盘,就能往你的车机里装任何东西。
为什么叫 EvilValet?

传统安全领域有个经典攻击模型叫 Evil Maid(恶意的客房服务员)——攻击者趁你不在酒店房间时,在你的电脑上植入后门。

Eric 觉得这个概念放在车上更贴切:记者把车交给酒店代客泊车,代客泊车的人(假设是某个三字母机构的人)插上 U 盘,装了一个更新。记者回来时,车机已经被改了,但完全不知道。

所以他叫它 EvilValet——恶意的代客泊车。

汽车车载系统安全
开源工具链:ota-builder 和 apk-rebuilder

更值得警惕的是,Eric 不仅公布了漏洞原理,还开源了完整的工具链: 免费软件下载

    ota-builder:自动生成能被车机接受的更新包。虽然还在早期阶段,但用它来安装一个带 setuid 的 su 二进制文件(也就是 root 设备)已经不难了。
    apk-rebuilder:把网上下载的本田车机更新包自动解包,还原出 smali 代码、资源文件、ramdisk 等。这解决了法律上的敏感问题——研究者不需要发布本田的源代码,而是发布一个"输入更新包、输出可分析代码"的工具。

整个项目托管在 GitHub 上,仓库名 ic1101(第十代思域的内部代号),MIT 协议,176 个 stars。
不只是本田的问题

Eric 在文章里明确说,他高度怀疑所有官方更新都是用 AOSP 测试密钥签名的。他下载了一个公开的欧盟版更新文件 MRC_EU_SW_v12_4.zip,确认它确实是用测试密钥签名的。

这意味着什么?意味着不只是他那一台车有这个问题,而是整个第十代思域的车机都可能存在同样的漏洞。
开源逆向工程的正面案例

这件事还有一个值得注意的侧面:Eric 选择把整个研究过程工具化、开源化,而不是写成一份传统的漏洞报告。

他的思路是:与其维护一份随时可能过时的文档,不如提供可靠的、确定性的工具,让其他人可以用 LLM 去查询这些工具输出的中间产物。车机代码本身才是唯一的真相源。

这种做法在安全研究圈越来越常见——把逆向工程成果变成可复用的工具链,而不是封闭的 PDF 报告。
车主能做什么?

坦白说,普通车主能做的不多。Eric 也在呼吁开第十代思域的人去贡献"已知版本"信息,帮助完善工具链的兼容性。

但对于安全研究者来说,这件事传递了一个清晰的信号:车载系统的 USB 更新路径,可能是所有汽车厂商都需要重新审视的安全边界。

参考资料

https://juniperspring.org/posts/honda-evil-valet/
https://github.com/librick/ic1101
https://github.com/librick/ic1101/tree/main/ota-builder
https://github.com/librick/ic1101/tree/main/apk-rebuilder

相关链接

https://github.com/librick/ic1101

F-Droid 急了:直接把 Google 的 ADV 骂成「恶意软件」

 F-Droid 这次是真急眼了。 

7 月 1 号,他们直接甩出一份声明,标题就一句话:Android Developer Verifier 本身就是恶意软件。不是"担忧",不是"影响",是"就是"。

这事得从头讲。
Google 的 ADV 是什么

去年 Google 官宣过一个"Android 开发者验证计划"(Android Developer Verification, ADV)。官方说法是:为了打击恶意软件分发、诈骗侧载,要求所有想在 Android 设备上跑应用的开发者实名注册。

这个说法听起来挺正常对吧?网诈那么凶,实名一下怎么了?

但 F-Droid 这回挖出了一个更要命的事实——ADV 已经偷偷推到 40 亿台设备上了。 

不是一个待启用的政策,是一个已经装在你手机里的系统服务。

为什么 F-Droid 敢直接骂它是「恶意软件」?

F-Droid 给出的理由很硬: 
    拥有 root 权限——ADV 以系统服务的形式静默运行,权限高得离谱。
    无法屏蔽、无法禁用、无法移除——你既不能关掉它,也不能卸载它。它就趴在你手机后台,等 Google 一声令下。
    唯一功能是阻止用户运行未经 Google 批准的开发者应用——一旦被激活,你装个 F-Droid 商店、装个第三方编译的工具,可能直接被拦下来。
    「恶意软件」的判定权完全在 Google 一手——Android Developer Console 的条款说,如果 Google 认为你"违反任何条款"或者"分发恶意应用",可以随时封你的开发者账号。什么叫恶意?Google 说算就算。广告拦截?VPN?开源修改版?都可能在它眼里属于"恶意"。
最阴的——它不告诉你规则是什么,因为规则就是它自己。

时间表已经定下来了

Google 的计划:

    2026 年 9 月 30 日起,第一批国家开始激活 ADV:巴西、印尼、新加坡、泰国。
    之后逐步推到全球,预计 2027 年之后全面铺开。

首批这四个国家有什么共同点?新兴市场、Android 占比高、监管力度相对弱。Google 选了最容易被"先吃螃蟹"的地区先试水。 

反对方有多大声

不是 F-Droid 一家在那喊。

电子前哨基金会(EFF)、自由软件基金会(FSF)、美国公民自由联盟(ACLU)——超过 70 个组织、数十万人联署公开信反对。

连 Google 自家的 Gemini 聊天机器人被问到这事时,AI 自己都承认:"除了 Google 本身,技术社区几乎找不到热心支持者。"

这话 Gemini 说的是它亲爹。

F-Droid 这次的措辞升级是个信号。 

过去一年,他们的口径是"开放生态受到威胁"、"F-Droid 生存危机"——是防守话术。这次直接定性为"恶意软件",是把 Google 推到了被告席上。

为什么?因为防守话术打了一年没用。Google 该推还是推。该激活还是激活。

你看,F-Droid 的选择是:既然你给我的设备装了一个我删不掉、能 root、随时能让我不能装东西的服务,那我只能用「恶意软件」这个词来定义它。这是被迫升级的修辞。

但话又说回来,F-Droid 真的能扛住这一轮吗?

一旦 ADV 激活,F-Droid 上所有应用的开发者都要去 Google 注册、付费、提交身份证件。F-Droid 自己没法替开发者注册,因为它不是 Google。它也没办法把 Google 的"未批准"标志绕开——因为那个标志是 Google 在系统层设的。

技术上,F-Droid 没有反制手段。

它能做的,就是把事情搞大,让监管出手。欧盟的反垄断调查、巴西的本地立法、美国的国会听证——这是 F-Droid 现在真正的指望。
普通用户现在能做什么

说实话,短期能做的有限。

    如果你在国内:影响暂时不大。9 月 30 日首批国家不包含中国。
    如果你用的是国行 ROM 或者自定义 ROM(比如 LineageOS、Pixel Experience):F-Droid 还能装。趁现在能装,赶紧装、常用常更新。
    如果你是海外用户、在巴西/印尼/新加坡/泰国之一:9 月 30 日后,侧载体验会大幅收紧。建议提前做好备份。
    不管你在哪:关注 F-Droid 后续动态。它是开源 Android 生态最重要的"逃生舱"之一,它要是倒了,损失是结构性的。
---------------------------

他妈的,谷歌是“店大欺客”啊。

Wednesday, 3 June 2026

Every Proxy

 https://play.google.com/store/apps/details?id=com.gorillasoftware.everyproxy&pli=1

 Every Proxy 是一款专业级的网络实用工具,可让您将网络中其他设备的流量(比如vpn流量)路由到您的安卓手机或平板电脑。

---------------------------------------

Professional Proxy Routing for Android

High-performance HTTP, HTTPS, SOCKS4, and SOCKS5 proxy servers directly on your device. No root required.

Every Proxy turns your Android device into a powerful network gateway. Route traffic from laptops, consoles, and tablets through your phone's active connection with a lightweight, user-space implementation.

from  https://www.everyproxy.co.uk/

( https://www.everyproxy.co.uk/how-to-use-every-proxy/,

 https://www.everyproxy.co.uk/install/ )

--------------------------------------------------

 

There's an android app called "Everyproxy" that lets you share the vpn connection of a device with another person's phone who doesn't have VPN。

Saturday, 28 March 2026

android apps i reach for


syncthing-fork

peer‑to‑peer file sync that just works


kde connect

notifications, clipboard, and files across devices

Wednesday, 18 February 2026

awesome-projects-boilerplates

 

Boilerplates for mobile and web apps.

Awesome

Curated list of boilerplates and templates to enhance productivity.

Android Development

Boilerplates and templates for Android

IOS Development.

Boilerplates and templates for IOS

JavaScript

Boilerplates and templates for JavaScript

Hybrid Mobile App Frameworks

Microservices

  • Webstack-micro Demo/starter for full-stack web app using microservices architecture, with API Gateway, centralized authentication, background workers, and WebSockets.

Python

Boilerplates and templates for Python

PHP

Boilerplates and templates for PHP

Ruby

Boilerplates and templates for Ruby

.NET

Boilerplates and templates for C#.NET and ASP.NET

  • ASP.NET Boilerplate ASP.NET Boilerplate is a starting point for new modern web applications using best practices and most popular tools.

Go

Boilerplates and templates for Go

Browser Webextensions

Boilerplates and templates to develop webextensions for internet browsers such as Chrome, Firefox and Safari

Websites

Boilerplates and templates for Websites

IDE

Templating Systems for Different IDE's

GitHub

Boilerplates and template files

  • GitHub Template Guidelines Collection of guidelines and boilerplate files for writing maintanable GitHub projects.
  • Pollinate Template your base files and generate them from GitHub.

from https://github.com/melvin0008/awesome-projects-boilerplates