1. Android App 想要实现什么
我觉得
Android = 独创设计(50%) + 简单开发(25%) + 强大API(25%)
- 独创设计: 手机应用已经非常纷繁芜杂复杂了。学习可以是模仿,成功还需要自己独创的设计
- 强大API: Android OS提供了大量的强大API,比如直接控制网络,电话,短信,GPS等。加上Google地图这类Mashup,可以实现很多强大功能。
- 简单开发: 开发的要求并不是很高。基本上开发效率和你了解Andorid Reference程度相等。之所以说是了解,意思是你知道Androdi SDK是否有这个功能就足够了,用到的时候参看Sample就可以很容易掌握。
所以,如果你想用小小的手机,解决一个生活中的现实问题,那Android非常适合你。 如果考虑作为一个系统的手机客户端,那么最好以离线+同步的方式来减少不必要的流量计费
2. Android UI设计
以下转自英文资料
2.1. 别做的
- 别把其他平台的外观直接放到Android
- 别滥用等待进度条和弹出对话框
- Layout不要使用绝对位置
- 像素单位不要使用px,而是要用dp(字体是sp)
- 不要使用小字体
2.2. 要做的
- 管理好复杂屏幕的图片等资源文件的版本
- 把按钮,选择框这些触发对象做得又大又明显
- 遵循 Android的icon做成规范
- 选择美观的外边距,内边距
- 支持轨迹球和其他输入控制
- 小心管理好各个窗口的迁移堆栈
- 处理好手持方向的变化(比如竖放,横放)
- 整理通用的风格,模版,颜色,以减少各个窗口自己管理的冗余
3. Android如何发布
Android的安装包是一种叫*.apk(Android Package)文件。程序最终都会以这种新式发布。
可以用直接提供用户*.apk下载,也可以通过Androdi商城发布,免费或收费的让用户自由下载。
商城发布没有研究过,也许需要Google审批。
4. Android如何运行
因为Android可以直接控制几乎所有的手机功能。所以*.apk必须明确需要哪些数据访问权限。在下载,安装的时候都回明确告知用户,“XXX数据将会被使用,你是否同意”云云,保护用户的手机不受恶意操作。
手机上安装后,只需要点击应用菜单的程序图标,程序就可以启动。
安装展开后的执行文件(*.dex文件)会在一个叫Dalvik的虚拟机上运行。和JVM的最大不同,它是基于寄存器的,设计得相对轻量。
dex文件没有使用java的class字节编码,是用自己特有的方式。
5. Android如何开发
5.1. 开发环境安装
网上有很多资料,因为目前开发平台只有Google提供的一款,所以内容都基本相同。大体上
- 下载Androdi SDK
可能是被河蟹的缘故。不能访问http://developer.android.com的时候后面加上.nyud.net/如http://developer.android.com.nyud.net/
- 下载Eclipse(带ADT Plugin)
- 设置Eclipse 榜定 SDK
- 使用ADT(直接SDK的也行,eclipse插件也行)在线更新最新的SDK(现在是2.2)
- 使用ADT建立一个模拟器实例
- helloWorld就可以几分钟搞定了
建议安装
- Eclipse如果没有SVN插件的话,事先装好
- 用到永久存储SQLite概率比较高。为方便编辑,装一个Firefox的 SQLite Manager的插件
因为使用了Java开发平台(转换成dex格式都是自动的,也没有深究,据说使用原始SDK,可以用C++编写直接代码),所以程序语言都很熟悉。
5.2. 基本术语
- Activity
- 通常就是一个屏幕
- Intent
- 一个对于操作动作的概念抽象。大到应用间的移动,广播,小到应用内的窗口 移动都需要Intent.不准确,但目前可以这样理解:一个操作需要当前activity以外的外部响应的时候,需要为这个外部响应创造一个泛 Intent的实例,之后把必要消息,参数传给这个外部实例,指派它去完成这个动作。
- Intent Filter
- 外部响应的过程,并不是由当前的Acitvity直接去指派某某去做。而是间接的告诉系统,我的这个任务是什么,请帮我指派符合要求响应。而系统正是通过各个响应的Inter Filter来确认,谁是最适合的。如果多个合适,就出一个选择让用户定夺。
- Service
- 顾名思义,就是后台服务。比如杀毒软件。通常他们也有Activity来做设置,启动操作什么的。一旦启动后,会长时间呆在后台运行。
- ContentProvider
- 可以通过ContentProvider把资源或者服务共享。与SQLite数据库存储方式不同,用ContentsProvider保存的data,通过统一的URI命名方式,可以让手机上其他的所有应用程序访问到。而数据操作的方式,非常类似SQLite的数据库操作。
5.3. 一个应用的资源包括
- 对应Android版本设置(default.properties)
- 不用自己写。
- 应用的配置描述文件(AndroidManifest.xml)
- 整体描述,管理整个应用。例如入口窗口是什么,都有哪些窗口,每个窗口的Java Class是什么。类似Struts的config。
- UI描述文件(res/layout/*.xml)
- 用来设置各个界面的Layout。基本类似一个HTML文件。如同Ajax操纵HTML的各个tag一样,需要为那些需要操作的项目编号(如:@+id/setitem_textview01)
- 一些CodeBook,Message类似的配置文件(res/values/*.xml)。
- 这些文件可以分类型定义。UI文件和Java程序都可以直接读取这些定义。
- 根据以上设置文件,会自动生成一个R.java(gen/package/)的文件。
- 简单的说,就是为每一种配置类型(例如刚才的ID编号,全局的 message定义等)建立一个inner Class。每个Class里面就是各个设置项目的Const定义。因为整个App就一个R.java,所以相同类型的项目就不要取一样的名字。同时既然 是自动生成,千万别手改的。
- 其他图片,flash等资源文件(res)
- 剩下的就是Java文件。
- Android应用的单位就是各个窗口,这个被称为activity(等同于其他语言的form)。所以有多少个不同的窗口,就有多少个activity。而每个窗口是事件驱动的。所以里面也就是些 OnCreate(),onActivityResult()等方法。其他的,例如共通程序,工具类,数据库操作等等,和普通的Java Class没有什么区别。
5.4. Activity的典型设计流程
- 窗口活动组成我们的应用。所以最开始必须确定哪一个是入口窗口(menu),哪些是主窗口,那些是附属窗口(类似popup窗口)。以及他们的迁移。
- 建立一个继承Activity的窗口类 FooActivity
- 建立一个相关的UI界面 Foo.xml (这个时候系统会自动更新R.java)
- 在应用中注册这个窗口 AndroidManifest.xml。
[sourcecode language=’xml’]
[/sourcecode]
如果是入口窗口,需要注明
[sourcecode language=’xml’]
[/sourcecode]
- 在FooAcitvity里面绑定view
[sourcecode language=’java’]
setContentView(R.layout.xxx);
[/sourcecode]
- OK,直接Run,在应用程序里面就有你的程序了。
- 接着是编写事件触发。首先通过R.java找到那个按钮对象
[sourcecode language=’java’]
Button addPayoutBtn = (Button) findViewById(R.id.setitem_add_btn);
[/sourcecode]
- 然后为这个按钮绑定监听
[sourcecode language=’java’]
Button addPayoutBtn = (Button) findViewById(R.id.setitem_add_btn);
addPayoutBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// event处理
}
});
[/sourcecode]
- 如果是迁移(启动下一个窗口)
[sourcecode language=’java’]
startActivity(new Intent(MainActivity.this, BookSearchActivity.class));
[/sourcecode]