我手里有一个三星的安卓平板(SM-P601),分辨率是 2560×1600,像素密度 320,经常被某些傻X APP 认为不是移动设备。今天刚发现可以通过一个 wm
命令来临时修改分辨率,于是手贱改了个 640×360,然后悲剧发生了:因为我是在 Terminal Emulator 里 Root 修改的,没有开 ADB,然后屏幕小到看不全,也没法打 wm reset
,重启也不管用。借助万能的谷歌,终于坎坷的恢复回去了。下面记录一下各种坑……
第一关:怎么启用 ADB?
在网上搜了一下,果然有蛋疼的老外跟我一样蠢,在没开 ADB 的情况下修改了分辨率,还改不回去了,例如 XDA 的这位仁兄,然后他找出了如何通过 Recovery 强制启用 ADB 的方法:
我用的是 TWRP,首先长按电源键重启,并按住 Home + 音量加进入 Recovery(不同设备组合键也不一样)。然后在 Mount 中挂载 System,再进入 Advanced – Terminal,并使用 vi /system/build.prop
加入以下行:
persist.service.adb.enable=1
persist.service.debuggable=1
persist.sys.usb.config=mtp,adb
如果不会使用 vi 或者觉得麻烦,可以用 File Manager 把 /system/build.prop
拷到 /sdcard
,然后利用 TWRP 的 MTP 把它复制到电脑上修改,然后再拷贝回去。
重启系统后,电脑上使用 adb devices
可以看到设备了,然而后面显示 unauthorized,无法进入 adb shell
……于是进入第二关。(如果你的设备版本较低无需 ADB 授权,或以前授权过这台电脑,可以直接跳到最后。)
第二关:怎么授权 ADB?
还是没办法进行屏幕操作。一般连上 ADB 之后都会有个“是否允许 USB 调试”的提示,点允许就授权好了。于是又放狗一搜,果然也有 StackOverflow 的老外解决了这个问题。
首先找到你电脑上的 adbkey.pub
公钥,位置可能在 $ANDROID_SDK_HOME
环境变量对应的位置(如果安装过 SDK)、C:\Users\用户名\.android
(Windows 默认)或 ~/.android
(其它系统默认)。找到之后,改名为 adb_keys
,并利用 TWRP 的 MTP 传输到手机的 /sdcard
(也就是内部存储)根目录。
然后回到 TWRP 的 Advanced – File Manager,找到 /sdcard/adb_keys
并复制到 /data/misc/adb
目录下。重启手机即可连接 ADB。
如何正确地修改分辨率?
在系统中进入 adb shell
,在修改分辨率时要保证屏幕是关闭(锁屏)状态,所以最好不要在 Terminal Emulator 命令行中修改。
要恢复默认的分辨率,根据系统版本不同对应的命令是:
am display-size reset
(< Android 4.3)wm size reset
(≥ Android 4.3)
然后如果要修改分辨率或密度(density),使用的命令是:
am display-size 1080x720
am display-density 240
wm size 1080x720
wm density 240
感激不尽,你救了我的手机,谢谢
Android10 此授权方法已失效?
牛逼,谢谢作者
谢谢作者救了我的手机233333
另外回复2楼,我的安卓10手机使用文中方法是有效的
有rec直接把data/system/user/0/settings_global.xml中display_size_forced字段的值删掉或者改回来就行,跟adb一个效果