adb安装 apk到手机

从豌豆荚,或者其他应用市场,下载应用的apk文件到电脑上。然后在apk文件的目录下打开cmd,输入如下命令即可安装该应用

1
adb install 应用名称.apk

示例

把我电脑上的京东.apk安装到Android平板上:

1
adb install 京东.apk

命令输出如下:

1
2
D:\网络共享\可读可写\apk>adb install 京东.apk
Performing Streamed Install

此时命令会阻塞一阵子,需要等待命令把apk文件传输到Android设备中,等待一会后,Android设备上会弹出安装界面,点击继续安装即可。如下图所示:

安装成功的输出

如果安装成功,命令会输出一个”Success”提示信息。如下所示:

1
2
3
4
5
D:\网络共享\可读可写\apk>adb install 京东.apk
Performing Streamed Install
Success

D:\网络共享\可读可写\apk>

安装失败的输出

输出不是”Success”,那就是安装失败了,安装失败的提示如下所示:

1
2
3
4
5
D:\网络共享\可读可写\apk>adb install 京东.apk
Performing Streamed Install
adb: failed to install 京东.apk: Failure [INSTALL_FAILED_ABORTED: User rejected permissions]

D:\网络共享\可读可写\apk>

adb卸载

先获取APP的包名

打开APP,让APP显示在屏幕最上方。
然后输入如下命令获取屏幕最上方的APP的activity:

1
adb shell dumpsys window | findstr mCurrentFocus

命令输出如下:

1
2
3
4
D:\网络共享\可读可写\apk>adb shell dumpsys window | findstr mCurrentFocus
mCurrentFocus=Window{9902caf u0 com.jingdong.app.mall/com.jingdong.app.mall.main.MainActivity}

D:\网络共享\可读可写\apk>

命令输出的com.jingdong.app.mall/com.jingdong.app.mall.main.MainActivity就是activity名称,activity名称斜杠/前面的就是包名com.jingdong.app.mall

根据包名卸载APP

1
adb uninstall app_key 包名

示例

卸载刚才安装的京东APP:

1
adb uninstall com.jingdong.app.mall

卸载成功效果:

1
2
3
4
D:\网络共享\可读可写\apk>adb uninstall com.jingdong.app.mall
Success

D:\网络共享\可读可写\apk>

批量卸载第3方APP

使用批处理

应用包名文件:

adbui.txt

这个文件保存了需要卸载的应用的包名,和应用名,其中包名是必须的,并且必须写在第一列。因为后面的批处理文件主要读取的是第一列的内容。
第二列写应用名,应用名不是必须的,可以不写,因为后面的批处理文件不会读取第2列的内容。

adbui.txt
1
2
3
com.meta.box 233乐园
com.m4399.gamecenter 4399游戏盒
com.wuba

批处理文件

adbui.bat
1
2
3
4
5
6
7
8
@echo off
:: 进入当前批处理所在的盘符
%~d0
:: 进入当前批处理文件所在目录
cd %~dp0
:: 遍历同目录下的adbui.txt文件,读取第一个字段到变量i中,对每一个变量i执行一次adb卸载命令。
for /f "tokens=1" %%i in (adbui.txt) do adb uninstall %%i
:: "tokens=1" 表示获取txt文件每行的第一列作为变量的值。

执行效果:

1
2
3
4
5
PS G:\dev2\idea_workspace\MyJavaTools\runable> adbui
Success
Success
Success
PS G:\dev2\idea_workspace\MyJavaTools\runable

如果Android设备中并没有安装这些应用,则卸载失败。

改进

adb列出第三方apk

1
adb shell pm list packages -3

adbui4.bat

先列出第三方应用,然后在第三方应用列表中查找 adbui.txt中的包名,如果找到,再使用adb卸载命令。

adbui4.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
setlocal EnableExtensions
:: 进入当前盘符
%~d0
:: 进入当前文件所在目录
cd %~dp0
@REM 遍历adb命令的输出结果,以冒号作为分隔符,取命令输出的 每行分隔后得到的第2个字段作为
for /f "tokens=2 delims=:" %%i in ('adb shell pm list packages -3') do (
echo %%i
for /f "tokens=1" %%j in (adbui.txt) do (
if %%i == %%j (
echo %%j == %%i
@REM 相等,执行卸载命令
echo 卸载
adb uninstall %%i
)
)
)

改进2

存在多个设备的情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@echo off
setlocal EnableExtensions
@REM 进入当前盘符
%~d0
@REM 进入当前文件所在目录
cd %~dp0
@REM 遍历命令的输出结果,
@REM 第一行的输出没有我们需要的序列号,skip=1表示跳过第一行
@REM for默认以空白符分割每行,tokens=1表示在分割结果中取第1个字段作为循环变量的值

for /f "skip=1 tokens=1" %%i in ('adb devices -l') do (
echo -----------------------------------------
echo --------------------------
echo current device: %%i
echo --------------------------

@REM 使用文件中的第一个字符作为循环变量的值,
@REM 这个文件中的第一个字段保存我们需要卸载的APP的包名
@REM 从文件中读取要卸载的APP的包名

for /f "tokens=1" %%k in (adbui.txt) do (

@REM 执行命令列出该设备上的第三方APP的包名,
@REM 遍历命令的输出结果,以冒号分割命令的每行输出

for /f "tokens=2 delims=:" %%j in ('adb -s %%i shell pm list packages -3') do (

if %%j == %%k (
echo uninstall: %%j
echo.
echo code: adb -s %%i uninstall %%j
@REM adb -s %%i uninstall %%j
echo.
) else (
echo no uninstall: %%j
)

)
)

echo -----------------------------------------
)

参考资料

https://www.w3cschool.cn/pclrmsc/yqaho0.html
https://www.w3cschool.cn/pclrmsc/gmjsnz.html

前言

为了避免 Android 手机在连接 USB 进行自动化测试时充电过度导致电池鼓包的问题,可以通过以下步骤实现禁止充电若干小时后自动充电的功能。

adb禁止Android手机使用USB充电

1
adb shell dumpsys battery set usb 0

adb允许手机USB充电

1
adb shell dumpsys battery set usb 1

示例

当前手机 设置 电池的信息如下:
图1

从图中可以看到,电池电量百分数的百分号后面有“正在充电”四个字,这说明当前手机正在充电。下面还有一行字显示还需要多少时间电池能充满
执行下面的命令:

1
adb shell dumpsys battery set usb 0

禁止USB充电后,电池信息如下:
图2
从图中可以看到,电量百分号后面的“正在充电”的提示信息消失了。电量下面的一行字变成我们可以使用多少分钟。

其他

adb获取电池信息

1
adb shell dumpsys battery

adb获取电池电量

1
adb shell dumpsys battery | findstr level

adb恢复电池默认设置 adb电池复位

1
adb shell dumpsys battery reset

前言

我有两台新旧电脑,一个安卓手机。

安卓机已经开启USB调试功能,并且安卓机已经授权给旧电脑USB调试权限了。

后来我又新买了一台新电脑,新电脑我也想用来调试这台安卓机。

不过不巧的是,安卓机此时屏幕正好坏掉了。也就是我无法通过点击屏幕来给新电脑授予USB调试权限。

那么,此时我该怎么授予新电脑调试这台安卓机呢?

前提

  • 一台已经允许USB调试的旧电脑,
  • 一台已经开启USB调试的手机
  • 一个WiFi
  • 一台新电脑
  • adb.exe
  • scrcpy.exe

操作步骤

因为在手机屏幕坏掉之前,我们已经始终允许旧电脑对手机进行USB调试了。所以我们可以在旧电脑上通过adb命令和scrcpy命令来操作这台屏幕坏掉的手机。

  • 先把手机用USB数据线连接到旧电脑上
  • 在旧电脑上,运行adb devices -l命令,并记下 序列表
  • 在旧电脑上,运行scrcpy.exe,把手机投屏到旧电脑得屏幕上。
  • 在旧电脑上,通过adb命令,开启手机的网络调试功能。执行命令:adb -s 序列号 tcpip 5555
  • 获取手机的IP地址,
    • 可以通过操作旧电脑的手机投屏获取IP地址,
    • 或者登陆路由器后台获取。最好能固定手机的IP地址,方便后续通过网络调试。
  • 在新电脑上,通过网络调试手机,在旧电脑的手机投屏上,点击弹出的授权对话框。
    • 首先要确保手机和新电脑在同一个网络中,也就是新电脑和手机连接的路由器是同一个。(新电脑和手机连接同一个WiFi,新电脑通过网线连接路由器,手机通过WiFi连接同一个路由器都行),
    • 然后在新电脑上执行如下命令:adb connect 手机IP:5555
      • 此时就电脑上的手机投屏就会弹出一个对话框,要你是否授权新电脑对手机进行USB调试。
        • 勾选始终允许这台电脑进行USB调试。然后点击确认按钮。
        • 此时新电脑终于可以USB调试这台手机了。但是执行adb devices -l命令可能还是显示没有授权。
          • 没关系,在新电脑上,执行adb disconnect 手机IP:5555,先断开网络调试,然后再执行adb connect 手机IP:5555开启网络调试。然后再执行adb devices -l命令查看,这个时候就不会显示没有授权了。
  • 获取USB授权之后,就可以把手机通过USB数据线连接到新电脑上。新电脑可以像旧电脑那样通过USB调试手机了。

需求1:部署Hexo站点到另一台电脑上

最近买了个台式机,我想把我的Hexo站点部署到台式机上。因为这个台式机我打算二十四小时都开着,当服务器使用。这样我就可以随时访问我的Hexo站点了。

做法

复制整个博客站点的的文件夹到台式机上

我在笔记本上开启网络共享功能,然后在台式机上访问我的笔记本,把Hexo站点的整个文件夹复制到台式机上。

这个时候Hexo站点就已经迁移(复制)完成了,但是还不能开启本地服务器。
为什么呢,因为还没安装好Hexo所需要的依赖软件

安装Hexo站点需要的软件

安装Git

安装nodejs

使用nvm管理nodejs

安装hexo

本地部署Hexo

安装好上述软件之后,就可以在台式机上部署hexo站点了,执行hexo s命令,不出意外的话可以成功部署。

需求2:同一个账户在两台电脑上协作

我习惯在笔记本上编写Hexo站点文章,不过Hexo站点我部署在台式机上了。
所以我需要在两台电脑之间进行协作。

做法

我先在笔记本上写好Hexo站点的文章,然后我推送到github上。
接着,我在台式机上拉取GitHub上的文章,然后在台式机上本地部署即可。

在台式机上重新 配置Git SSH

因为我直接把整个Hexo站点(git仓库)复制到台式机上了,此时台式机上的远程仓库链接已经设置好了,我不用重新init仓库。

不过,此时是不可以直接拉取Github上的仓库,这是因为在台式机上还没配置好Git SSH的缘故。此时执行git push origin master命令,将会输出如下的错误信息:

1
2
3
4
5
6
7
8
9
lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)
$ git pull origin master
ssh: connect to host github.com port 22: Connection refused
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)

配置git的邮箱和用户名

配置邮箱

1
git config --global user.email "your_email@example.com"

配置用户名

1
2
git config --global user.name "your_name"

查看效果

1
git config --global  --list
1
2
3
4
5
6
lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)
$ git config --global --list
user.email=xxxxxxx@163.com
user.name=xyzabc

lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)

从旧电脑上复制私钥和known_hosts文件到到新电脑上

在笔记本上进入用户目录下的.ssh目录中,.ssh目录结构如下代码块所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\Users\xyzabc\.ssh>dir
驱动器 C 中的卷没有标签。
卷的序列号是 FA82-C79F

C:\Users\xyzabc\.ssh 的目录

2023.07.04 19:46 <DIR> .
2023.07.04 19:46 <DIR> ..
2021.10.11 09:23 0 config
2021.07.12 09:13 2,610 id_rsa
2021.07.12 09:13 573 id_rsa.pub
2023.07.04 19:46 919 known_hosts
2022.04.12 15:40 747 known_hosts.old
5 个文件 4,849 字节
2 个目录 59,848,286,208 可用字节

C:\Users\xyzabc\.ssh>

其中的id_rsa文件就是我们需要的私钥文件,id_rsa.pub是公钥文件,这个公钥我们之前已经放到GitHub上了

复制id_rsa和known_hosts到新电脑上的.ssh目录中

在台式机上同样进入用户目录,

  • 如果有.ssh目录,则进入.ssh目录,然后把 私钥文件id_rsa和known_hosts文件 粘贴到.ssh目录。
  • 如果没有.ssh目录,则创建一个.ssh目录。然后把 私钥文件id_rsa和known_hosts文件 粘贴到.ssh目录中。

不过,为了方便起见,你把旧电脑上.ssh目录下的所有文件都复制到新电脑的.ssh目录下也可以。

我之所以说复制私钥文件和known_hosts就可以了,是因为在我的操作中,复制私钥文件id_rsa和known_hosts文件之后,就可以通过SSH访问GitHub了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\abc\.ssh>dir
驱动器 C 中的卷没有标签。
卷的序列号是 4A1D-5B3F

C:\Users\abc\.ssh 的目录

2023/07/05 23:23 <DIR> .
2023/07/05 23:23 <DIR> ..
2023/07/05 22:59 2,610 id_rsa
2023/07/05 23:23 919 known_hosts
2 个文件 3,529 字节
2 个目录 11,805,638,656 可用字节

C:\Users\abc\.ssh>

添加私钥到SSH

开启ssh服务

在台式机上的.ssh目录中打开git-bash。
输入如下命令启动SSH服务:

1
ssh-agent bash

这条命令没有输出:

1
2
lan@DESKTOP-731NAOL MINGW64 ~/.ssh
$ ssh-agent bash

添加私钥

1
ssh-add id_rsa

命令输出如下:

1
2
3
lan@DESKTOP-731NAOL MINGW64 ~/.ssh
$ ssh-add id_rsa
Identity added: id_rsa (xxxxxxx@163.com)

测试链接是否成功

因为之前在旧电脑的Git SSH配置中我们已经把公钥保存到github上了,所以现在我们就不用再重新布置了。

git-bash进入Hexo站点目录,然后执行如下命令,测试是否能成功连接到github上。

1
ssh -T git@github.com

如果有如下的输出,则表示成功连接到GitHub上:

1
2
3
4
5
lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)
$ ssh -T git@github.com
Hi githbubUseName! You've successfully authenticated, but GitHub does not provide shell access.

lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)

解决:ssh: connect to host github.com port 22: Connection refused

我测试的时候并没有成功连接到GitHub上而是输出如下信息:

1
2
3
4
5
lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)
$ ssh -T git@github.com
ssh: connect to host github.com port 22: Connection refused

lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)

我这里应该是被墙了,安装Steam++,加速GitHub之后即可正常连接。

解决The authenticity of host ‘github.com (127.0.0.1)’ can’t be established.

如果出现如下的输出:

1
2
3
4
5
6
7
8
an@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)
$ ssh -T git@github.com
The authenticity of host 'github.com (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)

这说明你只复制了秘钥文件到新电脑上,忘了从旧电脑上把known_hosts文件复制到新电脑的.ssh目录中。

从旧电脑上把known_hosts文件复制到新电脑的.ssh目录中,然后在重新测试连接即可。此时应该就能正常连接了。

拉取GitHub上的仓库到新电脑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)
$ git pull origin master
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 12 (delta 8), reused 12 (delta 8), pack-reused 0
Unpacking objects: 100% (12/12), 2.29 KiB | 3.00 KiB/s, done.
From github.com:githbubUseName/JavaReadingNotes
* branch master -> FETCH_HEAD
d1bf8037..cd1954fe master -> origin/master
Updating d1bf8037..cd1954fe
Fast-forward
...277\220\350\241\214\346\234\272\345\210\266.md" | 17 +++--
...221Java\347\232\204\345\207\206\345\244\207.md" | 79 +++++++++++++---------
...200\344\270\252Java\347\250\213\345\272\217.md" | 61 ++++++++++-------
3 files changed, 91 insertions(+), 66 deletions(-)

lan@DESKTOP-731NAOL MINGW64 /e/Tools/Blog/JavaReadingNotes_new (master)

git文件名乱码 gitbash文件名乱码

此时可以成功拉取更新了,不过文件名是乱码的,输入如下命令解决:

1
2
git config --global core.quotepath false

参考资料

Git SSH配置过程
git bash中文乱码

int数组正则替换为String数组

查找:

1
(\d+)(,|})

替换为:

1
"$1"$2

示例

要处理的文本

1
private String[] widthArr = {600, 540, 500, 480, 420, 360, 350, 340};

替换之后:

1
private String[] widthArr = {"600", "540", "500", "480", "420", "360", "350", "340"};

adb获取Android手机上的apk到电脑

获取APP的包名

可以通过先在手机中启动相应的应用,使该应用位于前台。通过如下命令:

1
adb shell dumpsys window | findstr mCurrentFocus

可以获取到当前的activity。

例如:

1
2
3
4
D:\只读>adb -s U8ENW18117021408 shell dumpsys window | findstr mCurrentFocus
mCurrentFocus=Window{409f2b3 u0 com.playgame.havefun/com.bd.ad.v.game.center.MainActivity}

D:\只读>

这条命令的输出中斜杠/之前和倒数第1个空格之间的字符串com.playgame.havefun就是包名

根据包名查找APP在手机上的apk的路径

有了包名之后,通过如下命令来查询apk在Android设备上的路径:

1
adb shell pm path 包名

例如:

1
2
3
4
D:\只读>adb -s U8ENW18117021408 shell pm path com.playgame.havefun
package:/data/app/com.playgame.havefun-p8wNMhz11x_BgqI5wH6d8A==/base.apk

D:\只读>

这条命令的输出结果中的package:后面的就是我们需要的apk的地址:/data/app/com.playgame.havefun-p8wNMhz11x_BgqI5wH6d8A==/base.apk

从手机pull到电脑上

知道apk在Android上的地址之后,通过如下的命令即可把apk从Android拉取到电脑上:

1
adb pull 手机上的apk路径 电脑上的路径

电脑上的路径可以是相对路径,如果是相对路径的话,则下载到当前目录下。在拉取的时候可以给apk取一个别名。

例如:

1
2
3
4
5
D:\只读>adb -s U8ENW18426004595 pull /data/app/com.ztgame.wzzt-4COnnGkt9XsPxhOhVnhu5Q==/base.apk 王者征途.apk
从lan 获取
/data/app/com.ztgame.wzzt-4COnnGkt9XsPxhOhVnhu5Q==/base.apk...ile pulled, 0 skipped. 30.4 MB/s (36797240 bytes in 1.153s)

D:\只读>

如果出现类似上面的输出,可以看到拉取成功了。

查看从Android获取到的apk

1
2
3
4
D:\只读>dir|findstr 王者征途.apk
2023.05.11 13:02 36,797,240 王者征途.apk

D:\只读>

可以看到我们已经成功从手机上获取到这个apk了。

参考资料

https://blog.csdn.net/u013379032/article/details/106663706

adb shell ifconfig

adb shell ifconfig会列出所有的IP地址。
例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
C:\Users\haha>adb -s U8ENW18119024027 shell ifconfig
rmnet_ims00 Link encap:UNSPEC
inet6 addr: fe80::5a02:3ff:fe04:50d/64 Scope: Link
inet6 addr: 2409:8120:9a34:f7c3:1:2:6112:8ffc/64 Scope: Global
UP RUNNING NOARP MTU:1280 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:99 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:5544

wlan0 Link encap:UNSPEC
inet addr:192.168.0.112 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::b92e:4d41:c756:280c/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1242540 errors:0 dropped:0 overruns:0 frame:0
TX packets:1852388 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:655964181 TX bytes:268463682

p2p0 Link encap:UNSPEC
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0

lo Link encap:UNSPEC
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope: Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:177062 errors:0 dropped:0 overruns:0 frame:0
TX packets:177062 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:622693892 TX bytes:622693892

dummy0 Link encap:UNSPEC
inet6 addr: fe80::b423:b9ff:fe08:f390/64 Scope: Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:2279 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:596525


C:\Users\haha>

adb shell ifconfig | findstr Mask

可以使用管道符和findstr命令来做进一步的筛选

1
adb shell ifconfig | findstr Mask

例如:

1
adb -s U8ENW18119024027 shell ifconfig | findstr Mask

运行结果:

1
2
3
4
5
C:\Users\haha>adb -s U8ENW18119024027 shell ifconfig | findstr Mask
inet addr:192.168.0.112 Bcast:192.168.0.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0

C:\Users\haha>

这里有两个地址,第一个就是我当前手机的地址。

adb shell ifconfig wlan0

例如:

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\haha>adb -s U8ENW18119024027 shell ifconfig wlan0
wlan0 Link encap:UNSPEC
inet addr:192.168.0.112 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::b92e:4d41:c756:280c/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1451964 errors:0 dropped:0 overruns:0 frame:0
TX packets:1985457 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:946642186 TX bytes:277407859


C:\Users\haha>

adb shell ifconfig wlan0| findstr Mask

一般来说,我们值需要ipv4的地址就够了,可以使用管道符号和findstr来做更进一步的筛选
例如:

1
2
3
4
C:\Users\haha>adb -s U8ENW18119024027 shell ifconfig wlan0| findstr Mask
inet addr:192.168.0.112 Bcast:192.168.0.255 Mask:255.255.255.0

C:\Users\haha>

adb shell netcfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
C:\Users\haha>adb -s U8ENW18119024027 shell netcfg
rmnet_ims00 UP 0.0.0.0/0 0x000000c1
rmnet_tun11 DOWN 0.0.0.0/0 0x00000000
rmnet_tun01 DOWN 0.0.0.0/0 0x00000000
wlan0 UP 192.168.0.112/24 0x00001043
dummy0 UP 0.0.0.0/0 0x000000c3
rmnet4 DOWN 0.0.0.0/0 0x00000000
p2p0 UP 0.0.0.0/0 0x00001003
rmnet2 DOWN 0.0.0.0/0 0x00000000
Hisilicon0 DOWN 0.0.0.0/0 0x00001002
rmnet_tun14 DOWN 0.0.0.0/0 0x00000000
rmnet0 DOWN 0.0.0.0/0 0x00000000
rmnet_tun04 DOWN 0.0.0.0/0 0x00000000
rmnet_tun12 DOWN 0.0.0.0/0 0x00000000
rmnet_tun02 DOWN 0.0.0.0/0 0x00000000
lo UP 127.0.0.1/8 0x00000049
rmnet_emc0 DOWN 0.0.0.0/0 0x00000000
rmnet_tun10 DOWN 0.0.0.0/0 0x00000000
rmnet_tun00 DOWN 0.0.0.0/0 0x00000000
rmnet3 DOWN 0.0.0.0/0 0x00000000
sit0 DOWN 0.0.0.0/0 0x00000080
ip6tnl0 DOWN 0.0.0.0/0 0x00000080
rmnet1 DOWN 0.0.0.0/0 0x00000000
rmnet_r_ims10 DOWN 0.0.0.0/0 0x00000000
ip_vti0 DOWN 0.0.0.0/0 0x00000080
ip6_vti0 DOWN 0.0.0.0/0 0x00000080
rmnet_r_ims00 DOWN 0.0.0.0/0 0x00000000
rmnet_tun13 DOWN 0.0.0.0/0 0x00000000
rmnet_tun03 DOWN 0.0.0.0/0 0x00000000
rmnet_ims10 DOWN 0.0.0.0/0 0x00000000

C:\Users\haha>

adb shell netcfg| findstr wlan0

1
2
3
4
C:\Users\haha>adb -s U8ENW18119024027 shell netcfg| findstr wlan0
wlan0 UP 192.168.0.112/24 0x00001043

C:\Users\haha>

参考资料

https://blog.csdn.net/HDFQQ188816190/article/details/98599940

获取手机WiFi界面的activity

进入设置,打开WiFi列表,然后在cmd中执行如下命令,来查询当前界面的activity:

1
adb -s 75aed56d shell dumpsys window w |findstr \/ |findstr name=

在我手机上执行的结果如下:

1
2
3
4
C:\Users\haha>adb -s 75aed56d shell dumpsys window w |findstr \/ |findstr name=
mSurface=Surface(name=com.coloros.wirelesssettings/com.coloros.wirelesssettings.wifi.OppoWifiSettingsActivity)

C:\Users\haha>

name=后面的信息就是WiFi列表的activity:
com.coloros.wirelesssettings/com.coloros.wirelesssettings.wifi.OppoWifiSettingsActivity

adb打开指定的activity

adb打开某个APP的指定activity的命令如下:

1
adb shell am start -n 包名/activity名

使用adb命令进入WiFi的activity

所以,使用adb命令打开我这个OPPO手机的WiFi列表的命令如下:

1
adb -s 75aed56d shell am start -n com.coloros.wirelesssettings/com.coloros.wirelesssettings.wifi.OppoWifiSettingsActivity

执行上述命令收我的手机成功切换到WiFi列表了,此时再手动选择要连接的WiFi即可。

其他手机上

我在我的荣耀手机上执行查询activity命令输出如下:

1
2
3
4
5
6
C:\Users\haha>adb -s U8ENW18426004595 shell dumpsys window w |findstr \/ |findstr name=
mAnimationIsEntrance=true mSurface=Surface(name=StatusBar)/@0x50bafc7
mSurface=Surface(name=com.android.settings/com.android.settings.Settings$WifiSettingsActivity)/@0xad1a806
mSurface=Surface(name=com.android.systemui.HwImageWallpaper)/@0xaafb1de

C:\Users\haha>

这里的输出有点多,我们需要的activity是:

1
com.android.settings/com.android.settings.Settings$WifiSettingsActivity

命令如下:

1
adb -s U8ENW18426004595 shell am start -n com.android.settings/com.android.settings.Settings$WifiSettingsActivity

执行结果:

1
2
3
4
C:\Users\haha>adb -s U8ENW18426004595 shell am start -n com.android.settings/com.android.settings.Settings$WifiSettingsActivity
Starting: Intent { cmp=com.android.settings/.Settings }

C:\Users\haha>

无法打开WiFi界面,屏幕闪了一下就回退到原来的界面。

解决方案

在start后面加上-a android.intent.action.MAIN选项即可:

1
2
3
4
C:\Users\haha>adb -s U8ENW18426004595 shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings
Starting: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.wifi.WifiSettings }

C:\Users\haha>

adb shell dumpsys window w | findstr mCurrent

问题描述

我手上有部OPPO的旧手机,OPPO R9 Plusm A。

因为是旧手机不怎么使用,所以我使用USB数据线连接该手机,并通过scrcpy.exe投屏来操作手机。

使用scrcpy.exe投屏的话,就要在手机上开启USB调试功能。要开启USB调试功能。就打开开发者模式。

但是我这个傻逼的OPPO手机,在开启USB调试之后,会在手机顶部显示一个黄色的警告栏。
如下图所示:

这个讨厌的警告条会一直显示在手机顶部,如果你一不小心点到它,开发者选项就会关闭。
那么USB调试也就关闭掉了,那么scrcpy.exe投屏也就无法使用了。

如果你还是想继续投屏使用手机,那你得重新打开开发者选项,重新打开USB调试功能。

这就很烦。

查找不到可以去掉该黄色警告条的方法

那么有没有什么方法也去掉这个警告条呢。

很遗憾,我在搜索和很久,都没有搜到解决方案。

OPPO的客服也说了这是不可以去掉的。

解决方案:在状态栏中关闭开发模式,然后在状态栏中开启USB调试

我记得我以前是可以关掉这个黄色警告栏的。

后来警告我的不断尝试,我终于到到了方法。具体操作如下。

确保状态栏中可以设置USB调试

我这个方法的前提就是状态栏中有 可以的设置USB调试的通知

连接好USB调试之后,下拉手机顶部打开状态栏。如果你的状态栏如下图所示,则可继续:

上图中的状态栏中有三栏,我们要操作第3栏(”开发者选项”已开启_存在系统异常,崩溃等风险,点击关闭)和第1栏(USB调试已打开_点击可设置停用USB调试)

如果你手机上的状态栏上,没有显示第1栏(USB调试设置栏),则把数据线从电脑的当前USB接口中拔出,然后插到电脑上的另一个USB接口上。这样应该就会出现第1栏了。

在状态栏中关闭开发者选项

点击上图冲的第3栏(”开发者选项”已开启_存在系统异常,崩溃等风险,点击关闭),点击之后,开发者选项就关闭掉了。

这个时候USB调试功能也会关闭

在状态栏中开启USB调试功能

不过,幸运的是,此时任务栏中的第1栏还在,点击第1栏,然后再打开USB调试的按钮即可,如下图所示:

此时,USB调试是打开的状态,但是呢,开发者选项是关闭的,顶部也不会有黄色的警告条了。

问题描述

我有一台手机,每次连接到我的电脑上时,电脑都会自动打开一个文件夹。
当我电脑上的运行的程序比较多的时候,如果这个时候我把这台手机连接到电脑上。此时,我电脑上就会弹出资源管理器,资源管理器中会自动打开这个手机的根目录。
我并不需要这个功能。
弄了好久,我终于知道如何关掉这个功能。

原因:自动播放设置有误

这台手机之前设置的自动播放方式为“打开设备以查看文件(文件资源管理器)”

解决方案

进入 控制面板 ,在搜索框中搜索 自动播放,然后进入 自动播放 页面
在下面的设备中找到有问题的手机,展开右侧的下拉列表,选择 不执行操作,或者直接点击下方的 重置所有默认值(R) 按钮即可。

如下图1所示:

图1

这样下次连接手机,就不会再弹出文件资源管理器了

参考资料

https://jingyan.baidu.com/article/aa6a2c1438bf584c4c19c4b7.html