SteveHawk's Blog

原生安卓 ADB hacks



如何使用 Termux 操作 ADB

如果尚未安装 ADB,直接执行 adb 指令,Termux 会提示如何安装。

安装好后,在手机的 Developer options 中启用 Wireless debugging。选择 Pair device with pairing code,可以看到有对应的 <ip>:<port> 以及配对码。

在 Termux 中输入 adb pair 可以看到使用说明,使用 adb pair <ip>:<port> <code> 进行配对。(也可以不输 code,紧接着 adb 会提示输入)

配对完成后,使用 adb connect 建立连接,可以用 adb devices 查看已连接的设备。

以上就完成了 adb 的配对和连接,后面就可以执行下面的 shell 指令了。如果需要执行多条 adb shell xxx 指令,其实可以直接先执行 adb shell ,进入 shell 环境后只需要执行后面那句指令即可。

完成所有指令后,使用 adb disconnect 断开连接。

备注:

Hacks

  1. 网络状态检测

    原生安卓使用的 Captive Portal Server 是谷歌的域名(实际使用的域名有众多说法,无定论),显然被墙无法访问,而且这种底层应用貌似不会被正确代理。因此需要更换 Captive Portal Server 到一个国内能够正常访问的地址。

    可以使用 V2EX 提供的:

    关于 V2EX 提供的 Android Captive Portal Server 地址的更新 - V2EX

    1adb shell "settings put global captive_portal_http_url http://captive.v2ex.co/generate_204"; 
    2adb shell "settings put global captive_portal_https_url https://captive.v2ex.co/generate_204";

    还可以添加 fallback 地址:

    1adb shell "settings put global captive_portal_fallback_url http://captive.v2ex.co/generate_204";
    2adb shell "settings put global captive_portal_other_fallback_urls http://captive.v2ex.co/generate_204";

    检查设置:(其它以此类推)

    1adb shell "settings get global captive_portal_https_url"

    除了 V2EX 的服务器外还可以使用小米和谷歌 CN 的:

    • (http/https) connect.rom.miui.com/generate_204
    • (http/https) www.google.cn/generate_204

    更多参考:

    修改 Android 探测网络状态所用的服务提供者

    Captive Portal parameters

    检测网络联通性&generate_204服务汇总与评测

  2. 时间同步

    和 Captive Portal 一样,原生安卓使用的 NTP Server 也是被墙的(time.android.com),这导致系统无法正确同步时间。

    使用 ADB 修改成 pool.ntp.org 即可:

    1adb shell "settings put global ntp_server pool.ntp.org"

    检查设置:

    1adb shell "settings get global ntp_server"

    参考:

    Android 系统时间不对有遇到的吗? - V2EX

    公共 NTP 网络时间服务器地址大全 Public NTP Server - DNS.iCoA.CN

    全国公共NTP授时服务器地址大全|Public NTP Server - dns.iui.im

  3. 应用独立语言设置

    安卓 13 引入了每个应用独立的语言设置(per-app language settings),但是默认需要应用启用支持以后,才会在系统设置里显示这个应用。

    例如全局系统语言设置为英文,但是想要把 Sky Map 设置为中文,默认是不行的。因为 Sky Map 没有在构建应用的时候启用对应的支持,应用内也没有做语言切换。

    要强制启用对所有应用的独立多语言设置,可以使用 ADB 添加如下设置:

    1adb shell "settings put global settings_app_locale_opt_in_enabled false"

    检查设置:

    1adb shell "settings get global settings_app_locale_opt_in_enabled"

    然后就可以在系统语言设置里的应用语言里看到所有应用了,也可以在每个应用自己的设置界面里看到语言选项。

    参考:

    How to make every app appear in Android 13’s new per-app language settings

    另外,也可以通过 Shizuku + Language Selector 第三方 UI 实现独立应用语言选择。不过有原生 UI,还是用原生的更靠谱。


#tech notes
本文总字数 1223
本文阅读量
本站访客量

↪ reply by email