sunwengang blog

because it's there

Android Property

property的相关生成文件和设置 android通过SystemProperties的set和get方法来控制很多东西,一般上层添加一个控制开关可以使用这个方法,在系统里面存在很多个prop文件。它们分别是system/build.prop,system/etc/prop.default,vendor/build.prop,vendor/default.prop。下面分别来说下这几个文件的构成。 阅读全文

nReal搭建Samepl APK

概述nrsdk是nreal开发混合现实体验的平台。使用简单的开发过程和高级api,nrsdk提供了一组强大的mr特性,并使nreal眼镜能够了解真实世界。 nrsdk为开发者提供了五个核心特性: 空间计算使眼镜能够跟踪它们相对于世界的实时位置,并了解周围的环境,例如检测和跟踪平面和图像。 优化的渲染自动应用于应用程序并在后端运行,以最小化延迟并减少抖动,增强总体用户体验。 多模态交互为不同的用例提供了交互的直观选择。 提供了开发工具,以便您可以更好地开发和调试应用程序。 第三方集成是通过为第三方sdk提供数据来实现的,这允许您充分利用nreal light的硬件功能并构建功能强大的mr/ar应用程序。 阅读全文

Android Handler消息循环处理机制(例ActivityThread)

整体流程 关键词:Handler、Looper、MessageQueue、handleMessage 消息被存放于消息队列,应用程序的主线程会围绕这个消息队列进入一个无限循环,知道应用程序退出。(消息循环过程是由Looper实现的) 如果队列中有消息,应用程序的主线程会把它取出来,分发给相应的Handler进行处理; 如果队列中没有消息,应用程序的主县城就会进入空闲等待状态,等待下一个消息的到来; 阅读全文

Android WMS和View基本理解

概述 Window 可以看做是Surface的一个包装,本质上,Window的本体就是一片Surface。将操作对象Surface,对象关联属性集以及操作方法等组合在一起便是 Window。Surface 其实是一块画布,应用可以随心所欲地通过 Canvas 或者 OpenGL 在其上作画,然后通过 SurfaceFlinger 将多块 Surface 的内容按照特定的顺序(ZOrder)进行混合并输出到 FrameBuffer,从而将 Android 漂亮的脸蛋显示给用户。既然每个窗口都有一块 Surface 供自己涂鸦,所以必然需要一个角色对所有窗口的 Surface 进行协调管理。于是,WMS 应运而生。 代码: http://aosp.opersys.com/xref/android-10.0.0_r2/xref/frameworks/base/core/java/android/view/ 阅读全文

C++ 运算符重载、友元、返回对象

运算符重载运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。 例如* 用于地址,将获得存储在这个地址中的值;而用于两个数字之间,得到的是乘积。 阅读全文

Android zygote和SystemServer进程

zygote和system_server在Android中的Java层很重要。 zygote分析 zygote由init进程根据init.rc的配置项创建的。最初叫app_process,但是在运行过程中,通过Linux的pctrl系统调用将其换成了zygote。通过adb shell ps -ef|grep zygote查看到该进程。 阅读全文

Android init进程

概述 init是Linux系统中用户空间的第一个进程。通过adb shell ps -rf查看我的一加手机进程信息。 12UID PID PPID C STIME TTY TIME CMDroot 1 0 0 12:43:34 ? 00:00:10 init init进程负责创建系统中的几个关键进程,例如zygote init提供了一个property service(属性服务)来管理Android系统的众多属性 阅读全文

C++对象和类

类型指定基本类型完成了三项工作: 决定数据对象需要的内存数量 决定如何解释内存中的位(long和float所占位数相同,但是将他们转换成数值的方法不同) 决定可使用数据对象执行的操作和方法 阅读全文

C++头文件、作用域、内存模型和名称空间

单独编译C++提供#include语法,因而可以将程序划分,大致可以分成三部分: 头文件a.h:包含结构声明和使用这些结构的函数原型 源代码文件a.cpp:包含与结构相关的函数的代码 源代码文件b.cpp:包含调用与结构相关的函数的代码 阅读全文

Android JNI理解

概述 JNI,即Java Native Interface,Java本地调用。通过JNI可以实现: Java程序函数可以调用Natvie语言(C/C++)写的函数 Natvie程序函数可以调用Java层的函数 阅读全文

Android中的makefile(Android.mk)

makefile是和make命令一起使用,在Android中,可以使用mm、mmm、mma进行编译。Makefile可以组织项目中各种库和代码之间的依赖,构建项目,和maven、gradle一样属于构建工具。常用于大型项目。 阅读全文

C++内联函数、引用变量、函数重载、函数模板

内联函数 常规函数调用使程序跳到另一个地址(函数的地址),并在函数结束后返回。来回跳跃并记录跳跃位置意味着一定的开销。内联函数使得编译器将相应的函数代码替换函数调用。程序无需跳到另一个位置处执行代码,再调回来。因而,内联函数运行速度比常规函数快,但是代价是需要占用更多的内存。如果程序在10个不同的地方调用调用同一个内联函数,则该程序将包含该函数代码的10个副本。 阅读全文

C++函数模块(函数指针、递归)

本章节主要是围绕函数为圆心,涉及到字符串、指针、C++11特性auto、typedef。由于接触android源码、opengl,需将C++学习一遍,之前只是用过java、c、c#这些。涉及到android源码,例如frameworks/native的surfaceflinger,gui,ui, 以及vender,hardware都是需要仔细的阅读C++代码才能够理解。再如graphics的测量、绘制渲染、硬件加速、合成显示,私以为学习一些图形学是有必要的。人生在勤,不索何获。 阅读全文

ubuntu搭建opengl环境

安装1234sudo apt-get install build-essentialsudo apt-get install libgl1-mesa-devsudo apt-get install libglu1-mesa-devsudo apt-get install freeglut3-dev 阅读全文

C++内存分配方式和模板类vector, array

使用new创建动态结构 在运行时创建数组优于编译时创建数组,对于结构也是如此。需要在程序运行时为结构分配所需的空间,可以使用new完成。动态意味着内存是在运行时,而不是编译时分配的。例如inflatable *ps = new inflatable;其中inflatable是一个结构类型。这句代码将把存储结构inflatable的一块可用内存的地址赋值给ps。箭头成员运算符->,可用于指向结构的指针。例如ps指向一个inflatable结构的成员price,即ps->price 阅读全文