精华内容
下载资源
问答
  • Android P 图形显示系统

    千次阅读 2019-01-10 09:57:57
  • 文章目录图形系统显示系统Buffer管理显示系统的架构从应用的角度理解Android Android图形显示子系统概述 Android图形显示系统,是Android比较重要的一个子系统,和很多其他子系统的关联紧密。想象一下,没有图形显示...


    Android图形显示子系统概述

    Android图形显示系统,是Android比较重要的一个子系统,和很多其他子系统的关联紧密。想象一下,没有图形显示系统的手机是什么样子,可能连对讲机都不如吧。图形显示系统比较复杂,从Android诞生到现在,几经修改,已经变的越来越庞大了。总的说来,图形显示系统可以分为两大部分来理解:

    • 图形系统
    • 显示系统

    图形系统

    图形系统也就是图形支持系统,提供绘图和图形处理支持。包括最初的2D绘图API Skia,后来的3D绘图API OpenGLES,RenderScript,OpenCV,到最近的Vulkan。也包括图片解码库,jpg,png,gif等。以及它们所需要的各种Driver支持。

    但是Android为了方便大家,我们在做应用开发的时候,并不用大家直接用各种API去绘制界面,也不用直接用解码库去解码。Android已经给大家提供了一个界面绘制机制,有很多widget和view,Android的应用开发者,用现有的widget就能够绘制出比较酷炫的界面。

    Android提供的大多view和widget都是2D的绘图,2D绘图比较慢,也发挥不出GPU的作用,因此Android又设计了一套加速系统,硬件加速。其目的就是将2D的绘图操作转换为一个个的3D(Opengl)绘图,再采用部分更新的方式,只去重绘界面中有更新的部分view,这样就大大提升界面绘制的速度。

    显示系统

    图形绘制好了后,需要送到LCD显示屏上,我们才能看到。绘制界面时,我们只关心单个界面,显示的时候,可能就有多个界面了。做过Android应该开发的都知道,我们需要继承一个Activity,用Activity呈现我们的界面。Activity的生命周期管理,也就伴随了窗口的管理。这中间就涉及了两个Android中两个主要的服务,AMS(ActivityManagerService)和WMS(WindowManagerService)。View,AMS,WMS可以说是整个上层显示系统的三驾马车。

    在Android中,一个窗口用一个Surface描述。多个窗口(窗口不一定都是Activity),需要同时显示,我们就需要将多个窗口进行合并。这就需要显示系统中重量级的服务SurfaceFlinger,Surfaceflinger控制窗口的合成,将多个窗口合并成一个,再送到LCD。

    Surfaceflinger是Native的服务,Surfaceflinger中怎么去描述一个窗口呢?Surfaceflinger采用图层的概念,即Layer。SurfaceFlinger合成,就是基于Display HAL的实现,将多个Layer合并。Display HAL,各个厂商的实现就千差万别了。

    Buffer管理

    前面讨论了怎么绘制,怎么显示。但是,绘制,绘在什么地方,拿什么去显示。答案只能是内存Buffer。Android的系统中,采用GraphicBuffer对buffer进行封装,而buffer采用ion实现,能在进程间共享。

    Surface属性应用进程,Layer属于SurfaceFlinger进程。如果只用一个Buffer,那么两个进程都有可能同时在用Buffer,这就可能会造成我们看到的屏幕显示不对,存在撕裂。另外,只用一个Buffer,效率也不高啊,绘制本来就是GPU在绘制,显示这边是CPU或者是其他的硬件模块,一个工作,另外一个不工作,且不浪费。所以Android采用Buffer队列的方式,即BufferQueue。绘制的是一个Buffer,显示的是一个buffer,各自处理完后,交换一下Buffer。这样效率就高很多了。这中间再采用一个生产者-消费者模型,Buffer是载体,Surface应用这边是Producer,SurfaceFlinger这边是是Consumer。这样就更好理解了。

    显示系统的架构

    有了前面的描述,是不是对Android的图形显示系统有了大概的认识了?没有关系,我们直接来看架构图。架构图来自Androd的官网, https://source.android.com/devices/graphics/ ,
    Android显示系统的架构

    大家可以对照图再回味一下,前面的描述。有些地方,这个图并不能很好的体现,不过没有关系,接下来我们会详细的介绍各个模块和流程。

    换一种方式来描述Android的显示系统,架构图如下:
    Android显示系统的架构

    再和前面Android的图进行对照,是不是更清楚一些了。

    这个图里,前面的描述里有点没有说到,SurfaceFlinger到OpenGLES,大家是不是觉得有点奇怪。其实是这样的,SurfaceFlinger合成,有两种方式,ClientDevice。Client就是Client合成完Layer后再将合成后的数据给到HWComposer,HWComposer此时做的工作很少,直接给到Display。Device则是将未合成的Layer,给到硬件合成的设备,合成完后再给到Display。

    可能大家还是很迷茫,没有关系~,我们接下来将参照Android的源码,逐一为大家讲解。

    从应用的角度理解Android

    做Android开发,我们都讲了太多的架构,也听了太多的架构。不知道大家有没有从应用的角度去看过Android的系统?我们先来看Android的整体系统架构。
    Android的整体系统架构

    Android基于Linux内核,我们是不是可以将上层Android理解为Linux内核的一个应用。这个应用非常庞大,集集了电话,BT,WiFi,音视频播放,Camera等功能。

    基于Linux内核的系统非常的多,比如常用的,Debian系列的Ubuntu,Debian;Redhat系统的RedHat,Fedora等。你可以理解Android自成一个系列。所以,我们也可以基于Linux内核去开发自己的系统。

    回到Android,Android在Linux中加了很多驱动,再采用硬件抽象的方式,向上提供接口,这就是我们所说的HAL层。所以我们要增加一个模块,需要增加Linux驱动,然后实现HAL,以供上层使用。当然,我们也可以基于Android的HAL去开发上层的系统,又可以将基于HAL的系统看成一个应用。据了解,FirefoxOS,360OS,YunOS等,基本都是基于Android的HAL的方式去开发的(Oops~如有亵渎,神灵保佑…)。

    基于HAL的Android Framework,分为Native Framework和JavaFramework。HAL层是C++写的,按里说,Native的 Framework应该就够了,什么还要去实现Java的Framework呢?Android的应用大多数都是用Java开发,中间还有一个Java虚拟机,和JNI。

    其实,这是有历史原因的。现在Android已经形成了一个很大的生态链,但是想想当初,Android系统刚才发布,得有开发者呀,没有开发者的支持,如何能形成生态链。所以,Android就采用了这种Java开发方式,大大笼络了Java开发人员。

    再回到我们的显示子系统,Surfaceflinger基于HAL HWComposer,管理和控制着整个Android的显示。而上层,则是WMS,AMS,View等系统服务管理和控制着整个Android的显示。

    回到上一章给出的Display架构图,我们是不是可以直接基于Native的Framework进行应用的开发呢,答案是肯定的。Android也为此提供了NDK,以便于Android Native应用的开发。

    下面,让我们从一个Native应用开始,揭开Android显示系统的面纱~

    展开全文
  • 小米8更新首个Android P内测版在今年5月份的谷歌I/O开发者大会上,谷歌发布了Android P开发者预览版,当时小米MIX2S即适配了这一系统,也是最早一批适配安卓P的机型之一。在8月份安卓P正式版发布会后,小米MIX2S也在...

    原标题:吃上安卓P!小米8更新首个Android P内测版

    在今年5月份的谷歌I/O开发者大会上,谷歌发布了Android P开发者预览版,当时小米MIX2S即适配了这一系统,也是最早一批适配安卓P的机型之一。在8月份安卓P正式版发布会后,小米MIX2S也在第一时间进行了适配,并且在第一时间开启了内测,MIUI10也成为了国内第一个适配基于安卓P正式版深度定制的系统。今天下午,小米8终于也迎来了基于Android P的MIUI10内测版更新,更新包2.1G。

    35c6f950fbedd9df5bcfb13290e58b3d.png

    需要注意的是,这次安卓P更新仅仅面向内测用户开放,且需要用户手动到系统更新中点击“检测更新”方能收到推送。在升级前,还需要确保当前MIUI版本为8.8.31开发版。

    此外,这一次在将系统底层更新到Android P的同时,还将GPU驱动版本升级到了“OpenGL ES 3.2 V#324.0”,对这一方面了解的应该都知道,升级到新版的GPU驱动后,性能表现会有所提升,跑分相应地也会提高。晚些发布的骁龙845机型跑分更高的主要原因也是因为出厂自带的GPU驱动版本更高,而并非所谓的优化更好,比如魅族16。在升级到安卓P后,小米8的跑分达到了29万+。

    ed438bb31a6015536890c90282dac2ba.png

    由于这是首个基于Android P定制的系统,可能存在很多bug,更新前建议备份,不太会搞机的也建议不要升级,当然前提是要有内测权限。返回搜狐,查看更多

    责任编辑:

    展开全文
  • Android P图形架构之虚拟屏实现

    千次阅读 2019-09-14 11:55:25
    Android P默认支持两个物理屏和一个虚拟屏显示。 物理屏两块分为:主屏和副屏。 虚拟屏可以有多块。 mDisplayManager = getActivity().getSystemService(DisplayManager.class); mDisplayManager....

    Android P默认支持两个物理屏和一个虚拟屏显示。

    物理屏两块分为:主屏和副屏。
    虚拟屏可以有多块。

    mDisplayManager = getActivity().getSystemService(DisplayManager.class);
    mDisplayManager.registerDisplayListener(mDisplayListener, new Handler());
    
    //虚拟屏创建成功后会调用mDisplayListener,返回displayId
    private final DisplayListener mDisplayListener = new DisplayListener() {
        @Override
        public void onDisplayAdded(int displayId) {
            int navDisplayId = getVirtualDisplayId();
            Log.i(TAG, "onDisplayAdded, displayId: " + displayId + ", navigation display id: " + navDisplayId);
    
            if (navDisplayId == displayId) {
                    mRegisteredNavDisplayId = displayId;
            }
        }
    
        @Override
        public void onDisplayRemoved(int displayId) {
            if (mRegisteredNavDisplayId == displayId) {
                    mRegisteredNavDisplayId = Display.INVALID_DISPLAY;
            }
        }
    
        @Override
        public void onDisplayChanged(int displayId) {}
    };
    
    private VirtualDisplay createVirtualDisplay(Surface surface, int width, int height) {
        Log.i(TAG, "createVirtualDisplay, surface: " + surface + ", width: " + width
                + "x" + height);
        return mDisplayManager.createVirtualDisplay("Cluster-App-VD", width, height, 160, surface,
                DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY);
    }
    

    调用createVirtualDisplay(),创建虚拟屏。

    调式:

    adb shell am start -n com.google.android.car.kitchensink/com.google.android.car.kitchensink.cluster.FakeClusterNavigationActivity --display 2
    adb shell am start -n com.android.car.carlauncher/com.android.car.carlauncher.CarLauncher --display 0
    adb shell am start -n com.android.settings/com.android.settings.Settings --display 3
    adb shell am start -n com.android.car.dialer/com.android.car.dialer.TelecomActivity --display 2
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • Android P图形架构之实现双屏异显

    千次阅读 2019-07-09 15:27:04
    Android支持双屏异显。 第一种方式,通过adb命令将app启动在第二块屏幕上: adb shell am start -n com.android.demo/com.android.demo.MainActivity --display 1 在am start命令后面增加–...第二种方式,通过P...
  • AndroidP2PServer 安卓点到点通信,维持连接服务器 A server in Android point-to-point communication to keep connection 5月25日更新 May 25th Update 添加好友、通讯录功能 Contacts 登录、注册 login and ...
  • 原标题:小米MIX2S升级Android P教程 小米mix2s安卓9.0下载地址谷歌今天正式开启了Android P的测试,如果没多大问题的话就是之后会发布的Android 9.0了,比较惊喜的是目前除了谷歌自家的pixel系列机子可以更新外还有...
  • 原标题:出厂搭载Android P,一加6T果然安卓真旗舰Android P是谷歌旗下的安卓系统最新版本,多数安卓用户特别是极客们可能都想升级最新的Android P系统,毕竟会更流畅更好用,系统安全方面也更有保障。但似乎安卓...
  • 今天才宣告全球首发基于安卓P深度定制MIUI 昨天,安卓P正式版正式发布。同一天,小米MIX2S也推送了全球首发基于Android P深度定制的MIUI。可以看到版本号为MIUI10 8.8.7,不过是内测版。但是,小米MIX官方直到今天才...
  • Android P

    千次阅读 2018-05-29 10:06:18
    android P 源码下载https://www.cnblogs.com/shenchanghui/p/8503623.htmlandroid P 开发简介https://developer.android.google.cn/preview/download
  • 安卓9.0正式版内容已经可以升级了,也被称为Android P,相信大家都是比较关注的。安卓9.0正式版更新哪些功能呢?一起从文中了解吧。安卓9.0 Android Pie正式版更新哪些功能1、手势:Android Pie中加入全新的全面屏...
  • 安卓P,高版本的相机,拍照以及相册的使用返回图片回Imgview使用等,返回URI,或者bitmap
  • win10预览版+ubuntu20.4LTS编译安卓aosp android-9.0.0_r9(Android P),本教程比网上绝大多数教程下载快,且占用硬盘资源至少少50G,大大节省了硬盘资源
  • 转载:Android Verified Boot 2.0 最新安卓P AVB详解
  • 安卓-p android原始码
  • ro root=/dev/dm-0 rootwait skip_initramfs init=/init dm="1 vroot none ro 1,0 5159992 verity 1 PARTUUID=00000016-0000-0000-0000-000000000000 PARTUUID=00000016-0000-0000-0000-000000000000 4096 4096 ...
  • Android P应用适配相关指南

    千次阅读 2018-10-12 15:24:43
    Android P应用适配相关指南 本文对开发Android P应用适配,博主开发的教育项目对刘海...AndroidP的设备支持模拟刘海效果,持有P的设备的可以打开“开发者选项”,找到“模拟巨有凹口的显示屏”进行模拟调试。 二 ...
  • Android P首发版

    2018-05-10 11:27:36
    几个月前,Android P开发者预览版就已经问世了。但由于它只是为了方便开发者进行适配,很多新版本的重要更新,特别是视觉和交互方面的改进,都没有包含在内。 昨天,在一年一度的Google开发者盛宴I/O 2018大会上,...
  • $ avbtool calculate_vbmeta_digest \ --hash_algorithm sha256 \ --image /path/to/vbmeta.img a20fdd01a6638c55065fe08497186acde350d6797d59a55d70ffbcf41e95c2f5

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 557,322
精华内容 222,928
关键字:

安卓p图