前言

我们在开发过程中经常会使用到系统属性,例如获取系统软件版本,获取设备名名称,boardid等;有时也需要内置自己的属性,系统属性简单来说是用来存储系统中某些键值对数据,具有全局性、存取灵活方便的特点。

一 终端prop命令的使用

1.1 查看系统所有props

#查看系统所有props
$getprop
...
[persist.sys.timezone]: [Asia/Shanghai]   //时区
[ro.system.build.type]: [userdebug]       //系统编译类型
[vendor.display.lcd_density]: [320]       //屏幕密度
...#获取时区属性persist.sys.timezone的值
$getprop persist.sys.timezone
Asia/Shanghai#过滤属性名或属性值含有关键字"timezone"的属性
$getprop | grep timezone
[persist.sys.timezone]: [Asia/Shanghai]#获取不存在的属性时结果为空
$getprop hello

1.2 设置prop

$getprop my.prop.test    //属性my.prop.test为空
$setprop my.prop.test 123    //设置属性my.prop.test为123
$getprop my.prop.test    //获取属性my.prop.test为123
123

setprop 可以给属性设置int,bool,string等基本类型

二 代码中如何调用prop属性

2.1 java代码中使用prop

在java代码中使用prop 一般需要满足一下条件

  • import android.os.Systemproperties;

  • 具有system权限

  • 在AndroidManifest.xml中,配置android:sharedUserId=“android.uid.system”

  • 在Android.mk中,配置LOCAL_CERTIFICATE :=platform 或Android.bp 配置 certificate: platform

Systemproperties源码位置:

frameworks/base/core/java/android/os/SystemProperties.java

如果没有没有system权限 则需要利用java反射原理进行调用 因为Systemproperties属于隐藏类且get/set方法属于隐藏方法

      /*** Get the String value for the given {@code key}.* @param key the key to lookup* @return an empty string if the {@code key} isn't found* @hide*/@NonNull@SystemApipublic static String get(@NonNull String key) {if (TRACK_KEY_ACCESS) onKeyAccess(key);return native_get(key);}
      /*** Set the value for the given {@code key} to {@code val}.* @throws IllegalArgumentException for non read-only properties if the {@code val} exceeds* 91 characters* @throws RuntimeException if the property cannot be set, for example, if it was blocked by* SELinux. libc will log the underlying reason.* @hide*/@UnsupportedAppUsagepublic static void set(@NonNull String key, @Nullable String val) {if (val != null && !key.startsWith("ro.") && val.getBytes(StandardCharsets.UTF_8).length> PROP_VALUE_MAX) {throw new IllegalArgumentException("value of system property '" + key+ "' is longer than " + PROP_VALUE_MAX + " bytes: " + val);}if (TRACK_KEY_ACCESS) onKeyAccess(key);native_set(key, val);}

如何利用反射调用Systemproperties

2.2 C++ 代码中使用prop

在c++代码中使用prop 需要:

  • include<cutils/properties.h>

  • Android.mk或者Android.bp或者Makefile需要链接libcutils库

properties.h源码位置:

system/core/libcutils/include/cutils/

intproperty_get(constchar* key, char* value, constchar* default_value)intproperty_set(constchar *key, constchar *value);intproperty_list(void (*propfn)(constchar *key, constchar *value, void *cookie), void *cookie)

三 特殊属性的介绍

3.1 ro只读属性

ro即read only属性通常是系统默认属性 在系统编译或初始化时设置的

ro属性一旦设置,属性值不能改变。重启不会失效,是永恒的固定值,不能修改值,只能刷机改变

tapas:/ # getprop ro.miui.support.pocket.mode
1
tapas:/ # setprop ro.miui.support.pocket.mode 2
Failed to set property 'ro.miui.support.pocket.mode' to '2'.
See dmesg for error reason.

3.2 persist属性

如果属名称以persist开头,当设置该属性,其值会保留在磁盘中目录为/data/property /persistent_properties,可以修改这种属性,重启后就是修改后的属性值

C:\Users\lct>adb shell "setprop persist.vendor.test 1"C:\Users\lct>adb shell "getprop persist.vendor.test"
1C:\Users\lct>adb rebootC:\Users\lct>adb shell "getprop persist.vendor.test"
1C:\Users\lct>adb shell "cat data/property/persistent_properties |grep  persist.vendor.test"
persist.vendor.test1

3.3 ctl控制属性

服务需要在rc文件里面注册

setprop ctl.start xxx //启动某服务
setprop ctl.stop xxx  //关闭某服务
setprop ctl.restart xxx  //重启某服务
getprop init.svc.xxx //服务运行状态
tapas:/ # setprop ctl.start sdlog
tapas:/ # getprop init.svc.sdlog
running
tapas:/ # setprop ctl.stop sdlog
tapas:/ # getprop init.svc.sdlog
stopped
tapas:/ # setprop ctl.restart sdlog
tapas:/ # getprop init.svc.sdlog
running

3.4 sys.powerctl属性

控制设备重启,关机,一般上层触发重启,关机(高温关机,低电量关机)最后都是设置的该属性

android系统的关机和重启最终都是通过修改SystemProperties的属性来完成的

C:\Users\lct>adb shell "setprop sys.powerctl reboot" //重启C:\Users\lct>adb shell "setprop sys.powerctl shutdown" //关机C:\Users\lct>adb shell "setprop sys.powerctl reboot,recovery" //recovery模式
C:\Users\lct>adb shell setprop sys.powerctl shutdown,batteryC:\Users\lct>adb shell getprop sys.boot.reason
shutdown,batteryC:\Users\lct>adb shell setprop sys.powerctl shutdown,thermal,batteryC:\Users\lct>adb shell getprop sys.boot.reason
shutdown,thermal,batteryC:\Users\lct>adb shell "setprop sys.powerctl reboot,recovery"C:\Users\lct>adb shell getprop sys.boot.reason
recovery

3.5 其他属性

设置其他格式的开头的属性,属性值保留在内存中,断电重启后不能保存

C:\Users\lct>adb shell "setprop sys.vendor.test 1"C:\Users\lct>adb shell "getprop sys.vendor.test"
1C:\Users\lct>adb rebootC:\Users\lct>adb shell "getprop sys.vendor.test"

四 如何添加系统默认属性

4.1 .prop文件位置

  • system/build/build.prop

  • system_ext/etc/build.prop

  • system_dlkm/etc/build.prop

  • product/etc/build.prop

  • vendor/build.prop

  • odm/etc/build.prop

4.2 mk文件属性配置

  • PRODUCT_SYSTEM_PROPERTIES

  • PRODUCT_SYSTEM_DEFAULT_PROPERTIES

  • PRODUCT_VENDOR_PROPERTIES

  • PRODUCT_PROPERTY_OVERRIDES

  • PRODUCT_DEFAULT_PROPERTY_OVERRIDES

  • PRODUCT_ODM_PROPERTIES

  • PRODUCT_SYSTEM_EXT_PROPERTIES

  • PRODUCT_PRODUCT_PROPERTIES

4.3 system分区prop

  • PRODUCT_SYSTEM_PROPERTIES

  • PRODUCT_SYSTEM_DEFAULT_PROPERTIES

PRODUCT_SYSTEM_DEFAULT_PROPERTIES` is highly discouraged. Will be deprecated.

system分区属性一般在设置的路径:

device/xiaomi/missi/system.prop

device/qcom/qssi/system.prop

device/qcom/qssi/qssi.mk

编译产物:system/build.prop

4.4 vendor分区prop

  • PRODUCT_VENDOR_PROPERTIES

  • PRODUCT_PROPERTY_OVERRIDES

  • PRODUCT_DEFAULT_PROPERTY_OVERRIDES

`PRODUCT_PROPERTY_OVERRIDES` is highly discouraged. Will be deprecated.

`PRODUCT_DEFAULT_PROPERTY_OVERRIDES` is also discouraged. Will be deprecated.

可在如下mk文件中进行添加

device/xiaomi/mivendor/mivendor_sm6225.mk

编译产物:vendor/build.prop

4.5 product分区prop

  • PRODUCT_PRODUCT_PROPERTIES

可在如下mk文件进行添加(以M7为例)

device/xiaomi/topaz/product/common.mk

device/xiaomi/tapas/product/common.mk

编译产物:product/etc/build.prop

4.6 odm分区prop

  • PRODUCT_ODM_PROPERTIES

可在如下mk文件进行添加(以M7为例)

device/xiaomi/topaz/odm/topaz.mk

device/xiaomi/topaz/odm/tapas.mk

编译产物:odm/etc/build.prop

4.7 实例分析

/lc-t-topaz-pre-vendor/device/xiaomi/topaz/product/common.mk34 PRODUCT_PRODUCT_PROPERTIES += persist.vendor.ims.no_stapa=1/lc-t-topaz-pre-vendor/device/xiaomi/tapas/product/common.mk51 PRODUCT_PRODUCT_PROPERTIES += persist.vendor.ims.no_stapa=1/lc-t-topaz-pre-vendor/device/xiaomi/topaz/odm/topaz.mk57 PRODUCT_PRODUCT_PROPERTIES += persist.vendor.ims.no_stapa=1/lc-t-topaz-pre-vendor/device/xiaomi/tapas/odm/tapas.mk80 PRODUCT_PRODUCT_PROPERTIES += persist.vendor.ims.no_stapa=1/lc-t-topaz-pre-vendor/device/xiaomi/mivendor/system.prop203 persist.vendor.ims.no_stapa=1
mivendor_sm6225.mk656 PRODUCT_PRODUCT_PROPERTIES += persist.vendor.ims.no_stapa=1
  • 上面截图中 哪个仓库下的persist.vendor.ims.no_stapa属性会被编译到?

  • 是否有优先级,如果product、odm、mivendor仓库下面该属性值都不一样 最后会显示哪个属性值?

patch:

C:\Users\lct>adb shell "cat vendor/build.prop |grep persist.vendor.ims.no_stapa"
persist.vendor.ims.no_stapa=1C:\Users\lct>adb shell "cat product/etc//build.prop |grep persist.vendor.ims.no_stapa"
persist.vendor.ims.no_stapa=0C:\Users\lct>adb shell "cat odm/etc//build.prop |grep persist.vendor.ims.no_stapa"
persist.vendor.ims.no_stapa=2C:\Users\lct>adb shell "getprop persist.vendor.ims.no_stapa"
0

添加prop属性优先级级别 product > odm > vendor > system_ext > system

参考文件源码路径: /build/make/Changes.md

4.8 添加属性SEpolicy

如果在对应mk文件添加默认属性后 有时会发现不生效 类似报错log如下

这样因为init在loadpropfile会check 属性的sepolicy

解决方案步骤:

  • 添加vendor属性标签

  • 分配属性标签

  • vendor_init.te文件中添加set_prop权限

参考gerrit提交:

https://gerrit.odm.mioffice.cn/c/device/qcom/sepolicy_vndr/+/346379
https://gerrit.odm.mioffice.cn/c/device/xiaomi/mivendor/+/335042

如果其他进程需要访问该属性 则需要在对应的.te文件中set_prop/get_prop权限即可

五 如何客制化.prop

为了方便统一管理定制化属性,有时会将定制化属性都写在定制的.prop文件中,下面以添加example.prop为例说明添加过程。

涉及到代码路径:

5.1 system分区添加example.prop

涉及到的代码路径:

device/xiaomi/missi/

/system/core/init/property_service.cpp

device/qcom/sepolicy/generic/private/property_contexts

  • device/xiaomi/missi下添加example.prop

  • device/xiaomi/missi/missi.mk copy到system分区

  • device/qcom/sepolicy/generic/private/property_contexts分配标签 使得init可设置prop

  • /system/core/init/property_service.cpp 添加load prop文件

烧录版本 验证如下

C:\Users\lct>adb shell "cat system/example.prop"
ro.hello.year=2023
persist.hello.month=01
hello.day=06
C:\Users\lct>adb shell "getprop ro.hello.year"
2023C:\Users\lct>adb shell "getprop persist.hello.month"
01C:\Users\lct>adb shell "getprop hello.day"
06C:\Users\lct>adb shell "getprop -Z hello.day"
u:object_r:system_prop:s0

5.2 vendor分区添加example.prop

涉及到的代码路径:

/device/xiaomi/mivendor/

/system/core/init/property_service.cpp

  • /device/xiaomi/mivendor/下添加example.prop

  • /device/xiaomi/mivendor/mivendor_sm6225.mk copy到vendor分区

  • /system/core/init/property_service.cpp 添加load example.prop文件

烧录版本 验证如下:

C:\Users\lct>adb shell "cat vendor/example.prop"
ro.vendor.year=2023
persist.vendor.month=01
vendor.day=06
C:\Users\lct>adb shell "getprop ro.vendor.year"
2023C:\Users\lct>adb shell "getprop persist.vendor.month"
01C:\Users\lct>adb shell "getprop vendor.day"
06
C:\Users\lct>adb shell "getprop -Z ro.vendor.year"
u:object_r:vendor_default_prop:s0C:\Users\lct>adb shell "getprop -Z persist.vendor.month"
u:object_r:vendor_default_prop:s0C:\Users\lct>adb shell "getprop -Z vendor.day"
u:object_r:vendor_default_prop:s0

在这里没有重新分配标签,使用的默认的vendor_default_prop标签 vendor_init默认有权限设该标签属性

system/sepolicy/prebuilts/api/32.0/private/property_contexts

 # Common default properties for vendor, odm, vendor_dlkm, and odm_dlkm.init.svc.odm.           u:object_r:vendor_default_prop:s0init.svc.vendor.        u:object_r:vendor_default_prop:s0ro.hardware.            u:object_r:vendor_default_prop:s0ro.odm.                 u:object_r:vendor_default_prop:s0ro.vendor.              u:object_r:vendor_default_prop:s0ro.vendor_dlkm.         u:object_r:vendor_default_prop:s0ro.odm_dlkm.            u:object_r:vendor_default_prop:s0odm.                    u:object_r:vendor_default_prop:s0persist.odm.            u:object_r:vendor_default_prop:s0persist.vendor.         u:object_r:vendor_default_prop:s0vendor.                 u:object_r:vendor_default_prop:s0

system/sepolicy/public/vendor_init.te

set_prop(vendor_init, vendor_default_prop)
Android System Property讲解前言

相关文章

  1. Linux- 浅谈ELF目标文件格式

    理解了进程的描述和创建之后&#xff0c;自然会想到我们编写的可执行程序是如何作为一个进程工作的&#xff1f;这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”&#xff0c;是指编译器生成的文件。“目标”指目标平台&#xff0c…...

    2023/3/28 16:59:58
  2. 2022(二等奖)C859基于WebGIS的南京市排污口管理系统

    作品介绍 一、需求分析 &#xff08;一&#xff09;社会需求 《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》明确提出&#xff0c;入河入海排污口(以下简称排污口&#xff09;是指直接或通过管道、沟、渠等排污通道向环境水体排放污水的口门&#xff0c;是流…...

    2023/3/28 16:58:54
  3. MobTech|场景唤醒的实现

    什么是场景唤醒&#xff1f; 场景唤醒是moblink的一项核心功能&#xff0c;可以实现从打开的Web页面&#xff0c;一键唤醒App&#xff0c;并恢复对应的场景。 场景是指用户在App内的某个特定页面或状态&#xff0c;比如商品详情页、活动页、个人主页等。每个场景都有一个唯一…...

    2023/3/28 16:57:55
  4. echarts 关系调用高亮示例 dispatchAction及其遇到的问题

    如图所示 <template><div class"Chart"><div class"main_box"><div class"diagram_box" v-if"activeChart diagram"><div class"drawer"><drawer:drawer.sync"drawer":cusStyl…...

    2023/3/28 16:56:33
  5. L1-018 大笨钟 L1-020 帅到没朋友 L1-034 点赞

    微博上有个自称“大笨钟V”的家伙&#xff0c;每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律&#xff0c;所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的&#xff0c;如果正好在某个整点敲&#xff0c;那么“当”数就等于那个整点数&#xff…...

    2023/3/28 16:55:06
  6. 两个数组的交集(力扣刷题)

    给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-arrays 说…...

    2023/3/28 16:54:40
  7. 【HashMap】jdk1.8中HashMap的插入扩容源码学习分析

    jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用&#xff0c;在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor&#xff08;加载因子&#xff09;用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...

    2023/3/28 16:53:02
  8. uni-app css尺寸单位rpx介绍

    一&#xff0c;前言 1.在使用uni-app开发小程序时支持的尺寸单位如下 &#xff08;1&#xff09;基础单位&#xff1a;px &#xff0c; rpx &#xff08;2&#xff09;h5单位&#xff1a;rem &#xff0c;vm &#xff0c;vh 2.rpx是微信小程序提出的一种响应式px 二&#x…...

    2023/3/28 16:52:49
  9. 纳瓦尔的推荐读物

    非虚构类 《无穷的开始&#xff1a;世界进步的本源》&#xff0c;戴维多伊奇这本书不是很好理解&#xff0c;但确实让我变得更聪明了。 《人类简史&#xff1a;从动物到上帝》&#xff0c;尤瓦尔赫拉利这本书介绍了人类的历史。书中的观察、框架和心智模型会让你以不同的方式看…...

    2023/3/28 16:50:33
  10. 【JavaScript】43_DOM编程:DOM修改与demo

    10、DOM的修改 appendChild() 用于给一个节点添加子节点 list.appendChild(li) insertAdjacentElement() 可以向元素的任意位置添加元素 两个参数&#xff1a; 1.要添加的位置 2.要添加的元素 beforeend 标签的最后 afterbegin 标签的开始 beforebegin 在元素的前边插…...

    2023/3/28 16:50:09
  11. Ubuntu下解决 ×.so.×: wrong ELF class: ELFCLASS64 的问题

    安装软件时出现问题 .so.:wrong ELF class: ELFCLASS64 &#xff0c;大致的意思是软件是32位的&#xff0c;需要32位的 .so.动态链接库&#xff0c;而系统是64位的所提供的该 动态链接库.so.是64位的&#xff0c;所以不能用。 首先可以查看自己的64位系统是否开启了32位支持功…...

    2023/3/28 16:48:11
  12. [学习笔记]PowerBI数据分析与可视化-B站数据大白

    参考资料 B站视频-Power BI 数据分析与可视化 前言 原视频中可能的勘误在笔记中有修改。CtrlF搜索“勘误”两个字可以快速定位到勘误。 原视频中可能的差异在笔记中有提及。CtrlF搜索“差异”两个字可以快速定位到勘误。 2. 建模与DAX函数 2.01 建立关系模型 表可以分为维…...

    2023/3/28 16:47:41
  13. 如何进行安全可靠的API身份验证?

    前言&#xff1a; 在开发安全的 REST API 时&#xff0c;身份验证是必不可少的。你可以将你的应用程序想象成一个聚会&#xff0c;那么身份验证就像一扇门&#xff0c;决定哪些客人可以进入——或者更准确地说&#xff0c;哪些请求可以进出。 接下来我将介绍四种常用的身份验证…...

    2023/3/28 16:46:37
  14. Python机器学习1

    机器学习现在很火的&#xff0c;纯纯的行业红海&#xff0c;虽然我已经脱离计算机行业了&#xff0c;但是我觉得&#xff0c;机器学习还是有必要学一下的&#xff0c;说不定以后会用的上呢&#xff0c;所以&#xff0c;乘着现在研一时间还比较多&#xff0c;除了自己研究方向以…...

    2023/3/28 16:46:05
  15. 局部变量被莫名的改变如何处理

    问题背景&#xff1a; 一个函数内部的局部变量 初始化 X0&#xff0c;然后中间X 。再去访问时&#xff0c;X还是0&#xff1b; 伪代码 function A {int x0;int buff[4096];int tx[4096];....;;;; for() {x....if(x 1){.........}function B(buff)function C()......} } 原本…...

    2023/3/28 16:45:51
  16. 基于springboot实现财务管理系统【源码+论文】分享

    基于springboot实现财务管理系统演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xf…...

    2023/3/28 16:44:52
  17. KEYSIGHT DAQ970A/是德科技DAQ970A数据采集器

    产品概览 KEYSIGHT / AGILENT DAQ970A 数据采集系统 Keysight DAQ970A 是下一代数据采集 (DAQ) 系统&#xff0c;具有 3 插槽主机和 8 个插件模块供您选择。DAQ970A 具有 6 位&#xff08;22 位&#xff09;分辨率、0.004% 基本 dcV 精度和超低读取噪声。内部自动量程 DMM 直…...

    2023/3/28 16:44:04
  18. CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

    作者&#xff1a;林苍 背景 容器无疑已经成为新的云计算基础设施&#xff0c;企业私有云平台的建设重心&#xff0c;正在从虚拟化的计算、存储、网络的建设&#xff0c;转向构建以容器、微服务等为核心的云原生平台。不过值得注意的是&#xff0c;企业 IT 系统在进行容器化改造…...

    2023/3/28 16:43:23
  19. linux 内存泄漏排查--多种工具介绍

    目录 1.工具 2.valgrind 2.1.Valgrind 安装 2.2.valgrind 使用 2.3.valgrind常见的命令行选项如下&#xff1a; 2.4.日志分析 3.mtrace 3.1.使用 3.2.注意 3.3.结果分析 4.bcc工具里面的memleak-bpfcc 4.1.命令安装 4.2.源码安装 4.3.结果分析 4.4.辅助命令 5.Sani…...

    2023/3/28 16:40:11
  20. Pytorch构建自己的数据集

    1.Pytorch内置的Dataset Pytorch中内置了许多数据集&#xff0c;我们可以从torchvision库中进行导入。比如&#xff0c;我们可以导入Fashion-MNIST数据集 import torch from torch.utils.data import Dataset from torchvision import datasets from torchvision.transforms …...

    2023/3/28 16:39:01
  21. 【3月比赛合集】20场可报名的「创新应用」和「程序设计」大奖赛,任君挑选!

    CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号同时会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 更多比赛信息见 CompHub主页 或 点击文末阅读原文 以下信息仅供参考&#xff0c;以比赛官网为准 目录 创新应用…...

    2023/3/28 16:37:34
  22. 经典文献阅读之--LOCUS 2.0(LiDAR为中心的多传感器LSLAM)

    0. 简介 在20年DARPA地下挑战赛中CoSTAR队伍提出了LOCUS这个深度学习模块&#xff0c;在两年后LOCUS2.0出世&#xff0c;LOCUS 2.0包括一种新的基于法线的广义迭代最近点&#xff08;GICP&#xff09;公式&#xff0c;该公式减少了点云对齐的计算时间&#xff0c;一种自适应体…...

    2023/3/28 16:35:26
  23. NDK FFmpeg音视频播放器四

    NDK前期基础知识终于学完了&#xff0c;现在开始进入项目实战学习&#xff0c;通过FFmpeg实现一个简单的音视频播放器。 音视频一二三节已经实现了音视频播放&#xff0c;本节主要是通过Profiler来检测工程存在的内存泄漏问题。 主要内容如下&#xff1a; 1.项目native层内存泄…...

    2023/3/28 16:32:21
  24. 短视频App开发方案IOS架构

    简介 随着社交媒体的兴起和短视频的日益普及&#xff0c;开发短视频App已成为一个赚钱的好主意。iOS开发人员在创建这些应用程序方面非常有需求&#xff0c;因为这需要一组独特的功能和设计。在本文中&#xff0c;我们将探讨在iOS上开发短视频App的不同方法&#xff0c;并提供…...

    2023/3/28 16:31:47
  25. 小黑仿生轮腿机器人(一)-本体说明及运动控制

    一、本体说明 1. 机器人整体描述 小黑仿生轮腿机器人是一款全向仿生轮腿&#xff0c;具备麦克纳姆轮底盘的运动特性的同时&#xff0c;还具备了部分四足仿生机器人的运动特性。通过4个麦克纳姆轮和腿部动作的配合&#xff0c;可以在运动中改变机身的姿态&#xff0c;适应不同的…...

    2023/3/28 16:31:18
  26. 衡量一款工程监测振弦采集仪是否好用的标准是什么呢?

    衡量一款工程监测振弦采集仪是否好用的标准是什么呢&#xff1f; 长期在工地上使用的仪器&#xff0c;由于不同工况&#xff0c;使用的环境各不同&#xff0c;以及要应对各种恶劣天气&#xff0c;一般都要立杆建机箱机柜来安装保护&#xff0c;选择一款合适的仪器就显得很重要…...

    2023/3/28 16:30:54
  27. 【FPGA-DSP】第二期:开发准备

    目录 1. System Generator安装 1.1 system generator的安装 1.1.1 vivado安装System Generator 1.1.2 System Generator配置 2. 启动 本章节首先介绍FPGA进行DSP开发所需要的软件环境&#xff0c;及其安装方式。 DSP学习教程参考B站视频 1. System Generator安装 Sys…...

    2023/3/28 16:30:24
  28. 性能优化之代码层 js

    一、条件判断的使用建议 if else的写法 如果只有一两个条件的判断&#xff0c;通常if-else处理条件的时间会比switch更快&#xff0c;当判断条件多到两个以上时&#xff0c;因为在大多数时候&#xff0c;switch处理单个条件的时间比if-else更快&#xff0c;所以switch更加适合…...

    2023/3/28 16:25:33
  29. 【论文指导】计算机毕业设计,摘要如何写?15篇案例把你安排明白

    作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…...

    2023/3/28 16:24:35
  30. 三个步骤帮你决定你今天吃什么(附20多个免费可用的高质量 API 推荐)

    写在最前 今天吃什么&#xff1f;已经成了每天的生活难题&#xff0c;但是你一定不知道&#xff0c;世界上有一种非常好玩的 API 叫做 “今天吃什么”&#xff01; 是的&#xff0c;它是专门为吃饭困难户而诞生的&#xff0c;它可以随机返回 n 个菜式供你选择&#xff0c;又或…...

    2023/3/28 16:23:55

最新文章

  1. Linux- 浅谈ELF目标文件格式

    理解了进程的描述和创建之后&#xff0c;自然会想到我们编写的可执行程序是如何作为一个进程工作的&#xff1f;这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”&#xff0c;是指编译器生成的文件。“目标”指目标平台&#xff0c…...

    2023/3/28 16:59:58
  2. 2022(二等奖)C859基于WebGIS的南京市排污口管理系统

    作品介绍 一、需求分析 &#xff08;一&#xff09;社会需求 《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》明确提出&#xff0c;入河入海排污口(以下简称排污口&#xff09;是指直接或通过管道、沟、渠等排污通道向环境水体排放污水的口门&#xff0c;是流…...

    2023/3/28 16:58:54
  3. MobTech|场景唤醒的实现

    什么是场景唤醒&#xff1f; 场景唤醒是moblink的一项核心功能&#xff0c;可以实现从打开的Web页面&#xff0c;一键唤醒App&#xff0c;并恢复对应的场景。 场景是指用户在App内的某个特定页面或状态&#xff0c;比如商品详情页、活动页、个人主页等。每个场景都有一个唯一…...

    2023/3/28 16:57:55
  4. echarts 关系调用高亮示例 dispatchAction及其遇到的问题

    如图所示 <template><div class"Chart"><div class"main_box"><div class"diagram_box" v-if"activeChart diagram"><div class"drawer"><drawer:drawer.sync"drawer":cusStyl…...

    2023/3/28 16:56:33
  5. L1-018 大笨钟 L1-020 帅到没朋友 L1-034 点赞

    微博上有个自称“大笨钟V”的家伙&#xff0c;每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律&#xff0c;所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的&#xff0c;如果正好在某个整点敲&#xff0c;那么“当”数就等于那个整点数&#xff…...

    2023/3/28 16:55:06
  6. 两个数组的交集(力扣刷题)

    给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-arrays 说…...

    2023/3/28 16:54:40
  7. 【HashMap】jdk1.8中HashMap的插入扩容源码学习分析

    jdk1.8中HashMap的插入扩容源码学习分析 一、成员变量 首先介绍HashMap中各个成员变量的作用&#xff0c;在HashMap中有以下成员变量 size记录了HashMap中键值对的个数 loadFactor&#xff08;加载因子&#xff09;用来决定size达到容量的百分之多少时触发扩容机制 默认是0…...

    2023/3/28 16:53:02
  8. uni-app css尺寸单位rpx介绍

    一&#xff0c;前言 1.在使用uni-app开发小程序时支持的尺寸单位如下 &#xff08;1&#xff09;基础单位&#xff1a;px &#xff0c; rpx &#xff08;2&#xff09;h5单位&#xff1a;rem &#xff0c;vm &#xff0c;vh 2.rpx是微信小程序提出的一种响应式px 二&#x…...

    2023/3/28 16:52:49
  9. 纳瓦尔的推荐读物

    非虚构类 《无穷的开始&#xff1a;世界进步的本源》&#xff0c;戴维多伊奇这本书不是很好理解&#xff0c;但确实让我变得更聪明了。 《人类简史&#xff1a;从动物到上帝》&#xff0c;尤瓦尔赫拉利这本书介绍了人类的历史。书中的观察、框架和心智模型会让你以不同的方式看…...

    2023/3/28 16:50:33
  10. 【JavaScript】43_DOM编程:DOM修改与demo

    10、DOM的修改 appendChild() 用于给一个节点添加子节点 list.appendChild(li) insertAdjacentElement() 可以向元素的任意位置添加元素 两个参数&#xff1a; 1.要添加的位置 2.要添加的元素 beforeend 标签的最后 afterbegin 标签的开始 beforebegin 在元素的前边插…...

    2023/3/28 16:50:09
  11. Ubuntu下解决 ×.so.×: wrong ELF class: ELFCLASS64 的问题

    安装软件时出现问题 .so.:wrong ELF class: ELFCLASS64 &#xff0c;大致的意思是软件是32位的&#xff0c;需要32位的 .so.动态链接库&#xff0c;而系统是64位的所提供的该 动态链接库.so.是64位的&#xff0c;所以不能用。 首先可以查看自己的64位系统是否开启了32位支持功…...

    2023/3/28 16:48:11
  12. [学习笔记]PowerBI数据分析与可视化-B站数据大白

    参考资料 B站视频-Power BI 数据分析与可视化 前言 原视频中可能的勘误在笔记中有修改。CtrlF搜索“勘误”两个字可以快速定位到勘误。 原视频中可能的差异在笔记中有提及。CtrlF搜索“差异”两个字可以快速定位到勘误。 2. 建模与DAX函数 2.01 建立关系模型 表可以分为维…...

    2023/3/28 16:47:41
  13. 如何进行安全可靠的API身份验证?

    前言&#xff1a; 在开发安全的 REST API 时&#xff0c;身份验证是必不可少的。你可以将你的应用程序想象成一个聚会&#xff0c;那么身份验证就像一扇门&#xff0c;决定哪些客人可以进入——或者更准确地说&#xff0c;哪些请求可以进出。 接下来我将介绍四种常用的身份验证…...

    2023/3/28 16:46:37
  14. Python机器学习1

    机器学习现在很火的&#xff0c;纯纯的行业红海&#xff0c;虽然我已经脱离计算机行业了&#xff0c;但是我觉得&#xff0c;机器学习还是有必要学一下的&#xff0c;说不定以后会用的上呢&#xff0c;所以&#xff0c;乘着现在研一时间还比较多&#xff0c;除了自己研究方向以…...

    2023/3/28 16:46:05
  15. 局部变量被莫名的改变如何处理

    问题背景&#xff1a; 一个函数内部的局部变量 初始化 X0&#xff0c;然后中间X 。再去访问时&#xff0c;X还是0&#xff1b; 伪代码 function A {int x0;int buff[4096];int tx[4096];....;;;; for() {x....if(x 1){.........}function B(buff)function C()......} } 原本…...

    2023/3/28 16:45:51
  16. 基于springboot实现财务管理系统【源码+论文】分享

    基于springboot实现财务管理系统演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xf…...

    2023/3/28 16:44:52
  17. KEYSIGHT DAQ970A/是德科技DAQ970A数据采集器

    产品概览 KEYSIGHT / AGILENT DAQ970A 数据采集系统 Keysight DAQ970A 是下一代数据采集 (DAQ) 系统&#xff0c;具有 3 插槽主机和 8 个插件模块供您选择。DAQ970A 具有 6 位&#xff08;22 位&#xff09;分辨率、0.004% 基本 dcV 精度和超低读取噪声。内部自动量程 DMM 直…...

    2023/3/28 16:44:04
  18. CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

    作者&#xff1a;林苍 背景 容器无疑已经成为新的云计算基础设施&#xff0c;企业私有云平台的建设重心&#xff0c;正在从虚拟化的计算、存储、网络的建设&#xff0c;转向构建以容器、微服务等为核心的云原生平台。不过值得注意的是&#xff0c;企业 IT 系统在进行容器化改造…...

    2023/3/28 16:43:23
  19. linux 内存泄漏排查--多种工具介绍

    目录 1.工具 2.valgrind 2.1.Valgrind 安装 2.2.valgrind 使用 2.3.valgrind常见的命令行选项如下&#xff1a; 2.4.日志分析 3.mtrace 3.1.使用 3.2.注意 3.3.结果分析 4.bcc工具里面的memleak-bpfcc 4.1.命令安装 4.2.源码安装 4.3.结果分析 4.4.辅助命令 5.Sani…...

    2023/3/28 16:40:11
  20. Pytorch构建自己的数据集

    1.Pytorch内置的Dataset Pytorch中内置了许多数据集&#xff0c;我们可以从torchvision库中进行导入。比如&#xff0c;我们可以导入Fashion-MNIST数据集 import torch from torch.utils.data import Dataset from torchvision import datasets from torchvision.transforms …...

    2023/3/28 16:39:01
  21. 【3月比赛合集】20场可报名的「创新应用」和「程序设计」大奖赛,任君挑选!

    CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号同时会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 更多比赛信息见 CompHub主页 或 点击文末阅读原文 以下信息仅供参考&#xff0c;以比赛官网为准 目录 创新应用…...

    2023/3/28 16:37:34
  22. 经典文献阅读之--LOCUS 2.0(LiDAR为中心的多传感器LSLAM)

    0. 简介 在20年DARPA地下挑战赛中CoSTAR队伍提出了LOCUS这个深度学习模块&#xff0c;在两年后LOCUS2.0出世&#xff0c;LOCUS 2.0包括一种新的基于法线的广义迭代最近点&#xff08;GICP&#xff09;公式&#xff0c;该公式减少了点云对齐的计算时间&#xff0c;一种自适应体…...

    2023/3/28 16:35:26
  23. NDK FFmpeg音视频播放器四

    NDK前期基础知识终于学完了&#xff0c;现在开始进入项目实战学习&#xff0c;通过FFmpeg实现一个简单的音视频播放器。 音视频一二三节已经实现了音视频播放&#xff0c;本节主要是通过Profiler来检测工程存在的内存泄漏问题。 主要内容如下&#xff1a; 1.项目native层内存泄…...

    2023/3/28 16:32:21
  24. 短视频App开发方案IOS架构

    简介 随着社交媒体的兴起和短视频的日益普及&#xff0c;开发短视频App已成为一个赚钱的好主意。iOS开发人员在创建这些应用程序方面非常有需求&#xff0c;因为这需要一组独特的功能和设计。在本文中&#xff0c;我们将探讨在iOS上开发短视频App的不同方法&#xff0c;并提供…...

    2023/3/28 16:31:47
  25. 小黑仿生轮腿机器人(一)-本体说明及运动控制

    一、本体说明 1. 机器人整体描述 小黑仿生轮腿机器人是一款全向仿生轮腿&#xff0c;具备麦克纳姆轮底盘的运动特性的同时&#xff0c;还具备了部分四足仿生机器人的运动特性。通过4个麦克纳姆轮和腿部动作的配合&#xff0c;可以在运动中改变机身的姿态&#xff0c;适应不同的…...

    2023/3/28 16:31:18
  26. 衡量一款工程监测振弦采集仪是否好用的标准是什么呢?

    衡量一款工程监测振弦采集仪是否好用的标准是什么呢&#xff1f; 长期在工地上使用的仪器&#xff0c;由于不同工况&#xff0c;使用的环境各不同&#xff0c;以及要应对各种恶劣天气&#xff0c;一般都要立杆建机箱机柜来安装保护&#xff0c;选择一款合适的仪器就显得很重要…...

    2023/3/28 16:30:54
  27. 【FPGA-DSP】第二期:开发准备

    目录 1. System Generator安装 1.1 system generator的安装 1.1.1 vivado安装System Generator 1.1.2 System Generator配置 2. 启动 本章节首先介绍FPGA进行DSP开发所需要的软件环境&#xff0c;及其安装方式。 DSP学习教程参考B站视频 1. System Generator安装 Sys…...

    2023/3/28 16:30:24
  28. 性能优化之代码层 js

    一、条件判断的使用建议 if else的写法 如果只有一两个条件的判断&#xff0c;通常if-else处理条件的时间会比switch更快&#xff0c;当判断条件多到两个以上时&#xff0c;因为在大多数时候&#xff0c;switch处理单个条件的时间比if-else更快&#xff0c;所以switch更加适合…...

    2023/3/28 16:25:33
  29. 【论文指导】计算机毕业设计,摘要如何写?15篇案例把你安排明白

    作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…...

    2023/3/28 16:24:35
  30. 三个步骤帮你决定你今天吃什么(附20多个免费可用的高质量 API 推荐)

    写在最前 今天吃什么&#xff1f;已经成了每天的生活难题&#xff0c;但是你一定不知道&#xff0c;世界上有一种非常好玩的 API 叫做 “今天吃什么”&#xff01; 是的&#xff0c;它是专门为吃饭困难户而诞生的&#xff0c;它可以随机返回 n 个菜式供你选择&#xff0c;又或…...

    2023/3/28 16:23:55