`

识别你的手机 Android的属性系统

 
阅读更多

识别你的手机 Android的属性系统

来源:CSDN

网上有一篇文章介绍了Android的属性系统(http://blog.csdn.net/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函数代码如下:

view plaincopy to clipboardprint?

int __system_properties_init(void)

{

prop_area *pa;

int s, fd;

unsigned sz;

char *env;

if(__system_property_area__ != ((void*) &dummy_props)) {

return 0;

}

env = getenv("ANDROID_PROPERTY_WORKSPACE");

if (!env) {

return -1;

}

fd = atoi(env);

env = strchr(env, ',');

if (!env) {

return -1;

}

sz = atoi(env + 1);

pa = mmap(0, sz, PROT_READ, MAP_SHARED, fd, 0);

if(pa == MAP_FAILED) {

return -1;

}

if((pa->magic != PROP_AREA_MAGIC) || (pa->version != PROP_AREA_VERSION)) {

munmap(pa, sz);

return -1;

}

__system_property_area__ = pa;

return 0;

}

int __system_properties_init(void)

{

prop_area *pa;

int s, fd;

unsigned sz;

char *env;

if(__system_property_area__ != ((void*) &dummy_props)) {

return 0;

}

env = getenv("ANDROID_PROPERTY_WORKSPACE");

if (!env) {

return -1;

}

fd = atoi(env);

env = strchr(env, ',');

if (!env) {

return -1;

}

sz = atoi(env + 1);

pa = mmap(0, sz, PROT_READ, MAP_SHARED, fd, 0);

if(pa == MAP_FAILED) {

return -1;

}

if((pa->magic != PROP_AREA_MAGIC) || (pa->version != PROP_AREA_VERSION)) {

munmap(pa, sz);

return -1;

}

__system_property_area__ = pa;

return 0;

}

可以看到首先从环境变量里面获取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可以枚举所有的属性,下面是一段打印所有属性的代码。

view plaincopy to clipboardprint?

#include

#include

void print_prop(const char* key,const char* value,void* cookie)

{

printf("key=%s,value=%s/n",key,value);

}

int main()

{

property_list(print_prop,NULL);

}

#include

#include

void print_prop(const char* key,const char* value,void* cookie)

{

printf("key=%s,value=%s/n",key,value);

}

int main()

{

property_list(print_prop,NULL);

}

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

分享到:
评论

相关推荐

    Android高薪之路:Android程序员面试宝典 李宁

    1 1 5 Android只能在手机或其他移动设备上使用吗 1 2 Android的基本概念 1 2 1 Android的特点都有哪些 1 2 2 MVC模式 1 2 3 Android 的系统构架 1 3 开发Android应用程序 1 3 1 搭建Android开发环境 1 3 2 Android...

    android开发揭秘PDF

    1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和 配置 2.2.1 安装...

    《Android应用开发揭秘》附带光盘代码.

     1.1.2 Android的系统构架  1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android开发环境搭建  2.1 Android开发准备工作  2.2 开发包及其工具的安装和 ...

    Android应用开发揭秘pdf高清版

    《Android应用开发揭秘》内容全面,不仅详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发等基础知识,而且还深入阐述了传感器、语音识别、桌面组件开发、Android游戏...

    疯狂Android讲义源码

     第14章 管理Android手机桌面 525  14.1 管理手机桌面 526  14.1.1 删除桌面组件 526  14.1.2 添加桌面组件 526  14.2 改变手机壁纸 527  14.2.1 开发实时壁纸  (Live Wallpapers) 528  14.3 桌面快捷方式...

    《Android应用开发揭秘》源码

     1.1.2 Android的系统构架  1.1.3 Android应用程序框架  1.2 OMS介绍  1.2.1 OPhone介绍  1.2.2 Widget介绍  1.3 小结  第2章 Android开发环境搭建  2.1 Android开发准备工作  2.2 开发包及其工具的安装和...

    autodownload:根据同一个二维码识别当前系统(iOS或Android),替换对应的App应用市场或下载界面

    本文主要讲的就是如何在没有个人/公司网站的情况下,利用同一个二维码自动识别手机系统(Android / iOS)替换不同的下载页面。 二,解决方案 我们可以编写一个html网页,通过js识别内部终端属性,根据相应的终端属性...

    Android 4游戏编程入门经典

    第1章 android,后起之秀  1.1 android简介  1.2 版本分裂  1.3 谷歌的角色  1.3.1 android开源项目  1.3.2 android market  1.3.3 挑战赛、设备播种计划和谷歌i/o  1.4 android的功能和体系结构  1.4.1 ...

    疯狂Android讲义.part2

    第14章 管理Android手机桌面 525 14.1 管理手机桌面 526 14.1.1 删除桌面组件 526 14.1.2 添加桌面组件 526 14.2 改变手机壁纸 527 14.2.1 开发实时壁纸 (Live Wallpapers) 528 14.3 桌面快捷方式 532 14.3.1 在...

    疯狂Android讲义.part1

    第14章 管理Android手机桌面 525 14.1 管理手机桌面 526 14.1.1 删除桌面组件 526 14.1.2 添加桌面组件 526 14.2 改变手机壁纸 527 14.2.1 开发实时壁纸 (Live Wallpapers) 528 14.3 桌面快捷方式 532 14.3.1 在...

    启动力企业建站系统 v3.0

    强大的WAP手机功能启动力CMS拥有强大的WAP手机功能,采用自动识别终端技术,一键拔号、一键订单、移动地图、二维码扫描等功能、支持苹果iPhone、安卓Android、微软WP、PAD等主流移动终端。智能内容管理系统启动力...

    安卓手机硬件检测工具 AIDA64 1.72 中文多语免费版.zip

    – Android OS 和 Dalvik 属性 – SoC 和设备模型识别 –内存和存储利用率 – OpenGL ES GPU 详细信息,实时 GPU 时钟测量 – PCI,USB,CUDA,OpenCL 设备列表 –传感器轮询 –已安装的应用程序,编解码器和系统...

    android游戏编程入门

    android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1  1.1 Android简介 1  1.2 版本分裂 3 ...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--系统信息之获得手机sim卡序列号 |--缓存优化之几种方案lastModified |--缓存优化之本地缓存优化(超过规定值或SD卡容量不够时) |--网络post提交查询请求 |--网络之HttpClient的get和post用法 |--网络之判断网络...

    启动力企业建站系统 v3.0.zip

    启动力CMS拥有强大的WAP手机功能,采用自动识别终端技术,一键拔号、一键订单、移动地图、二维码扫描等功能、支持苹果iPhone、安卓Android、微软WP、PAD等主流移动终端。 智能内容管理系统 启动力拥有强大的内容...

    AIDA64 Premium 1.61.apk

    AIDA64 Premium Cracked APK为Android能够显示手机,平板电脑,智能手机和电视的各种诊断信息。基于Android的设备的硬件和软件信息实用程序。基于AIDA64 for Windows应用程序的广泛硬件知识。 AIDA64功能包括: - ...

Global site tag (gtag.js) - Google Analytics