买了Android手机,经过了一天的尝鲜期之后,开始学习Android编程开发了。毕竟以后学院的《移动设备开发》这门课将由我来上。没办法,三十岁的老程序员又开始学习编程了。
记录一些学习笔记,持续更新中。
================================================================
Part 1 基础部分
Android分层:Hardware -> Linux Kernel -> Dalvik VM -> Android Libraries -> App
Dalvik不是标准java实现,增加了自有的指令,基于寄存器的虚拟机,很多代码来自Apache Harmony (这个和谐啊)
Android Libraries都以android namespace开头,包括view, app, util, widget, webkit等。
Android支持多任务,系统同时可以运行6个任务,超过6个将会被杀死,长按home按钮可以看到正在运行的6个任务。
Android每个任务都运行在独立的linux进程中,有独立的dalvik实例,并且有独立的用户ID。(这个太狠了,比.NET啥的都狠)不过也有办法让多个任务运行在同一个instance中,共享同一个 vm instance。
Android的设备不可能做到iphone一样只有一个按钮,至少要有home, back和context menu三个按键。
盈利模式:Android Market分成 + Google Service
Part 2 开发环境搭建
所需内容:JDK + eclipse + Android SDK + ADT(Google开发的Eclipse扩展插件)
编程语言:SDK支持java,NDK支持C/C++,另外开发还可以用Simple语言,类BASIC
Part 3 开发起步
一个由IDE生成的Android项目包括如下文件:
| .classpath // xml路径文件
| .project // xml项目文件
| AndroidManifest.xml // android程序配置文件
| default.properties // android的build system用的
+---.settings // 设置信息
+---assets // 目前暂时为空
+---bin // 编译生成的东西
| | classes.dex // delvik vm的可执行文件
| | HelloAndroid.apk // android的可执行文件
| | resources.ap_ // 资源文件
| \---com
| \---hezongjian // java编译生成的class
| MyActivity.class
| R.class
+---gen // R.java,类似于resource.h
| \---com // IDE自动管理,定义一些常量
| \---hezongjian
| R.java
|
+---res // 资源
| +---drawable-hdpi // 各种分辨率的资源
| +---drawable-ldpi
| +---drawable-mdpi
| +---layout // 界面UI布局
| | main.xml // 主界面布局xml文件
| \---values
| strings.xml // 字符串资源
\---src // 源代码目录
\---com
\---hezongjian
MyActivity.java // 主程序java文件
android程序UI采用流行的xml文件定义,例如main.xml,可以在xml中设定各个控件。
主java文件的内容
public class MyActivity extends Activity { // 从Activity继承一个自己的行动
public void onCreate(Bundle savedInstanceState) { // 重写onCreate
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 根据xml文件来设置view的内容
}
}
下面是增加messagebox的内容,方法是用android.widget.Toast中的方法。这个对话框过一会儿自己会消失,跟Windows上的不一样。
public boolean onTouchEvent(MotionEvent event) {
Toast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();
return super.onTouchEvent(event);
}
或者也可以这样:
AlertDialog.Builder alert = new AlertDialog.Builder(this)
alert.setTitle("Title");
alert.setMessage("Hello World");
alert.show();
用android.app下的AlertDialog来实现,不过AlertDialog功能比较强大,在这里是大炮打蚊子了。
Android应用程序由如下几个部分构成,但都不是必须的:
Android的task就是一个Activity的stack。一个task可以调用其他程序中的activity,然后放在自己的task stack里面,这样看起来其它任务就成了自己的一部分。这个设计比树形的windows tree要新颖多了。
这些部分需要由Intent来组合。Intent是一个非常抽象的东西。看了很多中文解释或翻译都不明白。而英文原版网页被GFW给Ban了。无奈FQ看developer.android.com上的东西,哎呀,再清楚明白不过了。估计需要文章再详细解释了。
附学习资源:
有一天我正在上网查资料,突然弹出来一个网页,很黄很暴力,我赶紧把它加入收藏夹了。这个被加入收藏夹的网站叫做:http://androidappdocs.appspot.com/index.html,显然是某人用谷歌的App Engine做的一个东西。但是有完整的Android文档映像,并且可以下载sdk,不用再FQ了,不错。
本来想写一篇关于Intent的文章,看了几篇国内中文文章和书籍,都云里雾里,结果看了英文介绍之后,突然发现啥都清楚了。就像重演了无数次的计算机文献杯具一样,E文能看懂,翻译过来用自己的母语就看不懂了。后来在不经意之间,发现了某人写的一篇文章:
Intent 解析
http://zhubin215130.javaeye.com/blog/614913
解释形象生动,十分传神。
后来又顺藤摸瓜,发现了一些系列文章,解释也非常到位,并且风趣幽默,通俗易懂,贴近网民生活,尤其是系列第一篇可以当小说看:
深入Android系列文章
http://www.cnblogs.com/duguguiyu/