精华内容
下载资源
问答
  • Android系统框架

    2019-01-03 10:39:35
    androidFramework学习,对Activity、BroadcastReceiver,Service,ContentProvider以及点击事件的收集
  • android系统框架介绍

    2018-06-28 09:55:00
    android系统框架介绍,Android系统 = Linux内核 + Android运行时。 Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了...
  • 安卓系统框架介绍

    万次阅读 多人点赞 2019-05-09 10:41:50
    Android是由谷歌公司开发的一种基于Linux的开源的操作系统。 ——源码地址1: https://android.googlesource.com/ ——源码地址2:http://androidxref.com/ 起初专为移动设备开发的一个操作系统,如手机,平板...

    一、什么是Android?

    Android是由谷歌公司开发的一种基于Linux的开源的操作系统。  

    ——源码地址1: https://android.googlesource.com/  

    ——源码地址2:http://androidxref.com/

    起初专为移动设备开发的一个操作系统,如手机,平板电脑,车载系统,智能电视等。

    Android第一个版本2008年11月发布,至今有超过10年的历史,几乎每一年都会更新一个版本,下一个版本Anroid Q计划于今年10月23日发布。 API版本

     

    二、Android系统分层

    应用层

    JAVA API Framework

    Lib库及Android运行环境

    HAL层

    Linux内核

    三、Android应用开发

    需要具备哪些知识?

    开发参考手册:https://developer.android.google.cn/

    IDE:Android Studio 或者Eclipse

    语言:JAVA

    基本知识点

    四、Android四大组件

    Activity: 通常一个activity指的就是一个屏幕

    屏幕或者窗口需要布局,布局通常在Android manifest.xml中设置

    生命周期

    Service

    Service又叫服务,主要处理较长时间的任务

    运行不依赖用户界面,在后台运行

    生命周期及用法

    启动类型的服务: onCreate()- >onStartCommand()->Service running--调用context.stopService() ->onDestroy()

    绑定类型的服务: onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()

     

    Broadcast Receiver: 翻译过来就是广播接收器,用于消息传递

    当事件触发时发送广播,注册了广播的对象就能接收到消息

    注册广播分为动态注册及静态注册

    静态注册在Android manifest.xml中注册,动态在代码中注册

    Content Provider

    内容提供者

    通过content provider为不同的应用提供数据存储和读取

    通过Uri来标识唯一的访问入口

    Content Provider通常会跟数据库(Sqlite)一起使用,也有网络、文件、XML的形式。

    Android自带的Content Provider包括:Browser、CallLog、Contacts、MediaStore、Settings等

    五、Android进程间通信

    六、Context

    Context是个抽象类,而Activity、Service、Application等都是该类的一个实现。在面向对象语言里面绝大多数的操作需要以对象为基础,这个时候就需要context。

    七、JAVA API Framework

    SystemServer:是framework中最重要的一个进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中。

    最常用的几个服务介绍:

    ActivityManagerService :AMS,管理Acvitity生命周期和事件处理

    PackageManagerService :PMS,程序安装及包管理

    WindowManagerService:WMS,窗口管理包括显示、View、尺寸等

    Telephony Manager :通话管理

    八、Android Runtime & Library

    library路径:/system/lib/

    So库一般是由C/C++编译成的动态库,上层的Java程序通过JNI调用

    主要包含:Lib c ,OpenGL,SSL ……

    Android应用都是用JAVA语言开发的,JAVA是一门解释性语言,它需要运行在虚拟机的环境下, Android Runtime和Dalvik都是解释器,Dalvik是Android 4.4以前的版本使用,ART是4.4以后的版本。

     

    九、Android 代码是怎么执行的?

    在 Android 中,Java 类被转换成 DEX 字节码。DEX 字节码通过 ART 或者 Dalvik runtime 转换成机器码。这里 DEX 字节码和设备架构无关。 Dalvik 使用 JIT(Just in time)编译而 ART 使用 AOT(Ahead of time)编译。

    十、HAL层

    HAL:HARDWARE ABSTRUCT LAYER,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现。

    部分硬件厂商不愿意将自己硬件相关一些核心的东西开源出去,假如将对自己硬件的驱动程序全部放入内核空间驱动程序实现,那么必须遵循GPL协议,是必需开源的。有了HAL层之后,他们可以把一些核心的算法之类的东西的实现放在HAL层,而hal层位于用户空间,不属于linux内核,和android源码一样遵循的是appache协议,这个是可以开源或者不开的。

    十一、Linux内核

    Android驱动包含两部分,一部分是HAL层,另一部分是linux内核驱动 HAL层提供上层调用的接口,同时对接Linux内核,采用IOCTRL或者一些框架的形式来访问内核驱动 Linux内核提供各种驱动:USB,COM,WIFI,BT,CAMERA,AUDIO,FLASH

    十二、AP和BP

    通常来说一个Android手机包含两个处理器AP和BP

    AP:Application Processor,运行操作系统和应用数据处理

    BP:Baseband Processor,无线通信,信道调制,编码,包括通话,语音,短信数据业务,在此芯片上进行。

     

    展开全文
  • Android系统框架结构

    千次阅读 2018-08-31 14:27:25
    Android系统到底是什么样子的?app为什么能够在Android系统中运行,怎样运行的。 下图是官方标准的Android系统架构图: (蓝色:java程序,java代码编写;黄色:运行JAVA程序而实现的虚拟机;绿色:C/C++语言...

    Android系统到底是什么样子的?app为什么能够在Android系统中运行,怎样运行的。

    下图是官方标准的Android系统架构图:

    (蓝色:java程序,java代码编写;黄色:运行JAVA程序而实现的虚拟机;绿色:C/C++语言编写的程序库;红色:linux内核+driver)

    由上图我们知道Android系统分为四层:

    1、Applications(应用程序层):就是我们的app层,各种app。

    2、Framework(应用程序架构层):提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发。Activity、Service、Notification等等都是framework提供给我们的。

    应用程序框架层类库名称                                                      功能
    活动管理器(Activity Mananger)管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口
    窗口管理器(Window Manager)对所有开启的窗口程序进行管理
    内容提供器(Content Provider)提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享
    视图系统(View System)创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),还有可嵌入的web浏览器。
    通知管理器(Notification Manager)使应用程序可以在状态栏中显示自定义的客户提示信息
    包管理器(Package Manager)对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等。
    资源管理器(Resource Manager)提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
    位置管理器(Location Manager)提供位置服务
    电话管理器(Telephony Manager)管理所有的移动设备功能
    XMPP服务是Google在线即时交流软件中一个通用的进程,提供后台推送服务

    我们可以称Framework层才真正是Java语言实现的层,在这层里定义的API都是用Java语言编写。但是又因为它包含了JNI的方法,JNI用C/C++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到Linux内核。那么Framework层的作用就有2个。

    1.用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。

    2.用Java Native Interface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。

    3、Libraries(系统运行时库层):从系统结构图,这层有两个部分。

    3.1、Librares:核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。各类库说明如下:

    系统类库名称说明
    Surface Manager执行多个应用程序时,管理子系统的显示,另外也对2D和3D图形提供支持
    Media Framework           基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回放,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM
    SQLite                                              本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBC API
    OpenGL|ES                                       基于OpenGL ES 1.0API标准实现的3D跨平台图形库
    FreeType用于显示位图和矢量字体
    WebKitWeb浏览器的软件引擎
    SGL底层的2D图形引擎
    Libc(bionic l  ibc)         继承自BSD的C函数库bionic libc,更适合基于嵌入式Linux的移动设备
    SSL                     安全套接层,是为网络通信提供安全及数据完整性的一种安全协议

    3.2、Android runtime(Core Librares + Dalvik虚拟机):

    Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机(JVM),并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。(这里提到java虚拟机,简单叙述一下与Dalvik虚拟机区别:a、java虚拟机运行的是.class,Dalvik虚拟机运行的是.dex;b、java虚拟机基于栈架构。程序在运行时虚拟机需要频繁的从栈上读取或写入数据。Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式快的多)

    关于Dalvik虚拟机这是比较低版本4.4以下的了,从android4.4开始就出现了ART(android runtime),用来代替Dalvik的新型运行环境。当然在4.4的正式环境中用的还是Dalvik,真正开始用ART取代Dalvik是从android5.0开始的。在启用ART模式后,系统在安装应用的时候会进行一次预编译,在安装应用程序时会先将代码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升(这里不进行详细讨论)。

    这里还有个重点,在上一层(Framework层:java代码)与这一层(系统运行时库层:C\C++代码)他们又是怎么能调用的呢?这里就涉及到了一个JNI:

    JNI:Java本地接口(Java Native Interface),它是一个协议。用来沟通Java代码和外部的本地C/C++代码, 通过该协议 Java代码可以调用外部的本地代码, 外部的C/C++ 代码可以调用Java代码。

    涉及到JNI的开发,又要说NDK了。

    NDK:Google开发的一套开发和编译工具集, 主要用于Android的JNI开发,是一个用于开发JNI的工具。

    这里涉及到的JNI与DNK不进行详细,只是简单叙述一下感念。

    4、Linux Kernel(linux内核层):提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。作为一个应用层开发者,这一层可以不太深入研究。

    本文参考 《Android开发之旅:android架构》(http://www.cnblogs.com/skynet/archive/2010/04/15/1712924.html).......,方便自己学习:

    展开全文
  • Android系统框架总结(好文)

    万次阅读 2018-08-15 15:47:06
    Android框架Android应用程序框架 UI基本开发 Fragment 安全策略 在Android中,安全涵盖了应用程序的部署和执行.对于部署来 说,Android应用程序必须被赋予一个数字证书才允许被安装到某个设备中.对 于运行来...

    原址

    通用概念

    Android框架图

    2016071201.png

    Android应用程序框架

    UI基本开发

    Fragment

    安全策略

    在Android中,安全涵盖了应用程序的部署和执行.对于部署来 说,Android应用程序必须被赋予一个数字证书才允许被安装到某个设备中.对 于运行来说,每个应用程序都在一个独立的应用程序中执行,每个进程都有一 个唯一的永久的用户ID(在安装的时候分配的).

    注册应用程序需要三样东西:

    1. 一个数字证书,
    2. 一个.apk文件
    3. 以及用于将数字签名应用到.apk文件的工具(jarsigner).

    注册一个应用程序步骤如下:

    • 使用Keytool创建一个自注册的证书.

       步骤1 Create a folder to hold the keystore, for example

    c:\android\release\.
    

      步骤2 在命名行中执行如下命令:

           keytool -genkey -v -keystore "FULL PATH OF release.keystore FILE FROM STEP 1"
           -alias androidbook -storepass paxxword -keypass paxxword -keyalg RSA
           -validity 14000
    

    keytool的参数说明如下: 2016070502.png

    • 使用Jarsigner注册.apk文件
      jarsigner -keystore "PATH TO YOUR release.keystore FILE" -storepass paxxword
      -keypass paxxword "PATH TO YOUR APK FILE" androidbook(别名)
      
    • 用zipalign作字节对齐 命令如下:
      zipalign –v 4 infile.apk outfile.apk
      

      验证一个.apk文件是否是4字节对齐,用如下命令

      zipalign –c –v 4 filename.apk
      
    • 安装应用程序
      adb install "PATH TO APK FILE GOES HERE"(安装)
      adb uninstall packagename(卸载)
      adb install –r "PATH TO APK FILE GOES HERE"(重装)
      

    Framework

    Audio System

    Audio System 介绍

    2016053001.png

    AudioTrack 介绍

    2016053002.png

    基本说明:

    1. 用于管理来自一个Source的Audio 播放将播放的Audio 数据送给 AudioFlinger
    2. 提供播放的控制接口 API:start(), stop(), …
    3. 提供Volume 控制接口, 用于控制L/R声道各自的Volume
      • API: setVolume
      • Android 体系中有3个Audio Volume控制, 最终的输出Volume是下面3 者的乘积
        1. Master Volume
        2. Stream Type Volume
        3. Track Volume
    4. AudioTrack可以配置为下面三种Mode:
      1. PUSH MODE
      2. PULL MODE
      3. STATIC MODE
    5. AudioTrack测试程序
      /**
       * 利用AudioTrack播放一个wav文件
       */
      
      //#define LOG_NDEBUG 0
      #define LOG_TAG "AudioTrackTest"
      //#include <utils/Log.h>
      #include <media/AudioTrack.h>
      #include <system/audio.h>
      using namespace android;
      #define ALOGD printf
      int main(int argc, char *argv[])
      {
        int readNum;
        unsigned short channel;
        unsigned int sampleRate;
        FILE *fp = fopen("bzk_chic.wav", "ab+");
        if (fp == NULL) {
          ALOGD("Cannot open .wav file");
          return -1;
        }
        ALOGD("Open wav file successfully!\n");
        fseek(fp, 0x16, 0); 
        readNum= fread(&channel, 1, 2, fp);
        if (readNum < 1) {
          ALOGD("Can not read channel number: %d\n", readNum);
          fclose(fp);
          return 0;
        }
        ALOGD("channel number is %d\n", channel);
        fseek(fp, 0x18, 0); 
        readNum = fread(&sampleRate, 1, 4, fp);
        if (readNum < 1) {
          ALOGD("Cannot read sample rate: %d\n", readNum);
          fclose(fp);
          return 0;
        }
        ALOGD("Sample Rate is %d\n", sampleRate);
      
        // playing to an AudioTrack, set up mask if necessary
        audio_channel_mask_t audioMask = AUDIO_CHANNEL_OUT_STEREO;
        if (0 == audioMask) {
          return -1;
        }
        sp<AudioTrack> audioTrack = new AudioTrack(
                                                   AUDIO_STREAM_MUSIC, sampleRate, AUDIO_FORMAT_PCM_16_BIT, audioMask,
                                                   0, AUDIO_OUTPUT_FLAG_NONE);
        status_t status = audioTrack->initCheck();
        if(status != NO_ERROR) {
          audioTrack.clear();
          ALOGD("Failed for initCheck()");
          return -1;
        }
        audioTrack->start();
      
        unsigned char *buffer = new unsigned char[channel * 64 * 2];
        while (1) {
          readNum = fread(buffer, 1, channel * 64 * 2, fp);
          if (readNum <= 0)
            break;
          ALOGD("Write data : %d to AudioTrack", readNum);
          audioTrack->write(buffer, readNum);
        }
      
        fclose(fp);
        delete []buffer;
        audioTrack->stop();
      
      }
      

    AudioRecord介绍

    2016053003.png

    基本说明:

    1. 用于管理从底层获取录音数据,并提供给上层
    2. 提供录音的控制接口 API:start(), stop()
    3. 获取声音资料的方式
      • 由上层主动调用AudioRecord::read() 来获取数据 (PULL MODE)
      • 上层提供Callback function, 通过AudioRecord主动将资料通过 Callback 给上层(PUSH MODE)

    AudioPolicyService介绍

    2016053004.png

    AudioPolicyService在Audio system中的位置和作用

    • 仅是一个行为决策者,而不是行为的实施者
    • 真正的实施者为AudioFlinger
    • 它是一个在后台进程中的服务实体,提供的服务就是告诉实施者要怎么去 做

    2016053005.png

    AudioPolicyService几大功能:

    • 设备状态管理
    • 输入输出策略管理
    • 音量控制管理
    • Effect 控制管理

    AudioFlinger

    2016053006.png

    AudioFlinger的线程循环逻辑如下所示:

    2016053007.png

    Media Framework

    基础知识

    AMessage代表一个消息,对应一个target, 根据这个target可以知道对 应的消息应该归哪个AHandler去处理。

    AHandler是处理消息的基类,它有一个id,处理与这个id相关联的AMessage, 在 onMessageReceived 函数中处理各种消息。 从AHandler派生的类,都会重写该方法,以处理各种消息。

    有一个全局的 ALooperRoster 对象,它维护了系统中存在的 AHandler对 象。

    ALooper对象,通过 registerHandler 接口将AHandler对象注册给ALooperRoster 对象维护的AHandler列表中。

    主要代码路径

    • MediaPlayer.java
      • Java 层的 MediaPlayer 接口,APK 主要通过 call 它的接口实现播放功能
      • code path: framework/base/media/java/android/media/MediaPlayer.java
    • Media JNI
      • MediaPlayer java 层与 native 层的接口
      • code path: framework/base/media/jni/androidmediaMediaPlayer.cpp
      • output:libmediajni.so
    • MediaPlayer
      • MediaPlayer Native 层 client 端接口
      • code path: framework/av/media/libmedia/
      • output:libmedia.so
    • Media Service
      • Native 层真正实现播放功能的 Service 进程
      • code path: framework/av/media/mediaserver framework/av/media/libmediaplayerservice
      • output: mediaserver libmediaplayerservice.so

    Stagefright

    • StagefrightPlayer
      • 负责提供 player 的接口
      • code path: framework/av/media/libmediaplayerservice/StagefrightPlayer.cpp
    • AwesomePlayer
      • 真正实现 playback 功能的模块
      • code path: : framework/av/media/libstagefright
    • DataSource
      • 提供 Source 数据,可以是本地文件,也可以是网络数据
      • code path: : framework/av/media/libstagefright
    • MediaSource
      • MediaSource使用到了DataSoure和OMX,可以提供解码后的供显示的数据
      • code path: framework/av/media/libstagefright/
    • OMXClient
      • 使用 OMX 的 client 端
      • code path: framework/av/media/libstagefright/
    • OMX
      • 提供一套接口接到底层的 decoder 进行解码
      • code path: framework/av/media/libstagefright/omx

    NuPlayer

    2016053008.png

    OpenMAX

    OpenMAX is a royalty-free, cross-platform API. OpenMAX Working Group has been formed by the Khronos Group. The Standard for Media Library Portability. Reduce the cost and complexity of porting multimedia software to new processors and architectures. 分为 OpenMAX DL, IL, AL 三层,Android 上只用到 OpenMAX IL.

    Graphics

    Android Graphics Pipeline Overview

    • Android Graphics Pipeline

      2016052601.png

      如图,对于一些Buffer,有些通过GPU处理后,再送给HWComposer,有些则 直接送给HWComposer处理。

    • BufferQueue

      2016052602.png

      关于BufferQueue的说明如下:

      1. manages flow of buffers between producers and consumers
      2. two queues
      3. producers dequeue unused buffers, fill them, then queue them
      4. consumers acquire filled buffers, use them, then release them when done.
    • SurfaceFlinger

      它的主要使用是:

      1. Responsible for compositing all windows into the display(s)
      2. Just another GL client
    • HW Composer

      一开始是为了加速叠图而准备的一个HAL,目前作为所有显示的HAL。

      • Overlay
        • Overlay 是什么

          在android 上面,屏幕上输出的画面都是由多个图层(layer)合成 (compsing)得到的结果. 所以在android上面,图像的合成是非常普 通而且常见(频繁)的操作, 如果有一个简单而省电的hardware(hw)来负 责图像合成, 可以很有效的降低功耗,而且也可以降低GPU的loading.

          Overlay 就是一个专门负责图像合成的一个hw. 相比GPU 而言, overlay 是一个非常简单图像处理hw. 和GPU具有的庞大的图形功能不 同, overlay只能负责简单的图像合成动作.

          由于overlay 功能简单,所以hw的实现上相比GPU也要简单很多,工作起 来也会非常省电.

        • Overlay 有什么限制

          由于overlay hw很简单,所以它只能处理简单的图像合成工作,太复杂 的图像合成工作还是要GPU来协助完成.

          overlay 无法处理的case:

          1. 需要旋转的图像
          2. 需要缩放的图像
          3. 图层超过4层

          不过对于普通的android应用场景来说,很少会出现上述的那些cases.

        • 没有overlay HW,图像合成流程

          Surfaceflinger把需要合成的layers 交给GPU 做composing, 最终输出 到屏幕。

          2016071204.png

        • 有Overlay HW, 图像合成的流程

          Surfaceflinger把需要合成的layers 交给ovl做composing, 最终输出 到屏幕。

          2016071205.png

        • 有overlay HW,但需要GPU做图像合成流程

          Overlay不能处理的layers, 会交给GPU做图像合成,GPU把图像合成为 一个layer, 然后再通过overlay 输出.

          2016071206.png

    Android Sync Framework

    • 定义

      Synchronization between consumers and producers who are from different hardware components to use a buffer atomically

    • 应用背景

      在复杂的DMA管线如图形管线(多媒体,摄像头,GPU以及显示设备),一 个buffer的消费者需要知道生产者什么时候完成生产(即创建一个Buffer, 并往里面放置消费者所需要的数据)。同样地,生产者也需要知道消费者 什么时候使用它创建的Buffer,以便它可以重新使用这个Buffer。而且, 一个Buffer可能被多个不同的消费者使用不同的时间。另外,一个消费者 可能需要互斥地消费多个Buffer,等等,有一个问题应运而生,就是如何 保证多个消费者之间同步使用Buffer,以及生产者与消费者协调使用 Buffer。因为Buffer是一个共享资源,且任何消费者或生产者对Buffer的 使用都是排他性的(因为它们属于不同的硬件单元或模块),大体看来, 需要解决如下两个问题:

      1. 消费者与生产者之间对Buffer的同步访问。
      2. 消费者之间对Buffer的同步访问。
    • 目标
      1. Provide a simple API to let components signal when buffers are ready/released.
      2. Allow synchronization primitives to be passed between processes and between userspace and the kernel.
      3. Allow implementers to exploit hardware sync support
      4. Provide visibility into the graphics pipeline for debugging
    • Software Stacks

      2016052609.png

    • 实现
      1. synctimeline

        2016052603.png

        • Represents monotonically increasing counter
        • Generally one instance per driver context
        • allows hardware specific implementation
        • swsync implementation provided
      2. syncpt

        2016052604.png

        • Represents a specific values on a parent timeline
        • 3 states
          • active
          • signaled
          • error
        • starts active and transitions once to either signaled or error
      3. syncfence

        2016052605.png

        • A collection of syncpts
        • Backed by a file and can be passed to userspace.
        • Main primitive drivers and userspace use to describe sync events/dependencies.
        • Fences are a promise by the kernel
          • that work has been queued
          • and will complete in a "timely" manner
        • Starts active and transitions to signaled with all of its syncptsbecome signaled or one becomes errored
        • The list of syncpts is immutable after fence creation
        • A syncpt can only be in one fence.
        • Two fences can be merged to create a third fence containing copies of the sync points in both.
        • Sync Merge
          • Before Merge

            2016052606.png

          • After Merge

            2016052607.png

      4. 代码
        • supported in android-3.10 kernel + staged for quite some time
        • Core
          • drivers/staging/android/sync.c
          • drivers/staging/android/sync.h
        • swsync
          • drivers/staging/android/sw_sync.c
          • drivers/staging/android/sw_sync.h
        • 接口声明

          2016052608.png

      5. 实现synctimeline的建议

        在实现前,先考虑是否可以直接使用swsync, 以swsync为起点。

        • Don'ts
          • Don't base a timeline on any "real" time.
          • Don't allow userspace to explicitly
            • create a fence
            • signal a fence
          • Don't access synctimeline, syncpt, or syncfence elements explicitly.
        • Dos
          • Do provide useful names
          • Do implement timelinevalue str and ptvaluestr
          • Do implement fill driverdata

    Input System

    Input Event Process Flow

    2016053009.png

    Architecture (ICS)

    2016053010.png

    Architecture (JB)

    2016053011.png

    Wifi Framework

    传统WiFi

    Android Framework中的wifi代码分为两部分,一部分面向应用开发者,提供 公共接口给应用开发者,另一部分则是框架的实现灵魂,代码分别位于: Android 5.1

    • frameworks\base\wifi\java\android\net\wifi
    • frameworks\opt\net\wifi\service
    • WifiConfigStore

    P2P/Miracast

    • 开启WifiSink的调用序列

      DisplayManager.requestEnableSink DisplayManager.enableSink DisplayManagerGlobal.enableSink DisplayManagerService.enableSink DisplayManagerService.enableSinkInternal WifiDisplayAdapter.requestEnableSinkLocked WifiDisplayController.requestEnableSink

      WifiDisplaySinkActivity WfdSinkSurfaceFragment WfdSinkExt.setupWfdSinkConnection WfdSinkExt.setWfdMode(true) WifiDisplayAdapter.requestEnableSinkLocked … WifiDisplayController.startWaitConnection WifiDisplayController.enterSinkState

    Global Settings

    设置和访问一个全局变量。

    Settings.java

    //frameworks/base/core/java/android/provider/Settings.java
    public final class Settings {
        public static final String WIFI_AUTO_CONNECT = "wifi_auto_connect";
        ...
        MOVED_TO_GLOBAL.add(Settings.Global.WIFI_AUTO_CONNECT);
    }
    

    defaults.xml

    <!-- /packages/SettingsProvider/res/values/defaults.xml -->
    <integer name="def_wifi_auto_connect">0</integer>
    

    DatabaseHelper.java

    public class DatabaseHelper extends SQLiteOpenHelper {
        ...
        loadIntegerSetting(stmt, Settings.Global.WIFI_AUTO_CONNECT,
                           R.integer.def_wifi_auto_connect);
    
        ...
    }
    

    访问

    //读取
    Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.WIFI_AUTO_CONNECT);
    //写入
    Settings.Global.putInt(getContentResolver(), Settings.Global.WIFI_AUTO_CONNECT, 0);
    展开全文
  • 安卓系统框架

    2013-01-31 15:21:19
    安卓系统框架
  • 先来看几个问题是否能回答:1)Android系统开发语言有两种:Java、c/c++,它们各用于开发那些层次2)JNI实质是什么,位于什么位置,NDK又是什么3)Android虚拟机是用于干什么的,什么时候介于工作4)既然Android内核...
    先来看几个问题是否能回答:
    1)Android系统开发语言有两种:Java、c/c++,它们各用于开发那些层次
    2)JNI实质是什么,位于什么位置,NDK又是什么
    3)Android虚拟机是用于干什么的,什么时候介于工作
    4)既然Android内核主要是c/c++实现的,那么是否可以用C++来写app
    5)aidl又是什么,位于那一层
    6)各层次的如何配合工作


    1.首先来看一幅图吧:
    对于这个图,基本每一个Android Developer都不会陌生。没错,这个就是刚刚接触Android的时候,所要了解Android系统框架,每一个Android入门级的书籍都不会绕开这个图。先来回顾下上面图的含义:
    a. Android系统分为四层:应用层、framework层、系统库、Linux内核
    b. 应用层为系统对用户所提供的应用程序,比如:Contacts--联系人或者叫通讯录
    c. framework层向应用开发层开发者提供统一的api,著名的AMS、WMS、四大组件等,均位于该层
    d. 系统库层提供framework层所需要的系统级实现,比如提供图形缓制相关的OpenGL、数据库存储
    e. Linux内核:提供操作系统的本质功能:文件管理、内存管理、进程管理、网络协议栈等
    以上基本是大家都明白的,也很容易由图上看出的,再来看一下下述结论:
    f. 图中的蓝色部分是用Java代码实现的,向上层所提供的接口也是Java接口
    g. 核心库与虚拟机共同构成了Android的运行时框架,提供对上层Java代码的编译解析能力
    h. 绿色部分为使用c/c++语言实现的,与Java层通过JNI实现相互调用
    2. 因为性能问题,Android系统的大部分内在逻辑都是用c/c++实现的,而对外开放的接口却是Java的,为什么要这么设计的,这个是和语言特点有关系的。
    c/c++在算法运行效率上要比Java高几倍,当然,现在伴随着JVM优化的越来越好,差异越来越小,硬件环境也越来越好,更拉近了差距,但在系统的设计层面,运行效率高的一定比低的要好,优化的空间也要更大,积少成多,整个系统就会快很多,因此内核的实现是c/c++的。对于开发者来讲,c/c++实现诸如界面、事件之类的上层逻辑,开发成本要大不小,且c/c++对于开发者能力的积累也要求较高,api的丰富程序也不如Java,因此,使用Java提供给开发者开发复杂多变的业务是更合适的。使用了两种语言,有优点就有弊端,我的理解是,增加了Android系统实现的复杂性,看过Binder的源码同学都会有这个体会,时而Java层,时而c++层,不停的调入调出,流程烦琐而复杂。(在我之前的文章中有三篇是专门写Binder的,感兴趣可以看下)。对于理解系统源码的人,也增加了学习的成本。
    再来说下JNI与NDK,首先,JNI是属于Java虚拟机的一部分,既不属于c/c++,也不属于Android,提供了Java可以调用c/c++的一种机制。这边有一个理解误区,c/c++代码是否也是通过Java虚拟机(或者是Android虚拟机)进行编译解析连接的呢?答案是否定的。c/c++是通过so接入apk的,so在Linux系统是一种ELF文件格式,可以理解为是一种可执行的文件格式。那么Java程序怎么通过虚拟机调用.so呢?通过虚拟机所提供的System.loadLibrary接口,虚拟机会去载入c/c++库,调用c/c++库中的JNI_OnLoad函数,后续过程感兴趣的同学可以参考下google官方文档中关于JNI的说明,需要注意的一点是调到c/c++层后,会将当前VM对象传入,即是c/c++代码中的JNIEnv对象。NDK是什么,NDK只是开发JNI,生成c/c++库的一个环境。也就是说如果不想太方便,完全可以直接在Android系统中通过命令编出so。NDK是属于Android的,和Java没有任何关系。
    理解了JNI的实质,再来看看JNI属于上面的系统结构的那个部分:一般来讲,是framework与系统库通信的接口。有一般就会有特殊,比如自己定义so,然后使用System.loadLibrary装载,这个更应归属于应用层(毕竟是实现应用层的业务)。再额外提一点,通过System.loadLibary方式导入实现叫显式的库导入方式,还有一种隐式的导入方式:如果是系统应用,则在应用编入系统中时会装载c/c++库,如果是第三方应用,在安装的时候,使用dex2oat装载,两种装载都是在装载与应用相关的c/c++库(系统库)。
    3. 以一个例子讲解下各层的合作关系吧:通过launcher的icon打开应用,以下所提到的AMS为ActivityManagerService
    a. 首先,launcher也是一个app,属于应用层,其打开app为调用startActivity
    b. startActivity会调到framework层的相关函数,然后逐层调用后,向AMS发送startActivity请求
    c. 在b中的过程,向AMS发送startActivity,首先要获得AMS,通信方式为Binder,Binder对外的接口(Java层部分)属于Framework层,通过JNI方式调用的c++层实现,位于系统库层,binder驱动位于Linux内核层(Binder的实现原理可以看我之前发过的文章)
    d. AMS处理该事件,调用launcher进程执行pauseActivity,位于应用层,执行完毕后,再次回调AMS
    e. AMS查看是否需要新起一个进程(此处不再展示,详见Android的AMS模块),处理好进程后,通过Binder,通知该进程startActivity,也位于应用层
    4.回过头来,再看看上面提到的几个问题
    几个问题:
    1) Android系统开发语言有两种:Java、c/c++,它们各用于开发那些层次
    上面已有结论,请看第2条
    2)JNI实质是什么,位于什么位置,NDK又是什么
    上面已有结论,请看第2条
    3)Android虚拟机是用于干什么的,什么时候介于工作
    Android虚拟机用于编译解析Java层的代码,分系统应用和第三方应用,处理及介于方式不太一样,上面第2条中有少许提及。
    4)既然Android内核主要是c/c++实现的,那么是否可以用C++来写app
    可以的,目前已有NativeActivity的实现,但c/c++用于实现界面并非最好的工具,详见第2条
    5)aidl又是什么,位于那一层
    上面已有结论,请看第3条中的c,aidl只有binder在Java层的接口规范,因此位于framework层。
    6)各层次的如何配合工作
    请看第3条中示例
    展开全文
  • android_framework Android应用框架,包括net框架、android系统框架等。
  • 本文是android编译系统框架分析的内容 分析的非常到位 是目前见到的最为详细的分析 分享之
  • 完整的安卓系统框架层调用图生成方法.pdf
  • Android 系统框架

    千次阅读 2016-10-19 15:49:02
     1.Linux内核层 Android系统是基于 Linux2.6内核的,这一层为 Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。  2.系统运行库层 这一层通过一些...
  • Android系统框架

    2012-02-20 13:37:24
    Android系统详细框架图,描述了Android所有方面的东西。
  • Android系统框架学习总结

    千次阅读 2015-06-22 10:41:05
    自己学习Android系统框架心路历程必须记录一下。 系统框架图,中英文对照: 英文版: 中文版: 一、应用程序层(Application): 应用程序时JAVA语言编写的运行在Dalvik虚拟机上的程序,Google最开始...
  • Android系统编译框架

    2019-01-20 20:23:56
    Android系统编译框架
  • 四层: 1.应用 2.应用框架 3.系统类库 4.linux核心驱动
  • Android 系统架构图

    万次阅读 多人点赞 2020-04-09 00:33:11
    Android 底层内核空间以 Linux Kernel 作为基石,上层用户空间由 Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间 与 用户空间。对于用户空间主要采用 C++ 和 Java 代码编写,...
  • 初识android系统,五层系统架构详解

    千次阅读 2020-11-29 20:42:29
    有时间了,就整理一下这几年下来android的基础知识,希望可以帮到需要的人和影响到一些开发者,然后也希望自己...Android 是一套基于linux内核的开源系统,主要应用于移动端,在移动互联网时代,应运而生。要详细了解它
  • Andorid基础 Android系统层次框架结构

    万次阅读 2016-10-06 14:45:04
    Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。 Android主要应用于ARM平台,...
  • Android系统框架四层结构

    千次阅读 2019-02-22 15:26:28
    Google官方提供的Android系统的四层架构图 从上到下进行简单介绍:   一、应用层 Applications:应用层由运行在Android设备上的所有应用构成,包括预装的系统应用和自己安装的第三方应用。大部分是由Java语言...
  • Android GUI系统框架介绍

    万次阅读 2018-09-01 22:40:59
    Android GUI框架是一个非常庞大的系统,也是Android最重要的系统之一,其决定了一个Android界面究竟如何显示出来,显示效果/效率怎样,也一直是Android系统优化的重点,从Android 诞生到现在,在GUI框架上Android...
  • Android常用十大框架

    千次阅读 2018-05-02 17:20:24
    本文系多方综合与转载整合,意在Android开发中能够知道和使用一些好用的第三方支持,省去自己的很多时间,下面涉及到的多为经过历史兴衰与检验的,江山代有人才出一代更比一代强,有些已经被更新更好用的所取代,但也很多...
  • 本文是对谷歌Android系统应用的一种创新扩展,它可以对第三方应用程序进行隔离,并使可信任的第三方应用程序有访问汽车功能软件层的权限,加强了对汽车安全的防范。
  • Android-System-related-charts(Android系统相关的框架图、流程图) 写在前面 前段时间在写一个PPT的时候想要找几张跟ant打包相关的流程图,找了很久都不如意,结果PPT用完了以后无意中发现几张,后悔不已。为了...
  • 摘要:车载电子业目前面临众多机遇与挑战,开发一套所有汽车可以安装的通用平台不仅可以降低整个产业链成本,而且可以使应用软件增加,满足不同用户喜好...本文提出一种可行的软件架构,将谷歌Android系统良好的兼容性

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 198,318
精华内容 79,327
关键字:

安卓系统框架