Android GMS 开机向导横竖屏切换配置总结

Android GMS 开机向导横竖屏切换配置总结

文章目录

  • [Android GMS 开机向导横竖屏切换配置总结](#Android GMS 开机向导横竖屏切换配置总结)
    • 一、前言
    • 二、相关分析总结
      • [1、相关属性 ro.setupwizard.rotation_locked](#1、相关属性 ro.setupwizard.rotation_locked)
      • [2、系统设置可旋转属性 Settings system accelerometer_rotation](#2、系统设置可旋转属性 Settings system accelerometer_rotation)
      • 3、adb调试旋转功能
    • 三、其他
      • 1、小结
      • [2、编译固化只读 ro 属性(整机默认显示方向,底层硬件 / 显示层)](#2、编译固化只读 ro 属性(整机默认显示方向,底层硬件 / 显示层))
        • [(1) `ro.sf.hwrotation` SurfaceFlinger 硬件物理旋转](#(1) ro.sf.hwrotation SurfaceFlinger 硬件物理旋转)
        • [(2) `ro.primary_display.user_rotation`](#(2) ro.primary_display.user_rotation)
        • [(3) `ro.config.disable_auto_rotate`](#(3) ro.config.disable_auto_rotate)
      • 3、折叠屏扩展属性(Android12+)
      • 4、各属性优先级层级(从高到低)

一、前言

Android Google GMS 源码的开机向导 (SetupWizard)应用 默认值不会横竖屏旋转的。

正常设备是没啥影响的,开机后设置可以旋转就可以了;

但是目前开发的是小的旋转屏,要求开机向导也要旋转显示。

并且GMS里面的应用目前Google是不开放的。需要如何解决

研究发现系统默认的旋转属性对Google开机向导应用是没有作用的。

只有修改一个gms关于 SetupWizard 应用的属性就可以设置Google的开机向导也默认可以要旋转。

二、相关分析总结

1、相关属性 ro.setupwizard.rotation_locked

复制代码
wrelease/vendor$ grep -nr ro.setupwizard.rotation_locked
Binary file partner_gms/apps/SetupWizard/SetupWizard_arm64.apk matches
Binary file partner_gms/apps/SetupWizard/SetupWizard_arm.apk matches
partner_gms/products/gms_base.mk:68:    ro.setupwizard.rotation_locked=true \

默认为true ,表示锁定屏幕。

如果需要开机向导应用也横竖屏旋转,就需要把这个属性设置成:false。

同时系统的旋转属性也要设置为可旋转。

2、系统设置可旋转属性 Settings system accelerometer_rotation

复制代码
console:/ # settings list system | grep rota                                   
accelerometer_rotation=1 //屏幕旋转:1开启,0关闭
user_rotation=0 //屏幕旋转方向值0-3,0横屏
console:/ # 

3、adb调试旋转功能

Settings属性设置:

复制代码
console:/ # settings put system user_rotation 0 //横屏
console:/ # settings put system user_rotation 3 //竖屏

console:/ # settings put system accelerometer_rotation 1 设置屏幕可旋转
console:/ # settings put system accelerometer_rotation 0 设置屏幕锁定,

测试发现accelerometer_rotation 0 设置屏幕锁定,set user_rotation 屏幕才会旋转,这个是比较奇怪的。

wm命令控制屏幕:

复制代码
# 强制横屏90度
adb shell wm user-rotation lock 0
# 强制反向横屏270度
adb shell wm user-rotation lock 3 //这个值只有0、1、2、3

//获取当前屏幕方向
adb shell wm user-rotation  //比如:lock 0

//下面两个命令好像没啥用!
adb shell wm fixed-to-user-rotation enabled
adb shell wm fixed-to-user-rotation disabled

上面这个值是用来调试的,直接操控wm的显示,即使下拉栏显示锁定选择也是会旋转界面。

Google GMS 的开机向导例外,因为它在应用里面有额外判断控制。

三、其他

1、小结

如果需要Google GMS开机向导默认旋转可以设置属性:

复制代码
ro.setupwizard.rotation_locked=false

并未设置系统默认旋转值:

复制代码
`ro.config.disable_auto_rotate` false
或者
settings system accelerometer_rotation 1 设置屏幕可旋转

2、编译固化只读 ro 属性(整机默认显示方向,底层硬件 / 显示层)

默认值仅供参考,需要自行验证。

(1) ro.sf.hwrotation SurfaceFlinger 硬件物理旋转

控制屏幕硬件输出层旋转,内核 / LCM 物理屏旋转,所有界面全局生效,优先级最高

  • 取值:0 / 90 / 180 / 270

  • 场景:屏幕硬件模组本身是横屏,整机默认输出竖屏画面,出厂固化

  • 写入 mk:

    PRODUCT_PROPERTY_OVERRIDES += ro.sf.hwrotation=90

(2) ro.primary_display.user_rotation

系统开机默认用户锁定方向,初始化user_rotation数据库默认值,设备首次开机生效

复制代码
# 出厂默认锁定横屏
PRODUCT_PROPERTY_OVERRIDES += ro.primary_display.user_rotation=1
(3) ro.config.disable_auto_rotate

全局禁用整机自动旋转功能,状态栏自动旋转开关直接隐藏,设备永久锁定默认方向

  • true:整机无自动旋转功能,所有 App 强制固定默认方向
  • false:正常提供自动旋转开关

3、折叠屏扩展属性(Android12+)

复制代码
Settings.Secure.DEVICE_STATE_ROTATION_LOCK

分折叠 / 展开两种形态保存独立自动旋转开关,多形态设备专用,普通平板手机无需关注

4、各属性优先级层级(从高到低)

仅供参考:

  1. ro.sf.hwrotation 硬件物理旋转(底层输出,全局强制)
  2. App 自身 Manifest screenOrientation(应用内锁定,无视系统设置)
  3. ro.setupwizard.rotation_locked(仅针对开机向导独立拦截)
  4. WMS 窗口策略黑名单(Framework 强制指定包名方向)
  5. Settings.System.ACCELEROMETER_ROTATION + USER_ROTATION 用户全局旋转开关
  6. ro.primary_display.user_rotation 开机默认方向
相关推荐
随遇丿而安10 小时前
第13周:页面状态保存 + 数据恢复优化
android
MartinYeung510 小时前
[论文学习]LLM 中的个性化安全:一个基准测试与基于规划的智能体方法
人工智能·学习·安全
小王师傅6610 小时前
英语学习记
java·学习
万事可爱^10 小时前
Claude 新发布的 Opus 5,系统提示语删了 80%,半价还能逼近 Fable 5
android·服务器·数据库·人工智能·claude
维克兜率天11 小时前
【维克】从随机到有序:随机过程在金融模型中的应用
学习·金融·概率论
alexhilton11 小时前
响应式的Android身份验证架构
android·kotlin·android jetpack
其实防守也摸鱼11 小时前
GitHub开源项目破圈方法论:从技术自嗨到生态共赢
服务器·数据库·学习·开源·github·命令行·linux系统
开朗小哥11 小时前
Agent claudecode学习记录
学习
LONGZHIQIN12 小时前
TIA Portal Openness学习笔记
笔记·学习
网络工程小王12 小时前
【HCIE-AI】12.deepspeed分布式并行训练进阶版
人工智能·pytorch·分布式·学习·昇腾·deepspeed