Android 应用开发系列(一)简介
Google 在 2007 年 11 月推出了手机操作系统 Android,显然 Google 预见到了手机及便携性终端设备在未来的互联网中将扮演极其重要的角色。借助开放源代码的优势,Android 已经逐渐形成了以 Google 为首,包括软、硬件、服务和运营商在内的强大手机联盟,这个联盟所形成的良好氛围,已经使得 Android 受到越来越多的关注,且市占率快速攀升。个人认为,Android为代表的开放联盟,必将战胜以 Apple iPhone 为代表的封闭联盟。
Android 架构
Android 被划分为多层,自上而下分别是:应用程序层,应用框架层,库,Android 运行时,和系统最底层的 Linux kernel。下图是 Android 操作系统的主要组件。
1. 应用程序
Android 带有一系列核心应用程序,包括email客户端,SMS短消息,日历,地图,浏览器,联系人,等等。所有的应用程序都是用JAVA编写的。
2. Android 应用程序框架
通过提供开发平台,Android 让开发者有能力创建表现非常丰富和非常具有创新的应用程序。开发人员可以利用设备硬件,访问位置信息,运行后台服务,设置警报,添加通知到状态栏,等等,很多很多。
开发人员可以完全访问与核心应用程序所使用的同样的 API 框架。Android 所设计的应用程序架构可简化对组件重用;任何应用程序都可以发布它的功能且任何其它应用程序随后都可以使用这些功能(不过得遵循框架的安全约束)。该机制允许组件被用户替换。
下面的所有应用程序都是一系列的服务和系统,包括:
- 一组表现丰富且可扩展的、用来创建程序的视图(Views),包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至是内嵌的 web 浏览器。
- 内容提供者(Content Providers),可使程序访问来自其它程序的数据,或者分享它自己拥有的数据。
- 一个资源管理器(Resource Manager), 提供对非代码资源的访问,如本地化字符串,图形,布局文件。
- 一个通知管理器(Notification Manager),使所有应用程序都可以在状态栏上显示自定义的通知。
- 一个活动管理器(Activity Manager),管理程序生命周期,提供常用的导航回退功能。
有关更多的细节和怎样一步步编写应用程序,请参考 Notepad Tutorial。
3. 库
Android 包括一组被 Android 系统的各种不同组件所使用的 C/C++ 库。这些库通过 Android 应用程序框架提供给开发者。部分核心库如下:
- System C library – 一个源自 BSD 的标准 C 系统库的实现,为嵌入式 Linux 设备做了优化。
- Media Libraries – 基于 PacketVideo’s OpenCORE;该库支持回放和对许多流行音频、视频格式的录制,也支持静态文件,包括 MPEG4,H.264,MP3,AAC,AMR,JPG,和 PNG。
- Surface Manager – 管理对显示子系统的访问,和对来自多个程序的 2D 和 3D 图层的无缝合成。
- LibWebCore – 一个现代化的 web 浏览器引擎,Android 浏览器和内嵌 web 视图就是由它驱动的。
- SGL – 底层 2D 图形引擎。
- 3D libraries – 一个基于 OpenGL ES 1.0 APIs 的实现;该库可使用硬件 3D 加速(where available)或者它所包含的、经高度优化的 3D 软件光栅化(3D software rasterizer)。
- FreeType – 位图(bitmap)和向量(vector)字体渲染。
- SQLite – 一个强大且轻量级的关系数据库引擎。
4. Android 运行时
Android 包括了一组核心库,这些核心库提供了JAVA编程语言核心库的大多数功能。
每个 Android 程序都运行在自己的进程之中,带有它自己的 Dalvik virtual machine 实例。Dalvik 使得一个设备能够高效运行多个 VMs。Dalvik VM 执行 (.dex) 格式的文件, 这种格式的文件经过优化,可使内存占用尽可能少。VM 是基于寄存器的,运行由 Java 语言编译器编译并由 “dx” 工具转化为 .dex 格式的类。
Dalvik VM 依赖 Linux kernel 的一些底层功能,例如线程和低级别的内存管理。
5. Linux Kernel
Android 依赖于 Linux version 2.6 的核心系统服务,例如安全,内存管理,进程管理,网络栈,和驱动模型。Kernel 也扮演硬件和余下的软件堆栈之间的抽象层的角色。
参考资源:
Categorized in: Mobile · Tagged with: Android, google
Install Java ME SDK 3.0
在安装完 Java ME SDK 3.0,并试图启动,总是提示 connection refused,这就是 windows 防火墙在搞鬼,阻挡了对特定端口的访问。
把 Java ME SDK Device Manager 加到防火墙的允许名单内,就可以顺利启动 Java ME SDK。
Categorized in: Java · Tagged with: Java, JavaME
Dock any applications into system tray area in ubuntu
alltray 能够让任意程序最小化到system tray。
安装也很简单:sudo apt-get install alltray
使用就更简单了,启动alltray后,按照alltray的提示,点击要minimize的程序即可
Categorized in: Operation Systems · Tagged with: Linux, Ubuntu
Downgrade in Ubuntu
有时安装了一些高版本的软件,却又后悔,想回到低版本。其实这个降级过程是比较麻烦的,不过还好,总还是有办法的。
首先,查出安装过的版本号,以firefox为例:apt-cache show firefox,记住你要安装的某个低版本(version)
接着,咱们正式降级:sudo apt-get install firefox=<低版本号>
还以firefox为例,它会引用其它好几个package,所以这些引用到的package也要一并降级。
如我今天将 firefox 从 3.62be 降级到 3.6 :sudo apt-get install firefox=3.5.7+nobinonly-0ubuntu0.9.10.1 firefox-3.5-branding=3.5.7+nobinonly-0ubuntu0.9.10.1 firefox-3.5=3.5.7+nobinonly-0ubuntu0.9.10.1
Categorized in: Uncategorized · Tagged with: Firefox
Differences between WADL and WSDL 2.0 HTTP binding
本文翻译自《Definition Languages for RESTful Web Services: WADL vs. WSDL 2.0》的一部分
先对如下两个名词做一些解释:
WADL:Web Application Description Language
WSDL 2.0:Web Services Description Language
以下翻译取自该文最关键的部分,即两者之间的不同点:
尽管 WADL 和 WSDL 2.0 HTTP binding 在某种程度上非常类似,但它们还是有一些不同点。
Resources vs. Interfaces
WADL 是以资源为中心的描述语言。WADL 文档是由一组资源描述组成。与之相反,WSDL 是以接口为中心的描述语言。.
WSDL 2.0 描述是由一组接口定义构成,这些接口定义则是由操作定义构成。
在 WADL 里,甚至即使是一个复杂的商业应用也被描述为对资源的基本操作。
仅支持 HTTP vs. 独立于传输协议
WADL 只支持对使用 HTTP 协议的 web 应用进行描述。
因为限定于 HTTP,WADL 要比 WSDL 2.0 更简单,后者设计目标是具有能够使用任何协议来描述服务接口的能力。
消息交换模型(模式)
一些人认为 HTTP 所隐含的唯一消息交换模式只是 request-response (in-out)。尽管事实上 HTTP 天生是 request-response,但它也能用于 one-way 和 solicit-response 消息交换模式。注意,HTTP GET verb 本质上就是 solicit-response,在这个意义上 GET 请求消息只包含资源标识符,用于接收资源表述。HTTP PUT 和 DELETE 事实上就是 one-way 操作,该操作的响应包含的是一个简单的状态消息(200 OK, 404 Not Found, etc.). WSDL 2.0 定义了很多消息交换模式,例如 one-way (in-only) 和通知 (out-only),还有 request-response。尽管 WSDL 2.0 规范没有指定这样的绑定,但一些传输协议,如 SMTP 和 Message Queuing,本身就支持 one-way 和 notification。期待这些绑定规范将 WSDL 定义的消息交换模式映射到这些协议上。WSDL 2.0 规范的 HTTP 绑定扩展章节详细描述了如何利用 HTTP (状态码为 202 Accepted) 响应消息实现一个 one-way 消息交换模式。同时,基于 HTTP 的通知消息交换模式或许会使用类 comet 技术来实现。 不像 WSDL 2.0 那样谋求传输中立,WADL 只用于描述 HTTP-based web applications。因此,它的消息交换模式 (尽管 WADL 不会定义或使用这样的术语) 会更容易得到 HTTP 的支持。
无状态 vs. 有状态
尽管 REST 架构风格要求是无状态的,仍有人对术语“无状态”(stateless)是什么意思感到迷惑。
REST 环境中的资源,它的内部和它本身并不是无状态的。REST 的无状态与 URI 标识的资源之间的交互使用的协议有关。这意味着所有对满足一个请求所必需的信息都要在请求消息中携带。
资源本身(经常) 天生就是有状态的。一个银行账户余额资源显然是有状态的。我们可以给这个资源指定一个 URI。对该资源 URI 执行 HTTP GET 会随着时间的推移返回不同值,反映出因账户余额增加和减少导致的该资源的状态变化。
然而,如果 GET 是真正无状态的 (e.g. 不滥用 cookie),那么任何用户对该资源 URI 进行任何 HTTP get 操作,都总是返回该资源且只是该资源的一个表述。协议交互的无状态使得 REST 架构风格的缓存特性可用。缓存代理可以介于客户端和服务器之间,缓存 HTTP GET 的响应,随后将这个资源的缓存版本作为响应返回给其它 HTTP GET,只要初始服务器已经在初始响应消息里指定了恰当的 cache pragmas,指明何时缓存应当失效,等等。
从 RESTful 角度来看,HTTP 协议有一方面容易被滥用,因而违反了 REST 架构风格中的无状态约束:HTTP cookies. Roy Fielding,REST 论文作者,曾称 HTTP cookies 应该废弃,他说过如果让他再次设计,他不会把它们引入到 HTTP 协议中。尽管 cookies 可以按 RESTful 方式使用,但它们经常被滥用(从 REST 观点) 作关联会话状态(没有这种会话状态交互变得无意义)的一个途径。
举个例子,如果一个 cookie 被用来与某些会话状态相关联,如用户的邮编(随后会用于定义对天气服务的搜索),当使用不同邮编的其他人使用 HTTP GET 访问该资源 URI,URI 必然不会标识相同的资源 (用户邮编区域的当前天气)。在这种情形下,RESTful 对 cookie 的用法可能是用于追踪用户的交互,而使用 cookie 将请求与一些预先建立的会话状态进行关联显然是非 RESTful 的。
尽管 WADL 规范不要求 web 应用 (或与 WADL 所描述的资源的交互) 无状态,规范也没有提供任何 HTTP 的状态特性,例如 cookies。与之相反,WSDL 2.0 HTTP binding 特别提供了对 HTTP cookies 的用法和描述(See, WSDL 2.0 Part 2 Section 6.10).
认证
典型情况下, HTTP 认证会被自动处理,因为 HTTP 协议提供了当服务器在客户端没有为请求提供所要求 credentials 时而返回的标准的状态响应。客户端可以利用这些状态响应(e.g. 401 Unauthorized)触发对 credentials 的收集。
WSDL 2.0 支持 HTTP 认证,而 WADL 不支持。
URL 编码数据
许多 web 应用程序利用 URL 编码数据 (media type: “application/xwww-form-urlencoded”) 作为对资源基于参数化标准构建 URI 的途径,例如从一个 web form 中收集到的信息。
当前,尽管有许多用于定义一个 URI 模板语言的提案,但其中存在一些用于描述 URL 编码数据的不标准语言。
URI template
WADL 和 WSDL 2.0 HTTP binding 使用 URI 模板形式指定查询字符串参数。WADL 引用一个名叫 “URI template” 的草案(该草案作者同时也是 WADL 作者)。与之相反,WSDL 2.0 在 WSDL 2.0 HTTP binding 扩展规范中独自定义了一个 URI 模板。
Percent encoding in URL encoded data
WADL 没有提及 URL 编码数据的字符编码。WSDL 2.0 HTTP binding 明确说明怎样处理非 ASCII 字符。
用于描述消息内容的模式语言
WADL 和 WSDL 都提供了一种途径,通过这种途径,可以使用 schema 语言来描述要交换消息的内容。
WADL 更提供了包含 W3C XML Schema 和 RelaxNG [18] schema 文档的能力。
WSDL 2.0 只说明在描述中如何包含 W3C XML Schema 文档。
结论
每种规范都有其优缺点。WADL 简单,适用范围有限。WADL 局限于描述 HTTP 应用,不解决诸如安全等特性。与之相对,WSDL HTTP Binding 特性丰富,但复杂性随之增加,且仍缺乏对真正的以资源为中心的模型支持。
Categorized in: SOA · Tagged with: SOA, WSDL
Mockups For Desktop
这个工具可以用来模拟创建界面,非开源,但也有免费版,只是功能要少一些。

Categorized in: Java
应该使用 char[] 保存 Java 密码
以下内容引用《Java安全性, 第一部分: 密码学基础》:
存储/删除密码。如果密码是存储在 Java String 对象中的,则直到对它进行垃圾收集或进程终止之前,密码会一直驻留在内存中。即使进行了垃圾收集,它仍会存在于空闲内存堆中,直到重用该内存空间为止。密码 String 在内存中驻留得越久,遭到窃听的危险性就越大。
更糟的是,如果实际内存减少,则操作系统会将这个密码 String 换页调度到磁盘的交换空间,因此容易遭受磁盘块窃听攻击。
为了将这种泄密的可能性降至最低(但不是消除),您应该将密码存储在 char 数组中,并在使用后对其置零。(String 是不可变的,所以无法对其置零。)
.
Categorized in: Java · Tagged with: Java
本博客终于又重新启用了
网络审查越来越严格,本博客虽不涉及时事、政治等敏感话题,亦遭受停机之不幸。
为免再次遭受此等不幸,本博客特声明如下:
- 坚决拥护党的领导,紧密团结在以胡锦涛同志为总书记的党中央周围
- 不谈政治,不谈时事,不谈社会话题
3. 本博只谈技术,只为混口饭吃
敬请广大网警和五毛们监督!


(
(4.00 out of 5)