Android Debug Bridge 强制 RTL 选项在没有 root 的情况下应用
Posted
技术标签:
【中文标题】Android Debug Bridge 强制 RTL 选项在没有 root 的情况下应用【英文标题】:Android Debug Bridge force RTL option to apply without root 【发布时间】:2021-09-30 09:55:57 【问题描述】:我了解到,使用 ADB 可以强制布局指南使用以下命令显示:
adb shell setprop debug.layout true
adb shell service call activity 1599295570 # SYSPROPS_TRANSACTION
感谢SYSPROPS_TRANSACTION
代码,开发人员可以看到布局网格。
例子可以在here找到
但是,如果我想更改 RTL(从右到左)之类的内容 - SYSPROPS_TRANSACTION
调用不会强制重新渲染,我怀疑是因为它需要重新启动活动,因为设备的旋转将起作用:
adb shell setprop debug.force_rtl true
adb shell settings put system user_rotation 3 # landscape
adb shell settings put system user_rotation 0 # portrait
虽然我不介意使活动无效,但我认为我不应该成为关于它的“手册”。有没有一种机制可以在不进行旋转的情况下刷新屏幕?
我查看了AOSP 并找到了这个:
private void writeToForceRtlLayoutSetting(boolean isEnabled)
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.DEVELOPMENT_FORCE_RTL,
isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
DisplayProperties.debug_force_rtl(isEnabled);
大致相当于:
adb shell settings put global debug.force_rtl 1.0 #or 0.0 for off
但我注意到如果我这样做并且旋转不会改变
我一直在尝试找到合适的广播意图以使其正常工作,但我找不到只是告诉屏幕重新渲染的意图
adb shell am broadcast <SOMETHING HERE WOULD BE NICE>
我从 DarkModePreference 中取出一页并试图告诉它电池充电状态已更改,但您无法从 ADB 中执行此操作:
adb shell am broadcast android.os.action.POWER_SAVE_MODE_CHANGED
但也没有运气 - 没有刷新发生
注意:
有趣的是,android 源代码中的layout bounds and RTL elements are grouped,但在更改时不要使用相同的行为
【问题讨论】:
【参考方案1】:我注意到如果我使用
adb shell wm size
我可以读取窗口的大小,并且作为奖励,在设置它时,它会导致从右到左重绘。所以现在我要做的是读取窗口大小,保存它,稍微更改一下,将其设置为更改后的值并重新设置。我的脚本看起来像:
run("adb shell settings put global debug.force_rtl 1.0")
old_size = run("adb shell wm size")
run("adb shell wm size 100x100")
run("adb shell wm size " + old_size)
它会强制从右向左。这有点hacky,但它有效。
【讨论】:
以上是关于Android Debug Bridge 强制 RTL 选项在没有 root 的情况下应用的主要内容,如果未能解决你的问题,请参考以下文章
RK3568平台开发系列讲解(工具命令篇)Android Debug Bridge常用命令
adb基本命令总结(Android Debug Bridge)
有没有办法在使用 Android Debug Bridge 安装应用程序时忽略 INSTALL_FAILED_VERSION_DOWNGRADE?
Android Studio - Unable to create Debug Bridge: Unable to start adb server: adb server version (32)