Android系统架构

       简略地说,Android体系可以分为四层架构,五块区域。

           

      接下来,讲解下这四块区域的分工。附带,我们以一款Flappy Bird的游戏例子,来简单说明下各层工作。

 

1.  Linux内核层

      Android系统是基于Linux内核的,不同版本的Android基于的Linux版本也不同。因而,会发现Bash指令有些在低版本的Android系统控制台找不到,这是因为Linux内核版本不够高。

      

     Linux内核层主要负责为Android设备的硬件提供底层驱动,让硬件设备能够成功挂载识别。常用的如显示驱动、音频驱动、蓝牙驱动、照相机驱动等等。

     Flappy Bird用到显示、音乐、Wifi都对应了相应的底层PCB硬件(颗粒电子屏,喇叭,网卡),这些需要被Linux内核层识别出device Id才能够正常访问使用。而相应驱动程序就完成了这些硬件设备的挂载使用。

 

2. 系统运行库层

     这一层主要分为静态库和运行库两块区域。

     静态库通过C/C++库为Android系统提供主要的特性支持。例如,SQLite库提供数据库支持,OpenGL/ES库提供3D绘图支持,WebKit库提供浏览器内核支持。

      Android运行时库,包含了Dalvik虚拟机(不是传统Java用的Hotspot虚拟机),提供了一些核心库。相较于传统Java虚拟机,Dalvik虚拟机是专为移动设备定制的Java虚拟机,针对手机内存、CPU性能有限的情况做了优化处理。

     无可避免的是,光写驱动并不能关联Flappy Bird游戏和硬件设备。比如音频,我们要用到AudioTrack,我们要有相应读写操作,完成这个关联。

... ...

 private native final void native_finalize();
 public native final void native_release();

 private native final void native_start();

 private native final void native_stop();

 private native final void native_pause();

 private native final void native_flush();

 private native final int native_write_byte(byte[] audioData, int offsetInBytes, int sizeInBytes, int format, boolean isBlocking);

 private native final int native_write_short(short[] audioData, int offsetInShorts, int sizeInShorts, int format, boolean isBlocking);

 private native final int native_write_float(float[] audioData, int offsetInFloats, int sizeInFloats, int format, boolean isBlocking);

       毫无疑问,一方面这些函数都要靠C/C++实现,构成了Android运行库。在写这些函数时难免会有:

#include <iostream>
using namespace std;

inline int call( ){
    static int ctr =1;
    return ctr++;    
}

int main(){
    for(int i=0; i<500; i++)
        cout<<call()<<" "<<endl;
}

      iostream就是该层用到的静态库。

 

3. 应用框架层

        这一层,我们也叫Framework层,提供了构建移动应用用到的API。Android应用开发就是负责使用这些API来构建自己的应用程序。

        Flappy Bird用到的AudioTrack肯定不关心C/C++实现,Framework层隐去了运行库实现。看到的都是正常的Java API,但Java API 内部调用的还是C/C++写的native方法。比如startImpl( )这个Java方法,本质上还是调用C/C++写就的native_start( )。

... ...

public void play( ){

    final int delay = getStartDelayMS( );               //AudioTrack继承父类计算播放时延方法

    if(delay == 0){

        startImpl();

     }

    else{

        new Thread( ){

             public void run( ){

                   Thread.sleep(delay);                     //播放器player启动,audioMedia还未输入,推迟启动

                   baseSetStartDelayMS(0);                  

                   startImpl();

               }

           }

    }

}

private void startImpl( ){

     synchronized(mPlayStateLock){

          baseStart( );

          native_start();

          mPlayState = PLAYSTATE_PLAYING;

    }

}

... ...

 

4. 应用层

     所有安装在手机上的apk都属于这一层。需要注意的是,电话、联系人、相册都是系统自带的apk,也是应用。

     调用完应用框架层的API,这一层自身也包含作者自己的写的业务逻辑。Flappy Bird应用就完成了。

               

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值