android系统之属性系统详解

android系统之属性系统详解
android系统之属性系统详解

android系统之属性系统详解

1 属性系统概述 (2)

2 property数据的编译 (3)

2.1 /default.prop (3)

2.2 /system/build.prop (4)

2.3 其他属性文件 (8)

3 property的相关实现代码和流程 (9)

3.1 property服务端解析 (10)

3.1.1 Server端代码流程 (10)

3.1.1.1 init.c下的整体流程 (10)

3.1.1.2 创建共享内存区域 (10)

3.1.1.3加载根目录下的default.prop (15)

3.1.1.4加载其余4个属性文件的全部属性,并启动socket监听 (16)

3.1.1.5 property触发器执行函数加入队列 (18)

3.1.1.6 执行队列中的property任务 (19)

3.1.1.7 将property的监听socket加入待检查的socket数组 (20)

3.1.1.8 检查上层有哪些端口连接请求 (20)

3.1.1.9 property设置的响应 (20)

3.1.2 详解server端的property_set (25)

3.1.2.2 find_property (26)

3.1.2.3 prop数据二叉树存取解析 (29)

3.1.2.4 __system_property_update (30)

3.1.2.5 __system_property_add (30)

3.1.2.6 write_persistent_property (30)

3.1.2.7 property_changed (31)

3.2 property系统桥梁 (31)

3.2.1 __system_property_set (32)

3.2.2__system_property_set (33)

3.3 property客户端解析 (34)

3.3.1 客户端C层访问属性系统 (34)

3.3.2 客户端shell命令访问 (35)

3.3.3 客户端java层访问 (36)

4总结 (37)

附录一:《GCC的constructor》 (37)

1 属性系统概述

属性property系统是android的一个重要特性。它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。每个属性是一个键值对(key/value pair),其类型都是字符串。

从功能上看,属性与windows系统的注册表非常相似。

属性系统的架构如下图所示。

图中有3个进程、一组永久属性文件和一块共享内存区域。共享内存区域是所有属性记录的临时存储所在。

property service:

只有该进程才可以写入共享内存区域,它负责从永久文件中加载属性记录

并将它们保存在共享内存中。

property consumer:

该进程将共享内存加载到其自身的虚拟地址空间,并直接访问这些属性。

这并不是一个特定的进程,是加载属性的read操作库的客户端统称。

property setter:

该进程同样将共享内存加载到其自身的虚拟地址空间,但其不能直接写该内存。当setter试图增加或者更新一个属性时,它将该属性通过unix domain socket发送至property service服务进程。

注意:

后两者实际并不是一个特定的进程,是加载属性的get和set操作库的客户端进程统称。

下面以海思3798MV100平台(android4.4.2)为例来分析属性系统。

2 property数据的编译

属性文件的生成依赖于build/core/Makefile文件,该文件实际上主导所有文件的编译,我们这里主要看其中的属性文件的编译引导。

2.1 /default.prop

这是根目录下的属性文件,该属性文件的主要内容是adb控制相关的属性:

编译后该文件的输出:

1)\out\target\product\i3798MV100\root\default.prop

build/core/Makefile中对default.prop的编译引导如下:

TARGET_ROOT_OUT 就是\out\target\product\i3798MV100\root\,对应设备文件系统的根目录。

可见该属性文件的内容来自于build/tools/post_process_props.py,该py文件根据环境的设定,来设置相关的adb控制属性。

2) \out\target\product\i3798MV100\recovery\root\default.prop

recovery系统是boot启动后的另外一个程序分支,所以这里面也需要一个属性文件,build/core/Makefile中对default.prop拷贝了一份到recovery\root\下,

TARGET_RECOVERY_ROOT_OUT就是

\out\target\product\i3798MV100\recovery\root\

2.2 /system/build.prop

这是system分区下的属性文件,该文件收集的属性信息较多,也是打交道最多的属性文件。主要内容是常用的版本信息,平台信息,其他设备控制信息等:

编译后该文件放在\out\target\product\i3798MV100\system\build.prop,TARGET_OUT 就是\out\target\product\i3798MV100\system\,也就是system分区在设备文件系统下的对应目录。

build/core/Makefile中对build.prop的编译引导如下:

在build.prop的编译中,定义了BUILD_FINGERPRINT,BUILD_DISPLAY_ID等变量,都在build/tools/buildinfo.sh中被引用。

由上面的mk文件片段也可以看出build.prop的生成依赖于

1)引入BUILDINFO_SH的内容

数据来源:build/tools/buildinfo.sh

BUILDINFO_SH在本文件定义,为BUILDINFO_SH := build/tools/buildinfo.sh。

最后通过bash $(BUILDINFO_SH) > $@解析得到buildinfo.sh中的全部属性。

2)引入INTERNAL_BUILD_ID_MAKEFILE的内容

数据来源:/build/core/build_id.mk

INTERNAL_BUILD_ID_MAKEFILE在./build/core/version_defaults.mk中定义:

BUILD_SYSTEM在/build/core/main.mk中定义

所以INTERNAL_BUILD_ID_MAKEFILE就是/build/core/build_id.mk。

这里的作用仅仅是引入build_id.mk 中定义的BUILD_ID变量。

3)引入(BUILD_SYSTEM)/version_defaults.mk的内容

数据来源:/build/core/ version_defaults.mk

即/build/core/ version_defaults.mk,这里也主要是引入version_defaults.mk中的多个变量。

4)引入system_prop_file的内容

数据来源:实际不存在

system_prop_file是在build.prop生成的末尾阶段以下面的方式引入的

system_prop_file自身是在该Makefile文件中定义的,如下:

经find命令搜索,TARGET_SYSTEM_PROP没有找到定义,所以走下一条路径,而TARGET_DEVICE_DIR在/build/core/config.mk中定义:

这段代码的意思TARGET_DEVICE_DIR就是Boardconfig.mk文件所在的目录,那么就应该是/device/hisilicon/Hi3798MV100

(注:经过在Makefile中打印TARGET_DEVICE_DIR:

$(warning ******TARGET_DEVICE_DIR:$(TARGET_DEVICE_DIR)******),也确实是该目录

)。

所以这里就是要加载/device/hisilicon/Hi3798MV100下的system.prop,不过本平台在该目录下没有这个文件,所以system_prop_file的加载在这里是没有意义的

(注:经过在Makefile中打印TARGET_DEVICE_DIR:

$(foreach file,$(system_prop_file), \

warning ***********system_prop 1111 file:$(file)*************)

也确实打印不出任何目录)。

mr

5)引入ADDITIONAL_BUILD_PROPERTIES的内容

数据来源:\build\core\product_config.mk

\device\hisilicon\Hi3798MV100\下的customer.mk和device.mk

\build\core\main.mk:

ADDITIONAL_BUILD_PROPERTIES是在build.prop生成的最后阶段以下面的方式引入的

ADDITIONAL_BUILD_PROPERTIES这个变量自身是在该Makefile文件中定义的,如下:

ADDITIONAL_BUILD_PROPERTIES最主要的作用就是引入另一个变量

PRODUCT_PROPERTY_OVERRIDES,而这是在\build\core\product_config.mk中完成的:

ADDITIONAL_BUILD_PROPERTIES := \

$(ADDITIONAL_BUILD_PROPERTIES) \

$(PRODUCT_PROPERTY_OVERRIDES)

PRODUCT_PROPERTY_OVERRIDES的实际内容就很多了,它在

\device\hisilicon\Hi3798MV100\下的customer.mk和device.mk,

\build\core\main.mk等文件中都大量增加各种属性,也由此被引入到build.prop中。如\device\hisilicon\Hi3798MV100\下的customer.mk下:

2.3 其他属性文件

开机启动时,属性系统还要加载以下3个文件或目录,但是他们要么一般不使用(前2者),要么是运行时生成(后者)。

/*经验证,在3798MV100平台上并不存在*/

#define PROP_PATH_SYSTEM_DEFAULT "/system/default.prop"

#define PROP_PATH_LOCAL_OVERRIDE "/data/local.prop"

/*这是存储persist属性的目录,所有persist属性被各自写为文件存储在这里*/

#define PERSISTENT_PROPERTY_DIR "/data/property"

3 property的相关实现代码和流程

property service运行于init进程中。

init进程首先创建一个共享内存区域,该内存实际是一个虚拟文件,打开并保存其fd。init进程将该区域通过使用了MAP_SHARED标志的mmap映射至它自身的虚拟地址空间,这样,任何对于该区域的更新对于所有进程都是可见的。

fd和区域大小被存储在一个名为ANDROID_PROPERTY_WORKSPACE的变量中。任何其他进程,比如consumer和setter将使用这个变量来获得fd和尺寸,这样它们就能mmap这个区域到它们自身的虚拟地址空间中。

该共享内存区域如下图所示:

3.1 property服务端解析

3.1.1 Server端代码流程

3.1.1.1 init.c下的整体流程

代码路径:\system\core\init\init.c

整个属性系统的server端都运行在init进程中,在该文件的main函数中有简明扼要的流程线索,见下面代码截图的8个要点:

下面仔细分析这8个环节。

3.1.1.2 创建共享内存区域

经分析,实际该共享内存是通过共享文件+镜像内存看来实现的,只不过文件本身是虚拟设备文件,也活动在内存中,所以也可以理解为共享内存。

1)源头:

\system\core\init\init.c下的main函数:

2)进入\system\core\init\property_service.c:进入property_init

进入init_property_area

3)进入\bionic\libc\bionic\system_properties.c

进入函数map_prop_area_rw:

特别注意:

a、mmap实现镜像内存

将文件和内存进行映射,文件内容对内存是透明的,同时对该内存的操作也会同步修改文件内容。

b、内存共享是变相实现,是共享文件+镜像内存,并非真正的共享内存。

从上面可以看出,android属性系统的property_area本质上不是共享内存,而是共享文件,各进程只是创建了对该文件的内存镜像,且只有init进程(中的pro[erty_service)的镜像具备写入权限。(当然该文件也是内存中的虚拟文件,所以说是共享内存也说得过去,不过这是变相的,不是使用共享内存的相关API)。

4)进程间共享文件

从上面的分析可以看到:

a、这里共享内存是基于共享文件。

b、共享的文件是property_filename

\bionic\libc\include\sys\_system_properties.h下定义:

#define PROP_FILENAME "/dev/__properties__"

\bionic\libc\bionic\system_properties.c下定义:

static char property_filename[PATH_MAX] = PROP_FILENAME;

c、操作property的进程间需要共享/dev/__properties__

那么/dev/__properties__文件到底是怎么共享的就需要被搞清楚了。

d、gcc之__libc_prenit特性实现文件共享

Android利用了gcc编译中的constructor属性,这个属性指明了一个__libc_prenit 函数,当libc库被加载时,将自动调用这个__libc_prenit函数,android正是把

/dev/__properties__的共享加入到这个函数内部,并进一步完成该共享文件到本地进程的映射工作。

简而言之,哪个进程加载libc,就加入了property系统的共享文件+镜像内存机制。\bionic\libc\bionic\ libc_init_dynamic.cpp

\bionic\libc\bionic\libc_init_common.cpp

5)\bionic\libc\bionic\system_properties.c

map_prop_area和map_prop_area_rw就只有文件打开方式,文件映射镜像内存的方式等方面的区别了

关于GCC中的constructor详细描述,请参照附录一《GCC中的constructor属性》

6)返回\system\core\init\property_service.c:

继续看init_property_area函数流程,进入:

再看init_workspace:

这个地方其实就是创建init进程下操作该共享文件的句柄而已,并保存在pa_workspace.全局变量中。

3.1.1.3加载根目录下的default.prop

1)源头:

\system\core\init\init.c下的main函数:

2)进入\system\core\init\property_service.c

PROP_PATH_RAMDISK_DEFAULT 在\bionic\libc\include\sys\_system_properties.h 中定义:

#define PROP_PATH_RAMDISK_DEFAULT "/default.prop"

注意加载属性的最后一步是把解析出来的属性通过property_set直接设置到镜像内存中,该函数的具体分析我们放到后面。

3.1.1.4加载其余4个属性文件的全部属性,并启动socket监听

1)源头

\system\core\init\init.c下的main函数:

将property_service_init_action标记为property_service_init加入到执行队列,在后面的while中去执行

\bionic\libc\include\sys\_system_properties.h中定义:

#define PROP_PATH_SYSTEM_BUILD "/system/build.prop"

#define PROP_PATH_SYSTEM_DEFAULT "/system/default.prop"

#define PROP_PATH_LOCAL_OVERRIDE "/data/local.prop"

#define PERSISTENT_PROPERTY_DIR "/data/property"

下面接着看property_service_init_action到底做了些什么

2) \system\core\init\init.c下的property_service_init_action

3) 进入\system\core\init\property_service.c:

注意最后一个/data/property不是文件,是一个目录,下面每一个属性都存储为一个文件。

重点注意create_socket,这个函数要完成创建socket,绑定本地通讯端口等。

首先传入create_socket的PROP_SERVICE_NAME的定义:

\bionic\libc\include\sys\_system_properties.h中定义

#define PROP_SERVICE_NAME "property_service"

create_socket中用到的ANDROID_SOCKET_DIR的定义:

\system\core\include\cutils\ sockets.h

#define ANDROID_SOCKET_DIR "/dev/socket"

4)进入\system\core\init\ util.c

最终新创建的socket绑定到/dev/socket/ property_service文件,实际就是local socket 的进程通讯模式。

3.1.1.5 property触发器执行函数加入队列

将init.rc这里rc脚本文件解析出来的所有和property相关的触发器加入执行队列

1)源头:\system\core\init\init.c下的main函数:

2) \system\core\init\init.c下的queue_property_triggers_action

3) \system\core\init\init_parser.c中的queue_all_property_triggers

3.1.1.6 执行队列中的property任务

源头:\system\core\init\init.c下的main函数:

进入execute_one_command:

不断通过外部循环获取队列中的action来执行。

注意这里面有一个隐藏任务:

当execute_one_command执行的是请一个service进程的时候,这里面还顺带完成了将prop area内存区的pa_workspace注册到环境变量的工作,以便其他进程也可以读取该变量。

3.1.1.7 将property的监听socket加入待检查的socket数组

源头:\system\core\init\init.c下的main函数:

进入\system\core\init\property_service.c,这里get_property_set_fd返回的property_set_fd正是步骤3.1.1.4创建的监听socket。

3.1.1.8 检查上层有哪些端口连接请求

源头:\system\core\init\init.c下的main函数:

3.1.1.9 property设置的响应

1)源头:\system\core\init\init.c下的main函数:

Android是一种基于Linux的自由及开放源代码的操作系统

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。 中文名:安卓 外文名:Android 开发商:Google、开放手持设备联盟 发行商:Google 发行时间:2008年9月23日 编程语 言: C/C++(底层)Java等(应用 层) 系统家 族: 类Unix,Linux 源码模 式: 自由及开放源代码软件 内核类 型: 宏内核(Linux内核) 软件许 可: Apache License, GPL等 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。 Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发 表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。 Android的Logo是由Ascender公司设计的。其中的文字使用了Ascender公司专门制作的 称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜 色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌 象徵。有时候,它们还会使用纯文字的Logo。 2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统和iPhone等榜上有名。

Android系统架构详解

Android系统架构详解 Android系统架构由5部分组成, 分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。 1、Linux Kernel Android relies on Linux version 2.6 for core system services such as security, memory management, process management, network stack, and driver model. The kernel also acts as an abstraction layer between the hardware and the rest of the software stack. Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。 2、Android Runtime Android includes a set of core libraries that provides most of the functionality available in the core libraries of the Java programming language. Android包括一个核心库的集合,她们提供了Java编程语言的核心库中的绝大多数功能。 Every Android application runs in its own process, with its own instance of the Dalvik virtual

Android布局属性大全

Android布局属性大全 布局: AbsoluteLayout(绝对布局): xmlns:android="https://www.360docs.net/doc/62349704.html,/apk/res/android" style="@..." android:clipChildren="true|false" android:clipToPadding="true|false" android:layoutAnimation="@---" android:animationCache="true|false" android:persistentDrawingCache="none|animation|scrolling|all":持续高速缓存绘图 android:alwaysDrawnWithCache="true|false" android:andStatesFromChildre="true|false" android:descendantFocusability="beforeDescendants|afterDescendants|bl ocksDescendants":后裔可聚焦 android:id="@+id/absoluteLayout" android:tag="@---" android:android:scrollX="---" android:android:scrollY="---" android:background="@---" android:padding="----" android:paddingLeft="----" android:paddingTop="----" android:paddingRight="----" android:paddingBotton="---" android:focusable="true|false" android:focusableInTouchMode="true|false" android:visibility="visible|invisible|gone" android:fitsSystemWindows="true|false":适合系统窗口 android:scrollbars="none|horizontal|vertical" android:scrollbarStyle="insideOverlay(内覆盖)|insideInset(内插 图)|outsideOverlay(外覆盖)|outsideInset(外插图)" android:isScrollContainer="true|false":是一个滚动集合 android:fadeScrollbars="true|false":褪色的滚动条 android:scrollbarFadeDuration="---":卷轴淡出 android:scrollDefaultDelayBeforeFade="---":滚动前默认延迟 android:scrollbarSize="---" android:scrollbarThumbHorizontal="@----":拇指水平滚动条 android:scrollbarThumbVertical="@----":拇指垂直滚动条 android:scrollbarTrackVertical="@---":垂直滚动条轨道 android:scrollbarTrackHorizontal="@---":水平滚动条轨道 android:scrollbarAlwaysDrawHorizontalTrack="true|false":水平滚动条总是吸引轨道

基于Android系统的手机防火墙的设计与实现

摘要:来电防火墙主要基于黑白名单的电话和短信过滤功能,再结合数据库的使用,达到来电或者信息屏蔽黑名单的作用。黑名单连接到数据库,可以进行简单的添加、修改、删除等操作。来电或者收到信息之后,手机自动搜索黑名单,将来电号码与黑名单中的号码进行比较,如果有改号码在黑名单中,则手机直接将该电话或者短信屏蔽掉。此外还有基于GPS的手机防盗功能;电话录音和留言功能;隐私空间。系统的界面使用Photoshop的按钮控件、XML语言界面设计使操作更简单。系统使用SQLite数据库,Eclipse开发工具,Android SDK开发环境,利用Google Android API、java语言来实现。最后,对系统采用模拟器预览效果,并对系统进行了部署和真实的体验测试。 关键词:Android;智能手机;防火墙 中图分类号:TN929.53;TP393.08 目前随着移动设备越来越普及以及移动设备的硬件的提升,移动设备的功能越来越完善。移动设备的系统平台也日渐火热起来。3G时代的到来也是助推移动设备的火热发展的一个大因素。目前国内最常见的移动开发平台有Symbian,iPhone,Windows Phone以及当下正在逐步兴起的Android。目前为止国内已经有很多Android系统用户[1]。 1 需求分析 1.1 黑/白名单的电话和短信过滤功能分析 1.1.1 黑名单可选择模式 黑名单的有三种拦截模式:只拦截电话,只拦截短信,两者都拦截。在黑名单表中有姓名、电话、拦截模式等字段。实现原理:软件启动后有一个服务)service)在后台运行,在服务中注册有一个监听器,监听电话的状态,当有电话来时,状态会变成响铃状态,在这里可以取得来电的号码。这时遍历表中的黑名单,看是否有号码和来电号码匹配,如果匹配就是该拦截的号码,这里就把电话结束掉,并写入拦截表中,弹出通知告知有电话被拦截[2]。 短信的拦截和电话拦截不一样,有两种实现方法: (1)接收系统短信广播:当收到短信时,Android系统会发出一个广播,通知收到短信,拦截短信基于Android中的广播机制。Android中的广播机制是所有注册了该广播监听器的程序都收到广播(只要先收到广播的应用程序没有结束掉该广播),当收到广播就会触发收到广播的事件,可以在这里处理短信,本程序采用这种方法[3]。 优点:可以拦截来信在状态栏的显示通知,适合短信拦截。 缺点:可以发展成MU,在后台悄悄的收/发短信 (2)应用观察者模式,监听短信数据库,操作短信内容:当系统收到短信时,会将短信写入短信数据库,可以注册一个监听器来监听短信数据库的变化。当短信数据库变化时就触发这个事件,在这里可以处理短信。 优点:操作方便,适合简单的短信应用。 缺点:来信会在状态栏显示通知信息。 1.1.2 白名单拦截模式

Android系统架构简介

Android系统架构简介 Android系统架构简介 目前Android的Linuxkernel控制包括安全、存储器管理、进程管理、网络堆叠、驱动程序模型等。下载Android源码之前,先要 安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git 工作的一个工具。 应用程序 Android系统是基于Linux内核开发,使用Java作编程语言, 使界面到功能,都有层出不穷的变化,其中Activity等同于J2ME 的MIDlet,一个Activity类别负责创建视窗,一个活动中的 Activity就是在foreground(前景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和AIDL连结,达到 复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。 View等同于J2ME的Displayable,程序人员可以透过View类别与“XMLlayout”档将UI放置在视窗上,并可以利用View打造出所 谓的Widgets,其实Widget只是View的一种,所以可以使用xml 来设计layout。至于ViewGroup是各种layout的基础抽象类别,ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中获取View,Android的View类 的显示很大程度上是从XML中读取的。View与事件息息相关,两者 之间透过Listener结合在一起,每一个View都可以注册eventlistener,例如:当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于 J2ME的BitMap。 中介软件

Android之TextView属性大全

Android之TextView属性大全 发现TextView有一个比较大的问题,就是文字排版的问题,遇到数字,字母,符号等就会有问题,目前还没有什么解决方法。 android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。 android:bufferType指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符, 也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式. android:capitalize设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见EditView此属性说明。 android:cursorVisible设定光标为显示/隐藏,默认显示。 android:digits设置允许输入哪些字符。如“1234567890.+-*/% ()” android:drawableBottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。 android:drawableLeft在text的左边输出一个drawable 。 android:drawablePadding设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。 android:drawableRight在text的右边输出一个drawable。

基于Android系统的App界面设计

基于Android系统的App界面设计 智能手机时代的来临改变了大多数人的生活习惯,时至今日智能手机已经成为了人们工作生活中的一部分,在工作生活中发挥着重要的作用。App作为智能手机应用程序的核心,构建以用户体验为核心的页面设计是智能手机App设计的核心与要点,同时也是满足用户使用需求的重要途径与方式。现今的智能手机App主要分为IOS与Android两大市场,与IOS的封闭不同的是Android系统具有极强的开放性,而这一开放性在为Android系统App带来无限可能的同时也使得基于Android系统所开发的App界面本身缺乏统一的规范,从而造成基于Android系统所开发的App界面具有极大的开放性。新时期为做好基于Android 系统App的设计需要从情感、认知以及感官三个层面入手做好基于Android系统的App界面的开发设计,使之具有良好的用户使用体验。 标签:Android系统;App;界面设计 Abstract:The advent of the smart phone era has changed the habits of most people. Today,smart phone s have become a part of people’s work and life,and play an important role in the work and life. As the core of smart phone applications,App plays an important role in the work and life. The design of page based on user experience is the core and key point of the App design of smart phone,and it is also an important way and way to meet the needs of users. Today’s smartphone App is mainly divided into IOS and Android two major markets,Different from the closure of IOS,Android system has a very strong openness,and this openness not only brings infinite possibility to App of Android system,but also makes the App interface based on Android system lack of unified specification. As a result,the App interface based on Android system is very open. In order to do well the design of App based on Android system in the new period,it is necessary to develop and design the App interface based on Android system from the three aspects of emotion,cognition and sense organ,to make it have a good user experience. Keywords:Android system;App;interface design 前言 Android系统是与IOS系统所并行的应用于智能手机中的两大智能系统,在基于Android系统App界面开发的过程中受多种因素的影响使得一些App的界面具有很大的不协调性,从而影响了广大用户的使用体验。本文在分析影响智能手机App界面设计因素的基础上对如何做好基于Android系统的App界面设计进行分析阐述。 1 影响智能手机App界面设计的因素分析 智能手机App是智能手机的灵魂,用户结合自身需求可以下载安装自身所

Android操作系统发展史

Android操作系统发展史 今天我们来聊一聊Android系统的历史,首先我们就要先来说说Android系统这个名字的来历。Android这一词最先出现在法国作家利尔亚当在1886年发表的科幻小说《未来夏娃》中,作者将外表像人类的机器起名为Android,这也就是Android小人名字的由来。 知道了Android名字的来历我们再来看一下Android系统的来历。Android系统一开始并不是由谷歌研发出来的,Android系统原来的公司名字就叫做Android,谷歌公司在2005收购了这个仅成立22月的高科技企业。Android系统也开始由谷歌接手研发,Android 系统的负责人以及Android公司的CEO安迪·鲁宾成为谷歌公司的工程部副总裁,继续负责Android项目的研发工作。 在2007年11月5日这天,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成。这一联盟将支持谷歌发布的手机操作系统以及应用软件,将共同开发Android系统的开放源代码。 看完Android系统的发展简介,下面就让我们一起看看具体的Android系统版本的升级更新以及代表机型有哪些。 Android 1.0 代表机型T-Mobile G1 在2008年,在GoogleI/O大会上,谷歌提出了Android HAL架构图,在同年8月18号,Android获得了美国联邦通信委员会(FCC)的批准,在2008年9月,谷歌正式发布了Android 1.0系统,这也是Android系统最早的版本。 在2008年,在智能手机领域还是诺基亚的天下,Symbian系统在智能手机市场中占有绝对优势,在这种前提下,谷歌发布的Android 1.0系统并没有被外界看好,甚至言论称最多一年谷歌就会放弃Android系统。

Android体系结构

Android体系结构 android 平台大的方面的层次可以划分成三个层次,包括一个操作系统,中间件与应用程序,android 的系统框架图如下: 图中的软件层次自上而下分成4个层次 1. 应用程序(Application) 2. 用用程序框架(Application Framework) 3. 各种类库(Libraries)与android运行时(Adnorid Runtime) 4. 操作系统(OS) 一、应用程序(Application) 应用层就是与用户交互的一个层次,用户可以瞧得见的一些应用,用户可以操作。这类应用基本都就是通过Java语言编写的独立的能够完成某些功能的应用程序。Android本身提供了桌面(Home),联系人(Contacts),拨打电话(Phone),浏览器(Browers)等很多基本的应用程序。开发人员可以使用应用框架提供的API编写自己的应用程序,普通开发人员要做的事情就就是开应用层的程序提供该广大消费者使用。 二、应用程序框架(Application Framework) 普通开发者可以使用Android基本应用程序使用的系统API,android 应用框架中的各个模块都可以被复用,各种服务也可以被复用,理解了这个机制,开发人员可以更好的更轻松的开发出优秀的android应用。 开发过程中常用到的基本框架组件如下:

1. 一组View(UI 组件),这些UI组件包括Button(按钮),EidtView(文本框),TextView(标签),List(列表) 等等,灵活运用这些组件可以快速方便的创建良好的用户交互界面。 2. Content Providers(内容提供者),听起来有点抽象,通俗的理解Content Provider 就就是提供一种 服务,通过这种服务应用程序之间可以实现数据的互相访问与共享,比如通讯录的存储就使用了这种服务,其它应用也可以访问通讯录中存储的联系人信息。 3. Resource Manager 顾名思义就就是资源管理,android中的资源很多包括图片,用户界面(Layout xml),字体,颜色,UI组件的Id等等都可以称之为资源,这些丰富的资源,都就是通过Resource Manager来统一进行管理。 4. Notification Manager(消息通知管理),它在不影响用户正常操作与使用设备的时候在状态栏上提供 消息的提示。比如有短信来的时候,android自动会将这个消息提示在状态栏上,用户可以及时的瞧到。 5. Activity Manager(活动管理),Activity管理着应用程序的生命周期,并且控制着应用的导航,扮演控 制器的角色。每个Activity类似于Windows应用中的一个wendow。一般的应用都就是通过一个个Activity 交互构成的。 6. Window Manager(窗口管理),管理所有启动的窗口。 7. Location Manager(位置管理),用来管理地图服务的相关功能。 8. Telephoney Manager(电话管理),用来管理有关的电话的相关功能。 9. Package Manager(包管理),管理所有的安装在android系统内的应用程序。 三、库(Libraries)与运行环境(RunTime) 这部分内容开始涉及底层,开发普通的应用不会直接对这个层进行操作。这层中包含了一组类库(Libraries)与运行时(RunTime), 1. 系统C库(libc),一个从BSD集成来的标准C系统函数库(libc)它就是专门为基于嵌入式Linux的设 备定制的。 2. 媒体库(Media Framework),基于PackeVideo OpenCore,该库支持多种常用的音频,视频格式以及 回放与录制,同时支持静态图像文件。编码格式包括:MPEG4、H、264,MP3、AAC、AMR、JPG、PNG。 3. Surface Manager 对显示子系统的管理,并且为多个应用提供2D,3D图层的无缝融合。 4. WebKit,一个最新的web浏览器引擎,用来支持Andiroid浏览器或者嵌入的web视图。 5. SGL 底层的2D图形引擎。 6. OPENGL|ES,基于OpenGL ES 1、0 APIs实现,该库可以使用硬件3D加速或者使用高度优化的 3D软加速。 7. FreeType,位图(bitmap)与适量(vector)字图显示支持。 8. SQLite,一个对所有应用程序可用,功能强大的轻量级关系型数据库引擎。 9. Core Libraries 该核心库提供了Java编程语言核心库的大多数功能。 10. Dalvik VM, android平台的一个虚拟机,它相当于PC中Java的虚拟机JVM。 四、操作系统(OS) Android 的核心系统服务依赖于Linux 2、6 内核,操作系统为Android提供的服务包括: 1. 安全性(Security)。 2. 内存管理(Memory Management) 3. 进程管理(Process Management) 4. 网络堆栈(Network Stack) 5. 驱动程序模型(Driver Model)包含以下这些常规的驱动程序: (1)Display Driver (2)Keypad Driver

Android应用开发基础习题集

任务一 Android开发环境的搭建 第一部分知识回顾与思考 1.Android的四层架构分别包括哪几层分别起到什么作用 答:Linux内核层(Linux Kernel):基于Linux内核,内核为上层系统提供了系统服务。 系统库层(Libraries):系统库基于C/C++语言实现,通过接口向应用程序框架层提供编程接口。 应用框架层(Application Framework):为开发者提供了一系列的Java API,包括图形用户界面组件View、SQLite数据库相关的API、Service组件等。 应用程序层(Applications):包含了Android平台中各式各样的应用程序。 第二部分职业能力训练 一、单项选择题(下列答案中有一项是正确的,将正确答案填入括号内) 1.Android四层架构中,应用框架层使用的是什么语法( C ) A.C B.C++ C.Java D.Android 2.Android四层架构中,系统库层使用的是什么语法( B ) A.VB B.C /C++ C.Java D.Android 3.应用程序员编写的Android应用程序,主要是调用( B )提供的接口进行实现。 A.应用程序层 B.应用框架层 C.应用视图层 D.系统库层 二、填空题(请在括号内填空) 1.在Android智能终端中,有很多应用如拍照软件、联系人管理软件,它们都属于Android的(应用程序)层。 2.为了让程序员更加方便的运行调试程序,Android提供了(模拟器),可以方便的将程序运行其上,而不要实际的移动终端。 3.为了支持Java程序运行,我们需要安装(JDK)。 三、简答题 1.简述Android开发环境安装的步骤。 答:下载并安装JDK,配置JDK的环境变量; 从Anroid官网上下载Android开发组件(包含Eclipse和Android SDK、ADT); 安装Android开发环境(包括配置Android SDK的环境变量、打开Eclipse通过菜单设定Android SDK 路径)。 2.简述Android应用程序创建和运行的步骤。 答:通过菜单创建Android应用程序,设置应用程序名、Android版本等基本信息。

安卓操作系统简介

安卓操作系统简介 简言: Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb。 系统介绍: Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。 2010年末数据显示,仅正式推出两年的操作系统Android已经超越称霸十年的诺基亚(Nokia)Symbian OS系统,采用Android系统主要手机厂商包括宏达电子(HTC)、三星(SAMSUNG)、摩托罗拉(MOTOROLA)、LG、Sony Ericsson、魅族M9等,使之跃居全球最受欢迎的智能手机平台,Android系统不但应用于智能手机,也在平板电脑市场急速扩张。 系统架构: 应用程序: Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity 等同于J2ME的MIDlet,一个Activity 类(class)负责创建视窗(window),一个活动中的Activity就是在foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由ServiceConnection和AIDL连结,达到复数程序同时运行的效果。如果运行中的Activity 全部画面被其他Activity 取代时,该Activity 便被停止(stopped),甚至被系统清除(kill)。 View等同于J2ME的Displayable,程序人员可以通过View 类与“XML layout”档将UI放置在视窗上,Android 1.5的版本可以利用View 打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC 的Android Hero手机即含有大量的widget。至于ViewGroup 是各种layout 的基础抽象类(abstract class),ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity 中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。View 与事件(event)息息相关,两者之间通过Listener 结合在一起,每一个View都可以注册一个event listener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于J2ME的BitMap。 中介软件 操作系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机(Virtual Machine)。Bionic是Android 改良libc的版本。Android 同时包含了Webkit,所谓的Webkit 就是Apple Safari 浏览器背后的引擎。Surface flinger 是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自

android布局属性详解

RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 android:layout_alignParentLeft 贴紧父元素的左边缘 android:layout_alignParentRight 贴紧父元素的右边缘 android:layout_alignParentTop 贴紧父元素的上边缘 android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物 第二类:属性值必须为id的引用名“@id/id-name” android:layout_below 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左边 android:layout_toRightOf 在某元素的右边 android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐 android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐 android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐 android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐 第三类:属性值为具体的像素值,如30dip,40px android:layout_marginBottom 离某元素底边缘的距离 android:layout_marginLeft 离某元素左边缘的距离 android:layout_marginRight 离某元素右边缘的距离 android:layout_marginTop 离某元素上边缘的距离 EditText的android:hint 设置EditText为空时输入框内的提示信息。 android:gravity android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity="right"则button上面的文字靠右 android:layout_gravity android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在

(完整版)基于Android平台的管理系统设计与实现毕业设计

基于Android平台的管理系统设计与实现 院系:信息科学与工程学院 专业班:计算机科学与技术班 姓名: 学号: 指导教师:

201 年月

基于Android平台的 管理系统设计与实现Design and Implementation of Online Management System Based on the Android Platform

摘要 基于Android平台的网上超市管理系统是结合当前最流行的移动平台开发的电子商务系统。本系统是PC端电商网站在Android平台的延伸,除了传统电商网站能够实现的各项基本功能之外还具有使用简单,操作方便等优点。利用本系统可以为超市的销售提供新的渠道。 本系统的开发运用了基于Java的Android SDK技术,系统采用C/S (客户端/服务器)结构实现。开发所采用的IDE为MyEclipse 10并安装由Google提供的Android Developer Tools。系统运行环境为Android版本4.0以上的移动设备。 本系统在电商网站的基础上完成了移动平台功能的设计,使用户能够在手机上方便的进行传统电商网站上所能完成的大部分操作。本系统的优点在于能够充分利用都市人群上下班途中、排队闲暇等碎片时间,提供方便快捷的购物方式,因此能够极大的抓住用户的依赖程度,提高超市自身品牌影响力,扩张超市营业范围,提高商品销售收入。 关键词:Android 移动设备网上超市

Abstract This e-commerce system named Online Market Management System is based on the most popular mobile platform - Android platform. This system is an extension of PC e-commerce website on the Android platform. Except functions that normal e-commerce system can realize, this system also has many advantages like easily use and convenient. Using this system has provided a brand new way for market sales. The development of this system has using the Android SDK based on Java technology, and achieve by C/S (Client/Server) structure. The IDE used for development is MyEclipse 10 which has installed Android Developer Tools provided by Google. This system need a mobile device that Android version is higher than 4.0 for running. This system has completed the function of the mobile platform based on e-commerce sites, and allow user finish most functions which can be done at normal e-commerce sites. This system can make full use of pieces of time which like the way go to work and the way home, or when you get in a line waiting for something, to provide a fast convenient way to shopping. These advantages can seize the users' dependence, improve the influence, expansion the scope of the business and increase sales revenue. Key words:Android mobile device Online Market

Android开发-UI属性

android:fadingEdgeLength 设置淡入淡出边缘的长度,可以接受大小值的单位是:px、dp、sp、in、mm,也可以参考大小值资源 android:fitsSystemWindows 是否适合系统窗体,取值为true或false。该属性只对不是子组件的组件有效 android:focusable 是否可以获取焦点,取值true或false android:focusableInTouchMode 是否可以在触摸模式下获取焦点,true或false android:hapticFeedbackEnabled 是否允许触摸反馈效果,true或false android:id 提供该组件的标识名,可以借助Activity或View实例的findViewById方法通过id获取对应的组件实例对象,其属性值的形式为:android:id=”@+id/id” android:isScrollContainer 设置该组件是否设置为滚动条容器,true或false android:keepScreenOn 控制该组件在显示的时候保持在屏幕显示,true或false android:longClickable 是否响应长时间点击事件,true或false android:minHeight 组件的最小高度,取值同android:fadingEdgeLength android:minWidth 组件的最小宽度,取值同android:fadingEdgeLength android:nextFocusDown 设置下一个向下获取焦点的组件,取值为id android:nextFocusLeft 设置下一个向左获取焦点的组件,取值为id android:nextFocusRight 设置下一个向右获取焦点的组件,取值为id android:nextFocusUp 设置下一个向上获取焦点的组件,取值为id android:padding 设置上、下、左、右4个边缘的填充距离,必须是一个大小值,取值同android:fadingEdgeLength android:paddingBottom 设置下端边缘的填充距离,取值同android:padding android:paddingLeft 设置左端边缘的填充距离,取值同android:padding android:paddingRight 设置右端边缘的填充距离,取值同android:padding android:paddingTop 设置上端边缘的填充距离,取值同android:padding android:saveEnabled 是否允许保存状态,取值为true或false android:scrollX 设置垂直滚动条的位移量,必须是一个大小值,取值同android:padding android:scrollY 设置水平滚动条的位移量,必须是一个大小值,取值同android:padding android:scrollbarAlwaysDrawHorizontalTrack 是否总是设置水平滚动条滑块,true或false android:scrollbarAlwaysDrawVerticalTrack 是否总是设置垂直滚动条滑块,true或false android:scrollbarSize 设置垂直滚动条的宽度和水平滚动条的长度,必须是一个大小值,取值同android:padding android:scrollbarStyle 设置滚动条的样式,取值为下列之一:insideOverlay在填充区域内,覆盖形式insideInset在填充区域内,插进形式(凹进)outsideOverly在绑定组件边缘,覆盖形式outsideInset在绑定组件边缘,插进形似 android:scrollbarThumbHorizontal 设置水平滚动条按钮的绘制资源,必须引用可绘制资源 android:scrollbarThumbVertical 设置垂直滚动条按钮的绘制资源,必须引用可绘制资源

相关文档
最新文档