SD5360-660-M1麦当劳
本帖最后由 King 于 2024-10-8 13:53 编辑个人:锁定竖屏可能会导致 其他接口输出扁平化,局部触摸失效等
黑屏问题依然没有解决
app默认获取所有权限无需动态获取,暂时需动态获取(远程工具、麦当劳等少了无弹窗)
ro.serial无法设置,当时设置的是和家里一致的位置。
wm size 第一次需要设置1080*1920,之后 adb reboot不影响
静默安装对应安装含McDonald's 关键字的app 可以实现静默安装
07142242- 去掉远程弹窗。
660仍然存在的问题如下:
1、通知栏菜单,开关设置无效。(通知栏状态栏需同时打开,逻辑上无状态栏就无通知栏)
2、主屏旋转角度默认0度,修改无效。(7.16 可以支持旋转)
3、升级后(或恢复出厂设置),分辨率不正确,需要adb修改。
4.定时开关机,时间节点。(批量出货之后方可实现)
静默安装,上层调用方式,rom 实现
val intent = Intent("android.intent.action.SILENT_PACKAGE_INSTALL")
intent.component =ComponentName("com.android.packageinstaller",
"com.android.packageinstaller.SilentInstallerReceiver")
intent.putExtra("silent_install_file", file.absolutePath)
sendBroadcast(intent,null)
要求全量包升级
提供给上层调用的唯一识别码
获取设备唯一序列号,序列号和pc 外面贴的标签一致
如:上层调用方式:
Settings.Global.getString(context.getContentResolver(), "ro_serial")
1)系统设置增加以太网设置菜单,支持dhcp和静态IP设置;
2)静态 ip 配置
上层调用方式如下,rom实现
Intent intent = new Intent("android.net.action.ETHERNET_IP_CHANGED");
intent.putExtra("netMode", "static");
intent.putExtra("ipaddr",xx.xx.xx.xx);
//static 配置中子网掩码可能为空,接口里面拿到子网掩码进行配置
intent.putExtra("netMask", xxx.xxx.xxx.xx);
intent.putExtra("gateway",xxx.xxx.xx.xx);
intent.putExtra("dns1", xxx.xxx.xx.xx);
intent.putExtra("dns2", xxx.xxx.xx.xx);
intent.setComponent(new ComponentName("com.android.settings",
"com.android.settings.ethernet. EthernetBroadcastReceiver"));
context.sendBroadcast(intent,null);
3)切为动态 dhcp 增加动态配置的方式,广播只传入配置方式 netMode 为 dhcp,其他内容为空。
Intent intent = new Intent("android.net.action.ETHERNET_IP_CHANGED");
intent.putExtra("netMode", "dhcp");
intent.setComponent(new ComponentName("com.android.settings",
"com.android.settings.ethernet.EthernetBroadcastReceiver"));
context.sendBroadcast(intent,null);
查询webview 版本
app 管理里查看,version 93.0.4577.62
adb shell dumpsys webview | grep "WebViewFactory"
本帖最后由 King 于 2024-10-28 16:37 编辑
ro_serial 关联 ro.serial
或者将ro_serial 放在固定不可重置区域。
设置
adb shell am broadcast -a com.android.serial --es set CJAM1012345
adb shell "am broadcast -a com.android.serial --es set 12345678"
获取
Settings.Global.getString(context.getContentResolver(), "ro_serial")
settings get global ro_serial
adb shell settings get global ro_serial
adb shell "am broadcast -a com.android.serial --es set CJAM1010000000J23010037"
广播写入一次后,可以用settings put global ro_serial 12345678 写入
adb shell dumpsys display | grep "mDisplayId"
多屏操作:adb shell dumpsys display
scrcpy.exe --display 10 (错误后,可查看当前可用屏幕)
scrcpy 目录下执行
scrcpy.exe --display 0主屏
scrcpy.exe --display 1副屏
# 基本语法
scrcpy --display <display-id>
# 示例:控制显示ID为1的屏幕
scrcpy --display 1
# 同时控制多个显示
scrcpy --display 0 & scrcpy --display 1
# 列出所有显示设备详细信息
adb shell dumpsys display | grep -A 20 "Display Devices"
# 查看当前活跃的显示
adb shell dumpsys display | grep "mCurrentDisplayRect"
# 查看显示状态
adb shell dumpsys display | grep "Display Power"
# 实时监控显示状态变化
adb shell dumpsys display | grep -E "mDisplayId|mState" --line-buffered
# 或使用watch命令
watch -n 1 "adb shell dumpsys display | grep mDisplayId"
本帖最后由 King 于 2024-11-13 17:35 编辑
远程使用时,副屏跟随旋转要关掉,远程才能正常全屏V1 签名JAVA_HOME:C:\Program Files\Java\jre1.8.0_333
JAVA_HOME:C:\Program Files\Java\jre1.8.0_333
D:\Tools\signapk
java -jar signapk.jar platform.x509.pem platform.pk8 MCD.apk MCD_signed.apk
JAVA_HOME:C:\Program Files\Java\jdk-20
v1 v2 v3签名
C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\33.0.0
$ apksigner sign --key platform.pk8 --cert platform.x509.pem --out MCD_signed.apk MCD.apk
centos环境
devops/apksign
使用java 配置 sudo update-alternatives --config java ,java-1.8.0
使用source profile 配置
#set java environment
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
export JRE_HOME=/usr/lib/jvm/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind'
export ANDROID_HOME=/var/lib/jenkins/android-sdk/tools/bin
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
找到libconscrypt_openjdk_jni.so 库 修改可执行权限 执行 ldd libcon……即可解决 Failed to load any of the given libraries: [conscrypt_openjdk_jni-linux-x86_64,问题
java -jar -Djava.library.path=. signapk.jar platform.x509.pem platform.pk8 MCD.apk MCD_Signed.apk
java -jar -Djava.library.path=. signapk.jar platform.x509.pem platform.pk8 MCD.apk MCD_Signed.apk
查看前面SHA-1值
keytool-printcert -jarfile C:\Users\Administrator\Desktop\CashBoxService.apk
1.252平台签名
java -jar -Djava.library.path=. signapk.jar platform.x509-5360.pem platform-5360.pk8 app-release.apk app-release-signed.apk
竖屏固件调整横屏后恢复出厂,开机logo 不全屏
竖屏倒向 90度,刷机,logo正向竖屏,动画倒向。 本帖最后由 King 于 2022-10-19 15:32 编辑
cat /sys/devices/virtual/thermal/thermal_zone5/temp
这个是核心模组里面的温度
adb shell cat /proc/meminfo
查看内存使用情况
cat /proc/stat或者 dumpsys cpuinfo
查看CPU占用情况
_________________________________________________________________________________________________________________
打开
1111111 -> 周一/.../周日
关闭
0000000 -> 周一/.../周日
adb shell "am broadcast -a com.ubiot.auto_power_shut -f 0x1000000 --es power_time 15:22 --es shut_time 15:18 --es week 1111111 --ez effective true"
——————————————————————————————————————————————————————————————————————
打开(不加--es week是星期全打开)
1111111 -> 周一/.../周日
关闭
0000000 -> 周一/.../周日
单独设置开机时间/星期
adb shell "am broadcast -a com.ubiot.auto_power_shut -f 0x1000000 --es power_time 15:22 --es week 1111111 --ez effective true"
单独设置关机时间/星期
adb shell "am broadcast -a com.ubiot.auto_power_shut -f 0x1000000 --es shut_time 15:18 --es week 1111111 --ez effective true"
同时设置时间/星期(星期在开机和关机上同时生效)
adb shell "am broadcast -a com.ubiot.auto_power_shut -f 0x1000000 --es power_time 15:22 --es shut_time 15:18 --es week 1111111 --ez effective true"
张健:
这个参数必须7个,同时设置。打开设置1,关闭设置0
少了参数,不加参数,默认星期全设置
————————————————————————————————————————————————————
打开(不加--es week是星期全打开)
1111111 -> 周一/.../周日
关闭
0000000 -> 周一/.../周日
单独设置开机时间/星期
scrcpy.adb shell "am broadcast -a com.ubiot.auto_power_shut -f 0x1000000 --es power_time 15:22 --es week 1111111 --ez effective true"
单独设置关机时间/星期
scrcpy.adb shell "am broadcast -a com.ubiot.auto_power_shut -f 0x1000000 --es shut_time 15:18 --es week 1111111 --ez effective true"
同时设置时间/星期(星期在开机和关机上同时生效)
scrcpy.adb shell "am broadcast -a com.ubiot.auto_power_shut -f 0x1000000 --es power_time 15:22 --es shut_time 15:18 --es week 1111111 --ez effective true"
本帖最后由 King 于 2024-10-24 11:30 编辑
一个只刷Android,一个全文件刷,你们用的是Android部分的,在那个Android的xml里面。。除了Android还有3g/4g的代码,以及供电部分代码和其他部分的,我这边为了方便就一起刷的。
sadb shell am force-stop com.mcdonalds.sok.cn
关闭 麦当劳 进程
adb shell am start -n com.mcdonalds.sok.cn/.activity.LaunchActivity
am start -n com.oray.sunlogin.customize/com.oray.sunlogin.application.Main
拉起麦当劳app 到最顶层
setprop persist.sys.apk_install_auto_start true//开(默认)
setprop persist.sys.apk_install_auto_start false //关
660平台开发的功能,目的给用户APP自动升级用的,升级完拉起自己。
adb shell getprop persist.sys.apk_install_auto_start 应为false
本帖最后由 King 于 2023-3-31 16:59 编辑
adb shell "am broadcast -n com.system.ota/com.system.ota.OtaUpdateReceiver -a zysj.remote.update.system"
《adb shell am broadcast -a zysj.remote.update.system》仅添加,上面是adb指令
将update.zip 放在storage/emulated/0 下面
sadb push H:\Downloads\update.zip /sdcard
sadb logcat | grep "ota" 查看进度
03-31 16:50:45.64033313344 D ota : onStatusUpdatestatus: 3
03-31 16:50:45.64233313344 D ota : update progress: 91
03-31 16:50:47.72733313344 D ota : onStatusUpdatestatus: 3
03-31 16:50:47.72933313344 D ota : update progress: 92
03-31 16:50:49.30933313344 D ota : onStatusUpdatestatus: 3
03-31 16:50:49.31533313344 D ota : update progress: 93
03-31 16:51:01.38433313344 D ota : onStatusUpdatestatus: 3
03-31 16:51:01.38833313344 D ota : update progress: 94
03-31 16:51:06.43233313344 D ota : onStatusUpdatestatus: 3
03-31 16:51:06.43433313344 D ota : update progress: 95
03-31 16:51:07.56433313344 D ota : onStatusUpdatestatus: 3
03-31 16:51:07.56633313344 D ota : update progress: 96
03-31 16:51:07.79233313344 D ota : onStatusUpdatestatus: 3
03-31 16:51:07.79433313344 D ota : update progress: 97
03-31 16:51:07.98733313344 D ota : onStatusUpdatestatus: 3
03-31 16:51:07.99033313344 D ota : update progress: 98
03-31 16:51:08.17533313344 D ota : onStatusUpdatestatus: 3
03-31 16:51:08.17733313344 D ota : update progress: 99
03-31 16:51:09.05833313344 D ota : onStatusUpdatestatus: 5
03-31 16:51:23.92933313344 D ota : onStatusUpdatestatus: 5
03-31 16:51:23.94933313344 D ota : onStatusUpdatestatus: 6
03-31 16:51:23.94933313344 D ota : onPayloadApplicationComplete errorCode=0
03-31 16:51:23.95333313344 D ota : UPDATE SUCCESS!
03-31 16:51:23.96810371037 I update_engine: uploading 1 to histogram for metric ota_update_engine_attempt_number
03-31 16:51:23.96910371037 I update_engine: uploading 0 to histogram for metric ota_update_engine_attempt_payload_type
03-31 16:51:23.96910371037 I update_engine: uploading 3 to histogram for metric ota_update_engine_attempt_duration_boottime_in_minutes
03-31 16:51:23.96910371037 I update_engine: uploading 3 to histogram for metric ota_update_engine_attempt_duration_monotonic_in_minutes
03-31 16:51:23.96910371037 I update_engine: uploading 605 to histogram for metric ota_update_engine_attempt_payload_size_mib
03-31 16:51:23.96910371037 I update_engine: uploading 0 to histogram for metric ota_update_engine_attempt_result
03-31 16:51:23.96910371037 I update_engine: uploading 0 to histogram for metric ota_update_engine_attempt_error_code
03-31 16:51:24.00210371037 I update_engine: uploading 634524960 to histogram for metric ota_update_engine_attempt_current_bytes_downloaded_mib
03-31 16:51:24.02410371037 I update_engine: uploading 1 to histogram for metric ota_update_engine_successful_update_attempt_count
03-31 16:51:24.02410371037 I update_engine: uploading 0 to histogram for metric ota_update_engine_successful_update_payload_type
03-31 16:51:24.02410371037 I update_engine: uploading 605 to histogram for metric ota_update_engine_successful_update_payload_size_mib
03-31 16:51:24.02410371037 I update_engine: uploading 605 to histogram for metric ota_update_engine_successful_update_total_bytes_downloaded_mib
03-31 16:51:24.02410371037 I update_engine: uploading 0 to histogram for metric ota_update_engine_successful_update_download_overhead_percentage
03-31 16:51:24.02410371037 I update_engine: uploading 3 to histogram for metric ota_update_engine_successful_update_total_duration_in_minutes
03-31 16:51:24.02410371037 I update_engine: uploading 0 to histogram for metric ota_update_engine_successful_update_reboot_count
03-31 16:51:25.49733313344 E ota : rebootNow
升级完成后 直接重启,没有提示,检测版本号后面有-OTA 表示升级成功。
升级完成后,根目录 update.zip 删除
本帖最后由 King 于 2022-12-13 17:13 编辑
$ sadb shell
sdm660_64:/ $ settings list global | grep ntp
ntp_server=ntp1.aliyun.com
ntp_server_2=persist.vendor.ntp.svr_2
$ adb shell settings put global ntp_server asia.pool.ntp.org
# test
$ adb shell settings get global ntp_server
> asia.pool.ntp.org
1、设置时间adb shell "date 07010101.00"
设置时间格式为MMDDHHM.00,不能设置年慧为:adb shell date 022520402021.59 setadb shell su -c date 022520402021.59 set加su 权限
2、读取时间adb shell "date"https://pic4.zhimg.com/80/v2-a01ac6a1aef206ee76daf4bc3305c9cb_720w.webp
3、设置时区adb shell "setprop persist.sys.timezone Pacific/Midway"Pacific/Midway为设置的时区4、读取时区adb shell "getprop persist.sys.timezone"
第一的, adb shell settings put global auto_time 1(打开自动日期和时间)第二,adb shell date '0739010002017.00'(设定你想要的时间)第三,adb shell settings put global auto_time 0(关闭自动日期和时间)
更改日期与系统相同adb shell date -s `date +%G%m%d.%H%M%S`将日期更改为明天:adb shell date -s `date --date='1 day' +%G%m%d.%H%M%S`将日期更改为明天凌晨 12 点adb shell date -s `date --date='1 day' +%G%m%d.000000`将日期更改为昨天 adb shell date -s `date --date='1 day ago' +%G%m%d.%H%M%S`将日期更改为一周前adb shell date -s `date --date='1 week ago' +%G%m%d.%H%M%S`
扩展 @uval 的答案,您可以使用以下内容根据 Windows 机器上的时间更新 Android 设备上的日期和时间:adb shell su -c date %dateMM%%dateDD%%timeHH%%timeMM%%dateYYYY%.%timeSS%
adb shell su -c am broadcast -a android.intent.action.TIME_SET
使用adb修改屏幕像素密度 (此命令针对全志开发板子)
adb shell am display-density 120
{以下命令针对高通的开发板子}
获取Android设备屏幕分辨率:
adb shell wm size
获取android设备屏幕密度:
adb shell wm density
修改屏幕像素密度
adb shell wm resize 1920*1080
adb shell wm size 540×960
重置屏幕尺寸大小
adb shell wm size reset
设置屏幕dpi (常用的dpi有160mdpi, 240hdpi, 320xhdpi, 480xxhdpi)
adb shell wm density 320
重置可用dpi如下命令
adb shell wm density reset
本帖最后由 King 于 2024-1-24 13:44 编辑
先进入adb shell , dumpsys | grep "DUMP OF SERVICE"就可以看哪些service可以dump
dumpsys | grep "DUMP OF SERVICE"
adb shell service list
service list | grep "network_time_update_service"
要简单检查特定服务是否正在运行,请使用:adb shell service check <service>例如,adb shell service check media.player赋予Service media.player: found如果它的运行和Service media.player: not found其他.如果您需要更多细节,请尝试dumpsys <service>.例如,adb shell dumpsys media.player返回有关media.player客户端,打开文件等的信息.最后,如果您真的需要认真的调试细节,请尝试从adb shell dumpsys activity services哪个角度展示正在发生的事情ActivityManager.这包括有关意图,创建时间,上次活动时间,绑定等的信息等.如果要存储输出以供以后查看/搜索,可以重定向输出.它通常相当冗长.
查看设备运行时间
adb shell dumpsys | grep "uptime"
Current stats (from -28m0s673ms to now, +28m0s673ms uptime):
Runtime uptime (elapsed): +28m2s395ms
Runtime uptime (uptime): +28m2s395ms
本帖最后由 King 于 2024-10-30 13:23 编辑
关闭 麦当劳
adb shell "ps|grep com.mcdonalds.sok.cn"
u0_a57 3092 903 445893686420 0 0 S com.mcdonalds.sok.cn.dev:remote
system 3482 904 118438044500 0 0 S com.qualcomm.qti.smcinvokepkgmgr
radio 3502 903 387135651532 0 0 S com.qualcomm.simcontacts
u0_a57 3672 903 4793788 203704 0 0 S com.mcdonalds.sok.cn.dev
adb root
adb shell " kill -9 3092"
adb shell " am force-stop com.mcdonalds.sok.cn.dev"
kill 用于终止进程kill
有十几种控制进程的方法,下面是一些常用的方法:
kill -STOP
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。
SIGKILL 和 SIGSTOP 信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。
ps -ef | grep 包名、进程名
ps -ef | grep kafka
top -u 包名、进程名
cat /proc/meminfo
proc/meminfo 机器的内存使用信息/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。/proc/pid/statm 进程所占用的内存
查看机器可用内存/proc/28248/>free1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。
13)ps x 显示所有程序,不以终端机来区分。如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
ps auxw | head -1;ps auxw | sort -rn -k4 | head -5 查看内存占用前5进程
ps auxw | head -1;ps auxw | sort -rn -k3 | head -3
查看CPU 占用前3 进程
快捷键 adb 指令发送
可以使用adb shell命令来发送返回桌面的指令。具体指令如下:adb shell input keyevent 3这个指令模拟按下home键的操作,可以将焦点切换到桌面。
[*]返回桌面(home)指令:
[*]adb shell input keyevent 3
[*]菜单指令:
[*]adb shell input keyevent 82
[*]返回指令:
[*]adb shell input keyevent 4
[*]打开通知面板:adb shell input keyevent 226
[*]打开快捷设置面板:adb shell input keyevent 239
[*]打开最近任务列表:adb shell input keyevent 19
[*]打开音量调整滑块:adb shell input keyevent 200
[*]减小音量:adb shell input keyevent 203
[*]增大音量:adb shell input keyevent 205
[*]静音/取消静音:adb shell input keyevent 164
[*]锁屏:adb shell input keyevent 264
[*]亮屏:adb shell input keyevent 224
安卓系统底部的三个按键依次是“返回键”、“主页键”、“多任务键”。其中,“返回键”通常位于左侧,“主页键”位于中间,“多任务键”通常位于右侧。使用adb发送指令到安卓设备时,可以通过输入相应的adb shell命令来模拟按下这些按键的操作。具体指令如下:
[*]模拟按下返回键:
[*]adb shell input keyevent KEYCODE_BACK
[*]模拟按下主页键:
[*]adb shell input keyevent KEYCODE_HOME
[*]模拟按下多任务键:
[*]adb shell input keyevent KEYCODE_ RecentApps
# 短按power键
adb shell input keyevent 26 # KEYCODE_POWER
# 或
adb shell input keyevent KEYCODE_POWER
# 长按power键(模拟按下和抬起)
adb shell "input keyevent --longpress 26"
# 或
adb shell "input keyevent --longpress KEYCODE_POWER"
# 查找power键对应的输入设备
adb shell getevent -l | grep -i power
# 发送按键事件(示例路径,实际设备可能不同)
adb shell sendevent /dev/input/event0 1 116 1# 按下
adb shell sendevent /dev/input/event0 0 0 0
adb shell sendevent /dev/input/event0 1 116 0# 释放
adb shell sendevent /dev/input/event0 0 0 0
# 触发关机对话框
adb shell service call power 7
# 模拟power键按下
adb shell service call power 2
# 强制关机
adb shell reboot -p
可以使用adb shell命令来发送切换任务的指令。具体指令如下:adb shell am start -n com.android.deskclock/.AlarmClock这个指令会启动一个名为AlarmClock的应用,并将焦点切换到该应用。你可以将com.android.deskclock和.AlarmClock替换为你想要切换到的应用包名和活动名。另外,如果你想要发送其他切换任务的指令,可以使用adb shell dumpsys activity命令来获取当前运行的应用和活动信息,然后根据需要编写相应的adb shell命令来模拟用户操作。
01-26 15:43:39.493 452 530 D WindowManager: interceptKeyTi keyCode=3 down=false repeatCount=0 keyguardOn=false mHomePressed=true canceled=false
[*]win=Window{37e28b1 u0 com.hezheng.pos/com.hezheng.hkpos.ui.activity.trade.goods.GoodsActivity}:指定了与事件相关的窗口,其中 com.hezheng.pos 是应用程序的包名,com.hezheng.hkpos.ui.activity.trade.goods.GoodsActivity 是活动的类名。
[*]action=1:指定按键事件的动作。在这里,1 表示按下动作。
[*]flags=40:标志位,以十进制表示。在这里,40 的二进制表示是 101000,表明事件可能具有一些特殊标志。
[*]keyCode=82:按键码,这里是 82,表示 Menu 键。
[*]scanCode=0:扫描码,这里是 0。
[*]metaState=0:元状态,这里是 0,表示没有按下任何修饰键(如 Shift、Ctrl、Alt 等)。
[*]repeatCount=0:重复次数,这里是 0,表示这是按键的第一次触发。
[*]policyFlags=1795162112:策略标志,以十进制表示。在这里,1795162112 的二进制表示是 1101010100000000100101000100000,这可能包含一些窗口管理器的策略信息。
[*]keyCode=3:按键码,这里是 3,通常对应于 Home 键。
[*]down=false:指示按键事件的动作,这里是 false,表示按键被释放(抬起)。
[*]repeatCount=0:重复次数,这里是 0,表示这是按键的第一次触发。
[*]keyguardOn=false:指示键盘锁是否打开,这里是 false,表示键盘锁未打开。
[*]mHomePressed=true:指示 Home 键是否被按下,这里是 true,表示 Home 键被按下。
[*]canceled=false:指示按键事件是否被取消,这里是 false,表示按键事件未被取消。
因此,这条日志的含义是窗口管理器拦截了一个 Home 键的释放事件,并且当前 Home 键处于按下状态,未被键盘锁锁定,且按键事件未被取消。这可能反映了系统处理 Home 键事件的一些状态和逻辑。
在Android系统中,system分区默认情况下是只读文件系统。这是为了保证系统的稳定性和安全性,防止未经授权的修改。然而,在某些情况下,可能需要对system分区进行写操作。要对system分区进行写操作,首先需要重新挂载system分区为可读写模式。这通常涉及到系统级别的权限和复杂的操作,因为直接修改system分区可能会对系统稳定性和安全性造成严重影响。在Android中,应用程序通常没有直接访问设备存储的写入权限。如果应用程序需要写入外部存储,它需要在AndroidManifest.xml文件中声明写入权限(如<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>),并在运行时检查用户是否已授予该权限。关于A/B分区,它是一种特殊的文件系统结构,将系统分区分成了A和B两个槽(slot)。这种结构的主要作用是实现无缝升级。当系统需要更新时,可以在一个槽(如B槽)中下载并安装新版本的系统,而用户仍然可以在另一个槽(如A槽)中继续使用当前版本的系统。一旦B槽中的新系统安装完成,系统会提示用户重启,并在重启后自动切换到B槽的新版本系统。这样,用户在整个升级过程中几乎不会感知到中断,从而实现了无缝升级。A/B分区结构与system分区有关联,因为A/B分区实际上是将system分区分成了两个独立的槽。平时系统工作在一个槽(如A槽),而OTA(Over-The-Air,空中下载技术)升级则在另一个槽(如B槽)进行。这种结构使得系统可以在不影响用户当前使用的情况下进行升级,提高了系统的可用性和稳定性。
1、uiautomatorviewer: android-sdk自带。需要android开发环境。手机上打开对应页面,在终端输入uiautomatorviewer即可。
Write automated tests with UI Automator
2、Android Studio中的LayoutInspector:IDE带的,可以实时查看布局层级信息。通过adb连接上手机,然后在Android Studio中打开LayoutInspector,即可查看手机上的实时布局信息。
如果页面复杂,会卡顿。
Layout Inspector
3、stecho: facebook的开源库,可以在浏览器中查看布局信息。在项目中依赖stetho三方库,运行到手机上之后,在浏览器中可查看。
stetho
4、dumpsys通过adb shell dumpsys activity top命令,拿到当前activity的快照,内部包含布局信息。
最稳定、靠谱。
adb shell dumpsys activity top