framework 相关

买了Android手机,经过了一天的尝鲜期之后,开始学习Android编程开发了。毕竟以后学院的《移动设备开发》这门课将由我来上。没办法,三十岁的老程序员又开始学习编程了。

记录一些学习笔记,持续更新中。

================================================================

Part 1 基础部分

Android分层:Hardware -> Linux Kernel -> Dalvik VM -> Android Libraries -> App

Dalvik不是标准java实现,增加了自有的指令,基于寄存器的虚拟机,很多代码来自Apache Harmony (这个和谐啊)

  • 单个可执行文件:.class -> .dex的文件。
  • 打包后的文件:.jar -> .apk

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应用程序由如下几个部分构成,但都不是必须的:

  • Activity: 就是一个window,当然和window不一样。
  • Broadcast Receiver:就是接受系统广播的东西
  • Content Provider:向其他程序提供数据,例如你是一个杀毒软件,你要向其它程序提供当前系统安全级别
  • Service: 就是一个service。

Android的task就是一个Activity的stack。一个task可以调用其他程序中的activity,然后放在自己的task stack里面,这样看起来其它任务就成了自己的一部分。这个设计比树形的windows tree要新颖多了。

这些部分需要由Intent来组合。Intent是一个非常抽象的东西。看了很多中文解释或翻译都不明白。而英文原版网页被GFW给Ban了。无奈翻墙看developer.android.com上的东西,哎呀,再清楚明白不过了。估计需要文章再详细解释了。

 

附学习资源:

有一天我正在上网查资料,突然弹出来一个网页,很黄很暴力,我赶紧把它加入收藏夹了。这个被加入收藏夹的网站叫做:http://androidappdocs.appspot.com/index.html,显然是某人用谷歌的App Engine做的一个东西。但是有完整的Android文档映像,并且可以下载sdk,不用再翻墙了,不错。

本来想写一篇关于Intent的文章,看了几篇国内中文文章和书籍,都云里雾里,结果看了英文介绍之后,突然发现啥都清楚了。就像重演了无数次的计算机文献杯具一样,E文能看懂,翻译过来用自己的母语就看不懂了。后来在不经意之间,发现了某人写的一篇文章:

Intent 解析

http://zhubin215130.javaeye.com/blog/614913

解释形象生动,十分传神。

 

后来又顺藤摸瓜,发现了一些系列文章,解释也非常到位,并且风趣幽默,通俗易懂,贴近网民生活,尤其是系列第一篇可以当小说看:

深入Android系列文章

http://www.cnblogs.com/duguguiyu/






framework的开发比应用层就要烦的多啦。做应用在eclipse中就足够了,用android系统中的控件等工具,或者是自己写个类来实现特定的功能。而framework层的开发,需要往源码中添加代码、xml、图片、id等等数据,这个id可是费了我好大的劲才搞定的。在项目开始的一个半月里,我探索、尝试了很多,现在把我的经验分享出来。网上关于framework层的开发信息很少,多是靠自己。
  最有效的方式就是分析android的源码,看google是怎样实现一个类的,以及类的层次。我现在看的主要是widget和app中的代码,其他的还没涉及。像View,ViewGroup,Activity,ActivityThread都是非常重要的类,也是代码量很大的类,我只是大概地过了下,还没有仔细分析过。
  我花大力气的地方是资源文件夹下values中几个文件的作用。
  attrs.xml中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context, attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。
  styles.xml中是各个控件的“样式”,样式由一个个属性所组成。我们在编辑xml文件的时候,不同的类所能设置的属性有共同的,也有不同的,都是由样式来控制的。具体可以去看styles.xml这个文件的内容。
  themes.xml其实也是样式,只是适用的范围大一点,这个我是参考网上别人的看法,自己还没研究过。
  ids.xml是公共的id,也就是对应用层可见的id,id是为了获得xml中的对象而需要的参数,也就是Object = findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到
  public.xml描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。
  当我们对public.xml做了改动后,执行make update-api命令,相应的current.xml就会添加这些改动。因为这些值按类型被放在不同的段上,类型相同的必须连续存放,不指定id值的话系统会自动计算出下一个值。
  添加id的方法:1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。
  2)在ids.xml中添加公共id项,每一项前面加一行的注释,这样就不用在public.xml中添加相应的项了。源码中是/** @hide  */的形式,这样current中就不会有相应的段了。
  3)在自己写的xml中,使用android:id = "@+id/id_name"的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值