前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Android原生Property移植记录

Android原生Property移植记录

作者头像
开源519
发布于 2021-05-28 09:40:46
发布于 2021-05-28 09:40:46
1.7K00
代码可运行
举报
文章被收录于专栏:开源519开源519
运行总次数:0
代码可运行

简介

属性系统是Android的一个重要特性,属性由属性名称和键值组成的一段字符串,又称键值对,用于记录系统设置或进程信息交换。属性在整个系统全局可见,每个进程可通过property_get/property_set获取和设置属性。本篇主要介绍移植版本的Property大致流程。 Property机制主要由服务端进程与客户端进程组成。property服务端进程用于初始化存储属性的共享空间、监听客户端请求、增加属性键值对和更新属性对应键值等功能。客户端为使用Property的应用进程,主要通过调用poperty_set和property_get集来实现设置和获取属性键值。

移植版本Property与Android原生Property使用方法有一些区别: (1) Android是在init进程初始化Property服务端。移植版本则将Property服务端设计为独立进程,在开机启动时启用Property服务。如此设计的优点在于,将Property服务设计为独立的模块,便于各个应用移植和使用。 (2) Android在使用Property机制时会核对使用进程Selinux权限,在进程使用property_set/property_get时,会先审核使用进程是否拥有访问该属性权限。移植版本Property则省去Selinux权限。 (3) 移植版本Property是在Android KitKat4.4基础上移植而来,其内部实现细节可能与4.4版本之后有所出入。

API介绍

服务端:

本部分代码接口无需特殊关注,只需将编译的bin文件(Property_service)放入起始服务后台运行即可。Property服务端代码执行顺序需优先于客户端。

客户端:

客户端代码主要功能为设置和获取Property键值,以下为对外开放的接口。

设置Property

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * @description: 设置或增加属性键值
 * @param - key: 需设置的属性名。
* @param - value: 属性名对应的键值。
 * @return: 0 on success,< 0 on failure
 */
int property_set(const char *key, const char *value)

获取Property

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * @description: 获取属性键值字符串
 * @param - key: 需获取的属性名。
 * @param - value: 属性名对应的键值。
 * @param - default_value: 若获取失败,则使用此默认键值
 * @return: 成功返回属性值长度,获取错误返回0
 */
int property_get(const char *key, char *value, const char *default_value)

/*
 * @description:用于获取bool类型的属性,失败返回默认值default_value
 */
int8_t property_get_bool(const char *key, int8_t default_value)

/*
 * @description:用于获取64位类型的属性,失败返回默认值default_value
 */
int64_t property_get_int64(const char *key, int64_t default_value)

/*
 * @description:用于获取32位类型的属性,失败返回默认值default_value
 */
int32_t property_get_int32(const char *key, int32_t default_value)

注:系统中存在的key字符长度最大为32,value字符长度最大为92。如有越过,会导致异常情况。

特殊类型属性:

“ro.”前缀: “ro.”前缀,只读属性。仅会被设置一次,即当设置此属性发现其属性名已经存在,则此次设置不会生效,返回-1。

“persist.”前缀: “persist.”前缀,保留属性。当服务端接收到persist属性设置请求时,会在/data/property目录下建立对应的属性文件,并将键值存储到此文件中。如此一来即可实现键值掉电存储功能。

实现机制

流程:简单的介绍,Property机制运作流程可以简单的概括为以下几步:

  • PropertyService服务启动,初始化共享内存,加载若干属性脚本中默认属性内容;
  • 将系统中所有属性内容(key/value)存入系统共享内存,创建socket,并持续监听客户端socket请求;
  • 系统中各个客户进程将共享内存(只读权限)映射到自己的内存空间,可直接读取属性内容;
  • 系统仅有Property Service (属性服务)可修改和增加属性值;
  • 各个客户进程仅有读取属性权限,如需修改属性,需通过socket方式向Property Service发出修改请求,由Property Service统一修改;
  • 属性键值内容以字典树的形式存储于共享内存中(二叉树)。

Property机制示意图:

代码分析

  • Property Service:Property服务端实现内容主要包括两部分:存储属性值共享内存(mmap + 二叉树)和建立通信(socket)。 共享机制:将文件映射两次到内存,第一次为可读可写权限,句柄为property service服务;第二次为只读权限,句柄为client服务。 通信机制:服务端建立socket通信,持续监听并处理客户端请求。
  • Property Client: 客户端功能主要为设置属性和获取属性。其中获取属性可直接读取共享内存即可;设置属性则需要向服务端发送申请,由服务端将属性键值对设置到共享内存。property_set流程:

property_get流程:

使用示例

在使用之前先在后台执行服务端程序property_service(可放到开机启动脚本)。

image.png

注:在一次开机中只允许执行一次property_service。若希望在property_service出现异常,手动重新执行,需先删除共享文件"dev/__properties__"。

显示系统设置的属性:

手动设置属性:

总结

  • 本篇主要记录移植Android Property机制过程以及对其原理的简要分析,Property可实现多进程之间的数据交互功能。
  • Property机制主要使用了socket、mmap和二叉树的技巧,学习其整体的设计可为后续工作开发增加知识储备。

参考:

https://blog.csdn.net/stoic163/article/details/88815430

最后

用心感悟,认真记录,写好每一篇文章,分享每一框干货。愿每一篇文章不负自己,不负看客!文章所有实现代码,均可在后台发送关键字获取。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源519 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Structure from Motion 综述
Structure from Motion(SfM)是一个估计相机参数及三维点位置的问题。SfM方法可以分为增量式(incremental/sequential),全局式(global),混合式(hybrid),层次式(hierarchical),基于语义的SfM(Semantic SfM)。
点云PCL博主
2019/07/30
4.3K0
Structure from Motion 综述
SFM算法流程
Figure1:Block diagram of structure from motion
全栈程序员站长
2022/08/31
1.6K0
SFM算法流程
原创高效SfM算法:XRSfM帮你轻松恢复影像数据的场景结构
运动恢复结构(Structure from Motion,简称SfM)技术旨在从多张不同视角的图像中恢复出场景的结构信息和拍摄相机的位姿,是计算机三维视觉的关键技术之一。恢复环境结构的能力是众多自动化任务和混合现实应用的基础,因此SfM广泛地应用于自动驾驶、机器人、混合现实、数字孪生等领域。
3D视觉工坊
2023/04/30
1.2K0
原创高效SfM算法:XRSfM帮你轻松恢复影像数据的场景结构
保护隐私的 Structure-from-Motion (SfM)
标题:Privacy Preserving Structure-from-Motion
3D视觉工坊
2020/12/11
9070
保护隐私的 Structure-from-Motion (SfM)
PMVS:多视图匹配经典算法
导语:Multi-View Stereo(MVS)多视图立体匹配与三维重建的任务是:以已知内外参数的多幅图像(SfM的结果)为输入,重建出真实世界中物体/场景的三维模型。 本文作者提出了PMVS的经典算法,深入了解传统算法的实现效果,可以帮助我们与基于深度学习的方法进行对比,对“如何评估多个视图间相似性”这一问题有更深刻的认识,希望能对相关研究人员有一定的参考帮助。
计算机视觉
2021/11/19
7750
PMVS:多视图匹配经典算法
当前深度学习和 SLAM 结合有哪些比较好的论文
简单介绍几个比较有代表性的工作, 分为以下几类: I. 相机重定位(Relocalization) Deep Learning 和 SLAM 结合的开山之作 ,剑桥的论文:PoseNet 。该方法
AI研习社
2018/03/19
1.9K0
当前深度学习和 SLAM 结合有哪些比较好的论文
基于单目视觉的三维重建算法综述
三维计算机视觉在计算机视觉是偏基础的方向,随着2010年阿凡达在全球热映以来,三维计算机视觉的应用从传统工业领域逐渐走向生活、娱乐、服务等,比如AR/VR,SLAM,自动驾驶等都离不开三维视觉的技术。
SIGAI学习与实践平台
2019/03/01
4.8K0
基于单目视觉的三维重建算法综述
使用 OpenMVG+PMVS实现视觉三维重建
我们知道,照相机的原理是将一个三维场景投影到二维平面。所谓视觉三维重建,顾名思义就是从已有的二维图像中复原原始三维场景。
3D视觉工坊
2020/12/03
7.1K0
使用 OpenMVG+PMVS实现视觉三维重建
P2-Net:用于2D像素与3D点匹配的局部特征的联合描述符和检测器(ICCV 2021)
1)论文:P2-Net: Joint description and detection of local features for pixel and point matching
3D视觉工坊
2023/04/29
1.2K0
P2-Net:用于2D像素与3D点匹配的局部特征的联合描述符和检测器(ICCV 2021)
Windows下使用VisualSFM + CMVS/PMVS + MeshLab进行三维重建
Windows下使用VisualSFM + CMVS/PMVS +MeshLab进行三维重建
全栈程序员站长
2022/08/31
4.2K3
Windows下使用VisualSFM + CMVS/PMVS + MeshLab进行三维重建
SFM原理简介「建议收藏」
小孔模型成的是倒像,为了表述与研究的方便,我们常常将像面至于小孔之前,且到小孔的距离仍然是焦距f,这样的模型与原来的小孔模型是等价的,只不过成的是正像,符合人的直观感受。 在这种情况下,往往将小孔称作光心(Optical Center)。
全栈程序员站长
2022/06/24
2.3K0
SFM原理简介「建议收藏」
OpenCV图像拼接终章--Stitching detailed使用与参数介绍
关于OpenCV图像拼接的方法,如果不熟悉的话,可以先看看公众号整理的如下四篇文章介绍:
Color Space
2020/10/29
5.7K1
OpenCV图像拼接终章--Stitching detailed使用与参数介绍
使用 OpenCV 的 SIFT 图像特征提取和匹配
图像特征提取和匹配是计算机视觉和图像处理中的重要任务。它们在图像识别、目标检测和图像拼接等各种应用中发挥着至关重要的作用。
小白学视觉
2025/01/23
1530
使用 OpenCV 的 SIFT 图像特征提取和匹配
开源:CVPR 2020视觉定位挑战赛第二名方案Kapture
今天介绍欧洲NAVER LABS的研究员提出的一种可以用于视觉三维重建以及定位的算法,同时介绍一种通用三维重建的数据格式管理器Kapture,本方案获得CVPR视觉定位挑战赛第二名。
好好学SLAM
2021/05/28
1.8K0
sfm点云代码_SfM实现过程分析
昨天立了flag,今天要学SfM过程,大概看了看SfM的各个文件目录,build&make出来的linux-release-x86大概叫这个名字的文件夹里面有很多可执行文件,直接根据文档里给的参数跑就可以,要搞源码的话实在是搞不起,太复杂,太庞大了。下面的代码是从他给出的easy to use的python脚本中截取的核心代码,注释的也很赞,清晰明确。
全栈程序员站长
2022/08/31
5590
【收藏】深度学习在计算机视觉领域的应用一览!超全总结!
转载自知乎https://zhuanlan.zhihu.com/p/55747295
小白学视觉
2019/08/09
1K0
【收藏】深度学习在计算机视觉领域的应用一览!超全总结!
VO视觉里程计
VO(Visual Odometry)视觉里程计是通过车载摄像头或移动机器人的运动所引起的图像的变化,以逐步估计车辆姿态的过程。
点云PCL博主
2019/07/30
2.5K0
VO视觉里程计
CVPR 2021 | 图像匹配挑战赛总结 (SuperPoint + SuperGlue 缝缝补补还能再战一年)
Hi大家好,我是 Realcat,今天给大家分享的是 CVPR 2021 图像匹配挑战赛研讨会的内容摘要。
好好学SLAM
2021/07/30
6.6K1
CVPR 2021 | 图像匹配挑战赛总结 (SuperPoint + SuperGlue 缝缝补补还能再战一年)
CVPR2020图像匹配挑战赛,新数据集+新评测方法,SOTA正瑟瑟发抖!
从一系列图像中恢复物体的3D结构是计算机视觉研究中一个热门课题,这使得我们相隔万里就可以在google map中看到复活节岛的风景。这得益于图像采集自可控的条件(设备+环境等),使最终的重建效果的一致性和质量都很高;但这也限制了采集设备以及视角的差异。畅想一下,假如我们不使用专业设备,而是利用sfm技术根据互联网上大量的图片重建出这个复杂世界,那该多好呀!
好好学SLAM
2021/05/28
4.4K0
基于约束捆集调整的多相机运动结构恢复方法
文章:CONSTRAINED BUNDLE ADJUSTMENT FOR STRUCTURE FROM MOTION USING UNCALIBRATED MULTI-CAMERA SYSTEMS
点云PCL博主
2023/08/21
4580
基于约束捆集调整的多相机运动结构恢复方法
推荐阅读
相关推荐
Structure from Motion 综述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文