原帖出处:

背景:

调试使用一款800x1280分辨率的屏,客户希望横屏使用(1280x800),且没有旋转过程,看起来就是横屏显示一样。修改主要涉及几个方面,第一是LK阶段的图片,第二是开机动画的显示(/system/bin/bootanimation),第三是最终进入系统后的显示,且所有的显示过程无缝连接。

涉及的库文件:

/system/lib64/libsurfaceflinger.so

/system/framework/services.jar

/system/framework/framework-res.apk

/system/bin/bootanimation

Android显示子系统大致流程:

主要分为两个部分,LK部分和kernel独立。主要讲kernel部分。

显示驱动加载—>创建/dev/graphic/fb0à启动servicesurfaceflinger /system/bin/surfaceflinger

à启动servicebootanim /system/bin/bootanimation—>启动zygote和system-server进入Java

service zygote /system/bin/app_process64-Xzygote /system/bin --zygote --start-system-server进入Android系统—>启动各种servicemanager –>启动activity managerà启动luncher—>等待用户启动app。

涉及的文件路径:

开机动画的路径:vendor\qcom\proprietary\qrdplus\Extension\apps\BootAnimation\

更换开机动画:

C:\Users\binq>adb push X:\shaomingliang\android7.1\LA.UM.5.6\vendor\qcom\proprie

tary\qrdplus\Extension\apps\BootAnimation\bootanimation.zip /system/media/

surfaceflinger文件:

frameworks\native\services\surfaceflinger\DisplayDevice.cpp

frameworks\native\services\surfaceflinger\SurfaceFlinger.cpp

加载开机动画的代码:

frameworks\base\cmds\bootanimation\bootanimation_main.cpp

frameworks\base\cmds\bootanimation\BootAnimation.cpp

JAVA层代码:

frameworks/base/core/res/res/values/config.xml

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

kernel部分代码:

kernel/msm-3.18/arch/arm/boot/dts/qcom/dsi-panel-nt35521s-kd101n66-40ni-k2-800p-video.dtsi(屏的配置文件)

device/qcom/msm8937_64/system.prop 添加属性

1、 修改LK阶段图片

高通使用splash.img存储LK的开机动画,在device/qcom/common/display/logo/logo.png

添加对应分辨率的图片,重新打包编译splash.img下载进去即可。

2、 修改kernel中屏的相关配置,

使屏旋转180度,这样在后面Android部分只需要旋转90度即可,不需要旋转270.旋转270有可能会遇到Android设置界面设置字体闪屏的问题。

在配置文件中添加:

qcom,mdss-dsi-panel-orientation = "180";

3、 开机动画横屏,

修改/system/bin/bootanimation(C++)

在frameworks\base\cmds\bootanimation\BootAnimation.cpp中添加:

@@ -286,7+286,22 @@ status_t BootAnimation::readyToRun() {

status_t status =SurfaceComposerClient::getDisplayInfo(dtoken, &dinfo);

if (status)

return -1;

+ //ALOGE("eliot BootAnimation::readyToRun111111\n");

+

+ char value[PROPERTY_VALUE_MAX];

+ property_get("persist.panel.orientation", value,"0");

+ int orient= atoi(value) / 90;

+

+ if(orient== 1 || orient == 3) {

+ inttemp = dinfo.h;

+ dinfo.h= dinfo.w;

+ dinfo.w= temp;

+ }

+ RectdestRect(dinfo.w, dinfo.h);

+ mSession->setDisplayProjection(dtoken, orient, destRect, destRect);

+

+ //ALOGE("eliot BootAnimation::readyToRun22222222\n");

// create the native surface

sp<SurfaceControl> control =session()->createSurface(String8("BootAnimation"),

dinfo.w, dinfo.h,PIXEL_FORMAT_RGB_565);

在device/qcom/msm8937_64/system.prop添加:

persist.panel.orientation=90 #bootanimation daemon会读取这个字符串进行旋转操作。

qemu.hw.mainkeys=0 #这个是虚拟按键

4、 JAVA层修改默认方向

frameworks/base/core/res/res/values/config.xml

修改:

---a/frameworks/base/core/res/res/values/config.xml

+++b/frameworks/base/core/res/res/values/config.xml

@@ -619,7 +619,7 @@

settings are omitted from the system UI. In certain situations we may

still use the accelerometer to determine the orientation, such as when

docked if the dock is configured to enable the accelerometer. -->

- <bool name="config_supportAutoRotation">true</bool>

+ <boolname="config_supportAutoRotation">false</bool>

<!-- If true, the screen can be rotated via the accelerometer in all4

rotations as the default behavior. -->

@@ -674,7 +674,7 @@

<!-- The number of degrees to rotate the display when the keyboard isopen.

A value of -1 means no change in orientation by default. -->

- <integername="config_lidOpenRotation">-1</integer>

+ <integername="config_lidOpenRotation">90</integer>

<!-- Indicate whether the lid state impacts the accessibility of

the physical keyboard. 0 means itdoesn't, 1 means it is accessible

修改

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

--- a/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

+++b/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

@@ -6924,7 +6924,7 @@ public classPhoneWindowManager implements WindowManagerPolicy{

if (preferredRotation >=0) {

returnpreferredRotation;

}

- return Surface.ROTATION_0;

+ return Surface.ROTATION_90;

}

}

}

修改

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

---a/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

+++b/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

@@ -553,7 +553,7 @@ public classWindowManagerService extends IWindowManager.Stub

/** All DisplayContents in the world, kept here */

SparseArray<DisplayContent> mDisplayContents = newSparseArray<>(2);

- int mRotation = 0;

+ int mRotation = 1;

int mLastOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;

boolean mAltOrientation = false;

@@ -3857,7 +3857,7 @@ public classWindowManagerService extends IWindowManager.Stub

long ident = Binder.clearCallingIdentity();

try {

int req = getOrientationLocked();

+ req =ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; //add

if (req != mLastOrientation) {

mLastOrientation = req;

//send a message to Policyindicating orientation change to take

参考网站: http://blog.csdn.net/q1183345443/article/details/53068526

Android 7.1 竖屏转横屏全过程实现-基于高通平台相关推荐

  1. Android O 的camera framework-hal层框架笔记(基于高通845平台)

    Android O 的camera framework/hal层框架笔记(基于高通845平台) tags: android camera 文章目录 Android O 的camera framewor ...

  2. Android上HDMI介绍(基于高通平台)

    本文重点针对HDMI在android上的应用,而比较相关的就是overlay机制.overlay在这里只是简单的介绍,后续会有文章再专门详述. 我没记错的话,高通从7X30开始,平台就可以支持HDMI ...

  3. 开机动画完毕后出现竖屏转横屏的现象

    开机动画完毕后出现竖屏转横屏的现象 开机后第一帧是竖屏,log: Line 4531: 05-25 03:49:50.286 814 814 V ViewRootImpl[FallbackHome]: ...

  4. 剪辑视频,教你将视频竖屏改横屏播放

    剪辑的视频会发布在不同平台,而每个平台的要求都不一样,有些平台要求竖屏,有些平台可能使用横屏更合适,那么我们该如何将竖屏改为横屏呢?不会操作的朋友接着往下看吧,小编演示具体的操作步骤. 开始操作之前先 ...

  5. 如何将竖屏改横屏,并裁切多段视频画面

    在剪辑过程中,该如何将多段竖屏视频转为横屏,并裁切画面呢?今天小编给分享一个新的技巧,下面一起来试试. 材料准备: 一台Win系统电脑 视频剪辑高手 多段视频素材 步骤演示: 运行视频剪辑高手,在剪辑 ...

  6. 高通平台android开发总结

    http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...

  7. 高通平台android 环境配置编译及开发经验总结

    完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  8. 高通平台android开发总结 .

    http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...

  9. 高通平台android 环境配置编译及开发经验总结【转】

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  10. android 高通平台有前途吗,华为鸿蒙计划要适配高通平台了,可以告别安卓搭载鸿蒙OS了?...

    鸿蒙走出这一步是可以想象到的,看来华为打造这个系统希望的结果是万物皆可盘呀,所以一开始就提出了开源,也就意味着这次是高通,下次就可以是联发科,甚至更多的手机品牌也完全就可以搭载!早期我们一直在说国产手 ...

最新文章

  1. Flask项目支持https
  2. JDK源码解析 Comparator 中的策略模式
  3. 看雪 2016CrackMe 攻防大赛 - 1-Crack_Me-凉飕飕
  4. 深度学习为图片人物换装【python代码教程】
  5. 大数据:技术与应用实践指南_大数据技术与应用社团 社会实践总结篇
  6. html中select只读显示
  7. Android 功耗(22)---MTK 功耗问题分析
  8. u-boot移植随笔:移植过程问题及解决(本文章不时更新)
  9. java插入排序实现,经典(Java版)排序算法的分析及实现之一直接插入排序
  10. java怎么从数据库中查询_java – 从数据库中检索的实体与查询中的情况相同
  11. MySQL text类型的最大长度
  12. 操作系统 第二部分 进程管理(五)
  13. jquery 过滤 first last eq filter not
  14. Failed to start The nginx HTTP and reverse proxy server.
  15. C盘软件(应用)搬家瘦身
  16. Mac OSX 鼠标键盘事件的监听和模拟
  17. 激战2怎么选最新的服务器,选哪个服好?《激战2》高玩分析各服务器进驻人数...
  18. 转行经历|裸辞九个月,终于拿到第一份工作的offer...
  19. 怎么判断机械表上满弦_机械手表上弦是什么意思,怎么看手表有没有上满弦
  20. 【老九学堂】【C语言进阶】递归调用

热门文章

  1. 【Struts1】--beanutils
  2. android APN的打开与关闭
  3. java static 可见性_java可重入锁可见性分析
  4. 强化学习——从最简单的开始入手
  5. 腾讯正式开源高性能Hybrid框架VasSonic!
  6. redis持久化(persistence)
  7. Spring使用过程中遇到的一些问题
  8. spring --(16)AOP前置通知与后置通知
  9. IOS UIView直接响应点击事件的解决方法
  10. WinForm中的特殊窗体效果:渐变窗口和信息提示窗口