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 的情况下应用的主要内容,如果未能解决你的问题,请参考以下文章

ADB(Android Debug Bridge)小结

ADB常用命令(Android Debug Bridge)

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)