Android的属性系统

网上有一篇文章介绍了Android的属性系统(http://blog.youkuaiyun.com/tekkamanitachi/archive/2009/06/18/4280982.aspx),我现在对其进行补充:

1. android现在好像只有/ default.prop,/system/build.prop两个文件,别的两个文件找不到

2. /data/property下有4个prop文件:persist.sys.timezone,persist.sys.language,persist.sys.country,persist.sys.localevar,里面保存着属性名称以“persist.”开头的属性值。

3. libcutils的源码位于system/core/libcutils/下面,获取和设置属性的代码在properties.c里面,读取属性通过读共享内存得到,设置属性通过发送请求到property_service进行设置。

4. 相关的函数有property_set,property_get,property_list。

5. 属性系统的初始化通过__system_properties_init函数完成,__system_properties_init函数代码如下:

 

可以看到首先从环境变量里面获取ANDROID_PROPERTY_WORKSPACE,ANDROID_PROPERTY_WORKSPACE的值为如下形式:ANDROID_PROPERTY_WORKSPACE=9,32768。然后获取共享内存的文件句柄和长度,最后对共享内存进行检查并设置全局变量__system_property_area__的值,property_get就是从__system_property_area__里面读取的属性值。环境变量的初始化在init.c的service_start函数里面。

6. /init.rc里面有设置属性的代码,例如:

# Define the oom_adj values for the classes of processes that can be

# killed by the kernel. These are used in ActivityManagerService.

setprop ro.FOREGROUND_APP_ADJ 0

setprop ro.VISIBLE_APP_ADJ 1

setprop ro.SECONDARY_SERVER_ADJ 2

setprop ro.HOME_APP_ADJ 4

setprop ro.HIDDEN_APP_MIN_ADJ 7

setprop ro.CONTENT_PROVIDER_ADJ 14

setprop ro.EMPTY_APP_ADJ 15

7. 通过property_list可以枚举所有的属性,下面是一段打印所有属性的代码。

 

Android.mk文件:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= /

list_property.cpp /

LOCAL_SHARED_LIBRARIES := /

libcutils /

libutils /

LOCAL_MODULE:= list_prop

include $(BUILD_EXECUTABLE)

include $(call all-makefiles-under,$(LOCAL_PATH))

所有的属性如下:

key=ro.secure,value=0

key=ro.allow.mock.location,value=1

key=ro.debuggable,value=1

key=persist.service.adb.enable,value=1

key=ro.kernel.qemu,value=1

key=ro.kernel.console,value=ttyS0

key=ro.kernel.android.checkjni,value=1

key=ro.kernel.android.qemud,value=ttyS1

key=ro.factorytest,value=0

key=ro.serialno,value=

key=ro.bootmode,value=unknown

key=ro.baseband,value=unknown

key=ro.carrier,value=unknown

key=ro.bootloader,value=unknown

key=ro.hardware,value=goldfish

key=ro.revision,value=0

key=ro.build.id,value=CUPCAKE

key=ro.build.display.id,value=sdk-eng 1.5 CUPCAKE 148875 test-keys

key=ro.build.version.incremental,value=148875

key=ro.build.version.sdk,value=3

key=ro.build.version.release,value=1.5

key=ro.build.date,value=Thu May 14 17:29:49 PDT 2009

key=ro.build.date.utc,value=1242347389

key=ro.build.type,value=eng

key=ro.build.user,value=android-build

key=ro.build.host,value=e-honda.mtv.corp.google.com

key=ro.build.tags,value=test-keys

key=ro.product.model,value=sdk

key=ro.product.brand,value=generic

key=ro.product.name,value=sdk

key=ro.product.device,value=generic

key=ro.product.board,value=

key=ro.product.manufacturer,value=unknown

key=ro.product.locale.language,value=en

key=ro.product.locale.region,value=US

key=ro.board.platform,value=

key=ro.build.product,value=generic

key=ro.build.description,value=sdk-eng 1.5 CUPCAKE 148875 test-keys

key=ro.build.fingerprint,value=generic/sdk/generic/:1.5/CUPCAKE/148875:eng/test-keys

key=rild.libpath,value=/system/lib/libreference-ril.so

key=rild.libargs,value=-d /dev/ttyS0

key=ro.config.notification_sound,value=F1_New_SMS.ogg

key=xmpp.auto-presence,value=true

key=ro.config.nocheckin,value=yes

key=net.bt.name,value=Android

key=net.change,value=net.gprs.local-ip

key=dalvik.vm.stack-trace-file,value=/data/anr/traces.txt

key=persist.sys.timezone,value=GMT

key=persist.sys.language,value=en

key=persist.sys.country,value=US

key=persist.sys.localevar,value=

key=ro.FOREGROUND_APP_ADJ,value=0

key=ro.VISIBLE_APP_ADJ,value=1

key=ro.SECONDARY_SERVER_ADJ,value=2

key=ro.HOME_APP_ADJ,value=4

key=ro.HIDDEN_APP_MIN_ADJ,value=7

key=ro.CONTENT_PROVIDER_ADJ,value=14

key=ro.EMPTY_APP_ADJ,value=15

key=ro.FOREGROUND_APP_MEM,value=1536

key=ro.VISIBLE_APP_MEM,value=2048

key=ro.SECONDARY_SERVER_MEM,value=4096

key=ro.HOME_APP_MEM,value=4096

key=ro.HIDDEN_APP_MEM,value=5120

key=ro.CONTENT_PROVIDER_MEM,value=5632

key=ro.EMPTY_APP_MEM,value=6144

key=net.tcp.buffersize.default,value=4096,87380,110208,4096,16384,110208

key=net.tcp.buffersize.wifi,value=4095,87380,110208,4096,16384,110208

key=net.tcp.buffersize.umts,value=4094,87380,110208,4096,16384,110208

key=net.tcp.buffersize.edge,value=4093,26280,35040,4096,16384,35040

key=net.tcp.buffersize.gprs,value=4092,8760,11680,4096,8760,11680

key=init.svc.console,value=running

key=init.svc.servicemanager,value=running

key=init.svc.vold,value=running

key=init.svc.debuggerd,value=running

key=init.svc.ril-daemon,value=running

key=init.svc.zygote,value=running

key=init.svc.media,value=running

key=init.svc.installd,value=running

key=init.svc.flash_recovery,value=stopped

key=init.svc.goldfish-setup,value=stopped

key=init.svc.qemud,value=stopped

key=init.svc.goldfish-logcat,value=stopped

key=ARGH,value=ARGH

key=net.eth0.dns1,value=10.0.2.3

key=net.gprs.local-ip,value=10.0.2.15

key=ro.radio.use-ppp,value=no

key=status.battery.state,value=Slow

key=status.battery.level,value=5

key=status.battery.level_raw,value=50

key=status.battery.level_scale,value=9

key=ro.setupwizard.mode,value=EMULATOR

key=ro.com.google.locationfeatures,value=1

key=init.svc.adbd,value=running

key=ro.qemu.init.completed,value=1

key=hw.keyboards.65536.devname,value=qwerty2

key=sys.settings_secure_version,value=2

key=dev.bootcomplete,value=1

key=sys.settings_system_version,value=6

key=gsm.sim.operator.numeric,value=

key=gsm.sim.operator.alpha,value=

key=gsm.sim.operator.iso-country,value=

key=gsm.sim.state,value=UNKNOWN

key=adb.connected,value=1

<think>好的,用户想了解如何解析Android设备的ro.build属性和proc asound cards的输出信息。首先,我需要回忆一下相关的知识点。 关于ro.build属性,记得这些属性存储在系统构建配置文件中,通常可以通过adb命令获取,比如`adb shell getprop ro.build.version.release`来获取Android版本。用户可能需要知道各个属性的含义,比如ro.build.version.sdk对应API级别,ro.product.model是设备型号等。需要解释每个常用属性的作用,这样用户能理解如何查看和解析它们。 然后是proc asound cards的信息。ALSA(高级Linux声音架构)在/proc/asound目录下提供了声音设备的信息。cards文件列出了系统中的声卡,每个声卡有ID和名称。可能需要指导用户如何通过adb进入shell,然后查看/proc/asound/cards的内容,并解释输出的结构,比如声卡编号、名称和驱动模块。此外,可能还需要提到其他相关文件如pcm和devices,这些可以提供更详细的音频设备信息。 还要考虑用户的实际操作步骤。例如,用户可能需要先连接设备,开启USB调试,安装ADB工具。然后执行相应的命令来获取属性或查看proc文件。需要分步骤说明,确保用户能按步骤操作。 另外,用户提供的引用内容中有关于声卡注册和创建流程的信息,可能涉及到内核模块或驱动程序的调试。这部分可能需要提到如何通过snd_card_new创建声卡实例,以及相关数据结构,但用户的问题更偏向于查看信息而非开发驱动,所以可能不需要深入代码细节,但可以简要提及这些信息的作用,帮助用户理解输出内容。 可能用户的实际需求是调试音频问题或了解设备信息,因此需要确保回答覆盖了常用命令和关键字段的解释。同时,生成的相关问题需要考虑用户可能的后续疑问,比如如何修改属性,如何调试声卡驱动,或者如何处理音频相关问题。 需要检查是否有遗漏的步骤或常见的错误,比如权限不足无法访问/proc/asound,或者设备未正确连接导致adb命令无法执行。可能需要提醒用户确保设备已连接并授权USB调试。 最后,确保回答符合格式要求:行内公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及较少数学公式,更多是命令和代码块。代码块需要用正确的语法包裹,例如使用反引号标注命令,保持结构清晰。</think>### 解析 Android 设备 ro.build 属性和 /proc/asound/cards 信息 #### 1. 查看并解析 ro.build 属性 ro.build 属性Android 系统构建时定义的全局属性,包含设备型号、版本号、编译信息等。通过以下步骤查看和解析: **步骤 1:连接设备并打开 ADB** ```bash $ adb devices # 确认设备已连接 ``` **步骤 2:获取所有构建属性** ```bash $ adb shell getprop | grep "ro.build" ``` 输出示例: ``` [ro.build.version.release]: [13] [ro.build.version.sdk]: [33] [ro.product.model]: [Pixel 6] [ro.build.date]: [Wed Jun 1 12:00:00 UTC 2023] ``` **关键属性解析:** - `ro.build.version.release`: Android 系统版本(如 13 对应 Android 13)[^1]。 - `ro.build.version.sdk`: 开发使用的 API 级别(如 33 对应 Android 13)。 - `ro.product.model`: 设备型号(如 Pixel 6)。 - `ro.build.date`: 系统编译时间。 --- #### 2. 解析 /proc/asound/cards 音频卡信息 `/proc/asound` 是 Linux ALSA(高级 Linux 声音架构)的虚拟文件系统目录,`cards` 文件记录了系统识别的声卡信息。 **步骤 1:进入设备 shell** ```bash $ adb shell ``` **步骤 2:查看声卡列表** ```bash $ cat /proc/asound/cards ``` 输出示例: ``` 0 [HDMI ]: HDA-Intel - HDA Intel HDMI HDA Intel HDMI at 0xefc30000 irq 16 1 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xefc28000 irq 17 ``` **字段解析:** - **声卡编号**(如 `0`、`1`): 系统分配的声卡 ID。 - **声卡名称**(如 `HDMI`、`PCH`): 声卡硬件标识。 - **驱动信息**(如 `HDA-Intel`): 声卡使用的驱动模块[^2]。 --- #### 3. 获取更详细的音频信息 可通过以下命令进一步分析: ```bash $ cat /proc/asound/devices # 查看所有音频设备节点 $ cat /proc/asound/pcm # 查看 PCM(脉冲编码调制)设备信息 ``` --- ### 相关问题 1. **如何修改 Android 设备的 ro.build 属性?** > ro.build 属性通常是只读的,需重新编译系统镜像或通过 Magisk 模块修改。 2. **如何调试 Android 声卡驱动?** > 需结合内核日志(`dmesg`)和 ALSA 工具(如 `aplay`、`arecord`)分析驱动注册和音频数据传输[^2]。 3. **`/proc/asound/cards` 未显示声卡可能是什么原因?** > 可能驱动未加载或硬件未正确识别,需检查内核配置或设备树(Device Tree)。 [^1]: 通过 ADB 获取设备信息是 Android 调试的通用方法,需确保 USB 调试已开启。 [^2]: 声卡驱动的注册流程涉及 `snd_card_new` 和芯片专用数据的初始化。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值