minui介绍

minui是Android自带的一个画图工具,可以绘制一些简单的图形和图像,显示png图片,显示字符串等。

在Android设备中譬如,关机充电动画,自动测试程序,recovery模式界面等都是用minui绘制界面,进行人机交互,完成一些必要的功能。其优点是在不启动Android surfaceflinger等主要绘图进程的情况下,实现基于基本Linux显示框架下的显示功能,起到开机时间短,节约电量等功能。

下面介绍一下通过仿照关机充电应用程序,写的一个小屏显示进程。Android默认支持一个主屏,Android N以后退出双屏异显的接口api,但是这里并不是通过创建两个displaydevice来实现双屏显示而是通过另外启动一个进程,使用minui将第二个屏的显示数据推送到第二个屏上(小屏,也叫副屏)。移植minui的工作就变得不可绕开了。

minui代码分析

从关机充电应用程序那里复制一套minui的代码:

minui的画图和显示接口在另外一篇文章中会有介绍:https://blog.csdn.net/eliot_shao/article/details/78597522

下面也会有一个实例来应用。

minui移植必要代码分析:

graphics.c

minui驱动接口有两个,一个使用adf框架的显示接口,一个是使用framebuffer的显示框架,因为对framebuffer了解比较多,遂使用framebuffer的方式来实现驱动。

graphics_fbdev.c

这里会打开驱动层对应的framebuffer节点。

所以我们下一步是创建一个framebuffer子系统节点和必要的信息。

在驱动层创建一个framebuffer驱动,可以仿照其他显示驱动实例。

framebuffer驱动实现

framebuffer驱动主要内容:

1、

struct fb_info *info;

info = framebuffer_alloc(sizeof(u32) * 256, &dev->dev);

2、

size = PAGE_ALIGN(size);

mem = vmalloc_32(size);

3、info->screen_base = (char __iomem *)videomemory;

vfb_fix.smem_start = (unsigned long) videomemory;

vfb_fix.smem_len = videomemorysize;

4、 info->fix = vfb_fix;

info->flags = FBINFO_FLAG_DEFAULT;

retval = register_framebuffer(info);

5、

驱动的主要内容包括framebuffer申请,一块连续的虚拟内存的申请,fb_info的填充,注册framebuffer,重写fb_ops的blank函数(SPI驱动这里略过)。

minui应用测试程序及效果

现在minui的驱动部分已经写好了,编译进去执行adb可以看到对应的/dev/graphics/fb0(fb1)的接口,下面写一个简单的minui应用程序测试一下:

显示效果:

为了能正常编译minui应用程序,需要修改android.mk文件。

如下:

总结

至此,minui从应用到显示打通,可以显示自定义界面,和主屏互不干扰,实现双屏异显。但是这种显示只能显示较为简单的界面,或者第二人机交互界面 在一些需要双显示的系统中解决一些重要的问题。

Android双屏异显另辟蹊径---minui的移植相关推荐

  1. android双屏异显获取副屏参数,Android 双屏 异显 插件 双屏(副屏)异显,主副屏通讯...

    更新记录 1.2.0(2021-04-12) 优化副屏视频播放功能. 1.1.0(2020-07-01) 新增,视频列表播放,可以在副屏播放一些广告视频等等. 查看更多 平台兼容性 Android i ...

  2. Android 双屏异显(Presentation) 开发,将第二个页面投屏到副屏上

    1. 背景 最近开发的一个项目,有两个屏幕,需要将第二个页面投屏到副屏上, 这就需要用到Android的双屏异显(Presentation)技术了,研究了一下,这里做下笔记. 我们那个副屏是一块汽车的 ...

  3. 【Android双屏异显】如何真正的实现Android双屏异显

    最近在做一个Android双屏异显的项目,要实现一台Android设备通过HDMI连接两个显示器,然后在一个App中同时显示两个不同的画面. 标题实际上Android并不存在真正的像Windows一样 ...

  4. Android双屏异显的实现

    概述 Android实现双屏异显的实现方式有2种. 方式一:在Android4.2及以上平台上,按照标准Android SDK提供的API,使用Presentation类,将一个APP的相关内容显示到 ...

  5. Android 双屏异显(兼容android8)

    1.双屏判断(是否支持双屏异显) 2.权限申请(android 6 以后需要申请权限) 3.客显实例化 (客显布局) public void initDiffDisplay() {try {Displ ...

  6. Android双屏异显

    和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一.设置Simulate secondary displays 二.实现副屏异显 三.实现效果 Andr ...

  7. Android 双屏异显

    背景: 日常生活中,有时候会遇到 Android 设备连接两个屏幕进行显示的问题,比如酒店登记信息时,一个屏幕用于员工操作,一个屏幕显示相关信息供顾客查看.这里就涉及到 Android 的双屏异显的问 ...

  8. android 分屏投影,Android 双屏异显实现的三种方式

    在各种产品脑洞大开的时代,需求也是日益新异,笔者最近开发了一套双屏异显app.现在做一些总结 1.双屏异显第一种实现方式(官方提供的Presentation) Android 提供了一个叫 Prese ...

  9. 【转载】Android 双屏异显方案

    一.技术的背景 随着电梯广告传媒行业的飞速发展,双屏广告机应运而生,客户可以根据自己的需求,制作两个屏幕的内容,分别播放适合屏幕显示方式播放的内容,如上面播放视频,下面播放图片,使得宣传的效果多样化. ...

最新文章

  1. 没学过python、但是还是有公司要-学习python 基础都会了 为什么还是做不出项目呢?...
  2. python for循环结构_循环结构-for循环
  3. Android的BUG(四) - Android app的卡死问题
  4. springboot项目中mybatis实现数据的基本查询
  5. django 1.8 官方文档翻译:13-3 日志
  6. 深入理解Android View(转)
  7. 1093 字符串A+B (20分)
  8. matlab 不确定度计算器,A类贝塞尔不确定度计算器
  9. 苹果iPod设计及商业操作内幕
  10. android 360 悬浮窗,悬浮窗的实现(如360悬浮窗效果)
  11. symbian的字体包
  12. springboot上传文件(前端传来的是base64字符串形式)
  13. 中文语音合成软件Ekho(余音)的使用教程
  14. 计算机bios所以的英文翻译,bios界面翻译对照 主板BIOS界面全英文翻译介绍
  15. springboot微信点餐系统的设计与实现毕业设计源码221541
  16. kafka 使用及学习过程中的爬坑记录
  17. Excel如何按行间隔配置背景颜色
  18. WLW离线编辑器的安装与使用
  19. OAI网络切片三切片配置
  20. 使用京东云免费云主机搭建CentOS

热门文章

  1. 【图像修复】基于滤波实现损坏图像修复含Matlab源码
  2. C++ SuperLU 混合编程
  3. 优雅编程之阿里巴巴开发规范分享及扩展学习(三十八)
  4. TextView中加横线
  5. java验证手机号码
  6. Maple: 矩阵转置
  7. UE4使用OpenCV插件调用电脑摄像头
  8. k8s教程(基础篇)-基本概念和术语
  9. 华为云RDS全量备份恢复到自建数据库(数据库qp文件恢复)
  10. 程序员的希波克拉底誓言