type
status
date
slug
summary
tags
category
icon
password

ANativeWindow是什么

ANativeWindow是C/C++中定义的一个结构体,等同于Java中的Surface.
Android NDK中可以访问到ANativeWindow.
ANativeWindow中存放像素信息的结构是:ANativeWindow_Buffer:

主要API

  • 获取与surface对应的ANativeWindow
    • 保持/释放ANativeWindow对象的引用
      • 向buffer中写入数据并提交
        • 获取Window Surface的信息:宽/高/像素格式
          • 像素格式定义在AHARDWAREBUFFER_FORMAT_*
        • 改变Window Buffer的格式和大小

          一般的流程

          1. 通过ANativeWindow_fromSurface获取与Surface对应的ANativeWindow对象
          1. ANativeWindow_setBuffersGeometry设置buffer的尺寸和格式
          1. ANativeWindow_acquire获取引用对象
          1. 利用ANativeWindow_lock/ANativeWindow_unlockAndPost与之间的绘制代码绘制图像
          1. ANativeWindow_release释放引用.

          一个简单的例子

          写个简单的例子:利用ANativeWindow绘制一个灰色的背景.
          • C++代码
            • Activity代码

              总结

              1. Native层中的ANativeWindow对应Java层中的Surface,因此可以利用SurfaceView + ANativeWindow,用C++代码绘制屏幕;
              1. 在图像/视频处理中会利用到ANativeWindow,也可以与EGL,FFMPEG等结合使用
              1. Flutter Engine中正是通过 ANativeWindow才将Dart中的UI与Android中UI联系到一起的.
              Android中的Deep Link与 APP LinkAndroid中的存储路径
              Loading...