精华内容
下载资源
问答
  • Android系统架构概述PPT

    千次下载 热门讨论 2013-10-23 01:18:24
    Android系统 = Linux内核 + Android运行时。 Android系统使用的Linux内核包含了一些专用驱动,例如Logger、Binder、Ashmem、Wakelock、Low-Memory Killer和Alarm等,这些Android专用驱动构成了Android运行时的基石。...
  • Android进阶(十一)Android系统架构讲解

    万次阅读 2015-05-07 16:23:40
    如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越...从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下:

    如果说一个成功男人的背后会有一个默默支持的女人的话,那么一个优越稳定的平台背后必有一个成熟的系统架构所支撑着。那么,Android的系统架构是怎么样的呢?从下图我们可以从整体上有个大致的了解(图片来源互联网):           

     

        从上图中可以看出,Android系统架构为四层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下:

        1)应用程序层

    Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序。这些应用程序都是用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换,这点不同于其他手机操作系统固化在系统内部的系统软件,更加灵活和个性化。

        2)应用程序框架层

    应用程序框架层是我们从事Android开发的基础,很多核心应用程序也是通过这一层来实现其核心功能的,该层简化了组件的重用,开发人员可以直接使用其提供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。

             a) Activity Manager(活动管理器)

              管理各个应用程序生命周期以及通常的导航回退功能

             b) Window Manager(窗口管理器)

                  管理所有的窗口程序

             c)  Content Provider(内容提供器)

                  使得不同应用程序之间存取或者分享数据

             d) View System(视图系统)

                  构建应用程序的基本组件

             e) Notification Manager(通告管理器)

                  使得应用程序可以在状态栏中显示自定义的提示信息

             f) Package Manager(包管理器) 

                  Android系统内的程序管理

             g)Telephony Manager(电话管理器)

                  管理所有的移动设备功能

             h)Resource Manager(资源管理器)

                  提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等

             i)Location Manager(位置管理器)

                 提供位置服务

             j)XMPP ServiceXMPP服务)

                 提供Google Talk服务 

      

        3)系统运行库层

             从图中可以看出,系统运行库层可以分成两部分,分别是系统库和Android运行时,分别介绍如下:

        a)系统库

          系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。其主要分为如下几个:

        Ø  Surface Manager

     执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。 

       Ø  Media Framework 

        多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4MP3H.264AACARM

        Ø  SQLite:

        小型的关系型数据库引擎 

         Ø  OpenGL|ES

        根据OpenGL ES 1.0API标准实现的3D绘图函数库 

        Ø  FreeType

        提供点阵字与向量字的描绘与显示 

       Ø  WebKit

         一套网页浏览器的软件引擎

        Ø  SGL

        底层的2D图形渲染引擎 

       Ø  SSL

       Andorid上通信过程中实现握手 

       Ø  Libc

     从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制

     

        b)Android运行时

         Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和Dalvik虚拟机两部分。

        Ø  核心库

        核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,android.osandroid.netandroid.media等等。

        Ø  Dalvik虚拟机

        Android程序不同于J2me程序,每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一个Dalivik虚拟机的实例,并在该实例中执行。Dalvik虚拟机是一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化以及支持多个虚拟机的特点。需要注意的是,不同于J2me,Android程序在虚拟机中执行的并非编译后的字节码,而是通过转换工具dxJava字节码转成dex格式的中间码。

     

        4)Linux内核层 

            Android是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。

      注:Android软件安装、启动过程:

     

     

    展开全文
  • 平时总会去查 Android系统版本号和Android API level对应关系,有时候上不了Google,网上搜的又不全。这里翻译记录下,顺便给出原文网址:...
    展开全文
  • Android系统架构-[Android取经之路]

    万次阅读 多人点赞 2019-12-15 15:35:29
    [1] Android系统架构 [2]Android是怎么启动的 [3]Android 10.0系统启动之init进程 [4]Android10.0系统启动之Zygote进程 [5]Android 10.0 系统启动之SystemServer进程 [6]Android 10.0 系统服务之...

    摘要:本节主要来讲解Android的系统架构

    阅读本文大约需要花费10分钟。

    文章首发微信公众号:IngresGe

    专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢!

    欢迎关注我的公众号!

    [Android取经之路] 的源码都基于Android-Q(10.0) 进行分析

    [Android取经之路] 系列文章:

    《系统启动篇》

    1. Android系统架构
    2. Android是怎么启动的
    3. Android 10.0系统启动之init进程
    4. Android10.0系统启动之Zygote进程
    5. Android 10.0 系统启动之SystemServer进程
    6. Android 10.0 系统服务之ActivityMnagerService
    7. Android10.0系统启动之Launcher(桌面)启动流程
    8. Android10.0应用进程创建过程以及Zygote的fork流程
    9. Android 10.0 PackageManagerService(一)工作原理及启动流程
    10. Android 10.0 PackageManagerService(二)权限扫描
    11. Android 10.0 PackageManagerService(三)APK扫描
    12. Android 10.0 PackageManagerService(四)APK安装流程

    《日志系统篇》

    1. Android10.0 日志系统分析(一)-logd、logcat 指令说明、分类和属性
    2. Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化
    3. Android10.0 日志系统分析(三)-logd、logcat读写日志源码分析
    4. Android10.0 日志系统分析(四)-selinux、kernel日志在logd中的实现​

    《Binder通信原理》

    1. Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
    2. Android10.0 Binder通信原理(二)-Binder入门篇
    3. Android10.0 Binder通信原理(三)-ServiceManager篇
    4. Android10.0 Binder通信原理(四)-Native-C\C++实例分析
    5. Android10.0 Binder通信原理(五)-Binder驱动分析
    6. Android10.0 Binder通信原理(六)-Binder数据如何完成定向打击
    7. Android10.0 Binder通信原理(七)-Framework binder示例
    8. Android10.0 Binder通信原理(八)-Framework层分析
    9. Android10.0 Binder通信原理(九)-AIDL Binder示例
    10. Android10.0 Binder通信原理(十)-AIDL原理分析-Proxy-Stub设计模式
    11. Android10.0 Binder通信原理(十一)-Binder总结

      《HwBinder通信原理》

    1. HwBinder入门篇-Android10.0 HwBinder通信原理(一)
    2.  HIDL详解-Android10.0 HwBinder通信原理(二)
    3. HIDL示例-C++服务创建Client验证-Android10.0 HwBinder通信原理(三)
    4. HIDL示例-JAVA服务创建-Client验证-Android10.0 HwBinder通信原理(四)
    5. HwServiceManager篇-Android10.0 HwBinder通信原理(五)
    6. Native层HIDL服务的注册原理-Android10.0 HwBinder通信原理(六)
    7. Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)
    8. JAVA层HIDL服务的注册原理-Android10.0 HwBinder通信原理(八)
    9. JAVA层HIDL服务的获取原理-Android10.0 HwBinder通信原理(九)
    10. HwBinder驱动篇-Android10.0 HwBinder通信原理(十)
    11. HwBinder原理总结-Android10.0 HwBinder通信原理(十一)

    《编译原理》

    1. 编译系统入门篇-Android10.0编译系统(一)
    2. 编译环境初始化-Android10.0编译系统(二)
    3. make编译过程-Android10.0编译系统(三)
    4. Image打包流程-Android10.0编译系统(四)
    5. Kati详解-Android10.0编译系统(五)

    本文主要介绍Android的系统架构,Android使用linux内核(Marco kernel),但是Android的架构又与Linux系统有所不同,因此在介绍Android系统架构之前,我们先一起来了解一下Linux系统的架构。

     

        Linux系统架构

         Linux架构如下图所示:

    • Computer Resources:硬件资源
    • Kernel:内核
    • Shell:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器
    • Programs/Utilities/Tools:库函数、工具等
    • File systems:文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。
    • User Application: Linux应用,标准的Linux系统一般都有一套被称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等

     

    Linux系统一般由4个组成部分:内核Kernel、shell、文件系统和应用程序。内核、shell和文件系统一起组成了基本的操作系统结构,它们让用户可以管理文件、运行程序并使用系统。

    Linux开机后,内核启动,激活内核空间,抽象硬件、初始化硬件参数等,运行并维护虚拟内存、调度器、信号及进程间通信(IPC)。

    内核启动后,再加载Shell和用户应用程序,用户应用程序使用C\C++编写,被编译成机器码,形成一个进程,通过系统调用(Syscall)与内核系统进行联通。进程间交流需要使用特殊的进程间通信(IPC)机制。

    看完了Linux架构,我们再来一起看看Android系统架构。Android的系统非常复杂和庞大,底层以Linux内核为基础,上层采用带有虚拟机的JAVA层,通过JNI技术,将上下层打通。

    先来看一张Google提供经典Android架构图,从上往下依次为应用层(System Apps)、应用框架层(Java API Framework)、运行层(系统Native库和Android运行时环境)、硬件抽象层(HAL)、Liunx 内核(Marco Kernel)。每一层都有对应的进程、系统库。

     

    • 应用层(System Apps)

    该层中包含所有的Android应用程序,包括电话、相机、日历等,我们自己开发的Android应用程序也被安装在这层;大部分的应用使用JAVA开发,现在Google也开始力推kotlin进行开发

     

    • 应用框架层(Java API Framework)

    这一层主要提供构建应用程序是可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用API来构建自己的应用程序。

     

    • 运行层

        1)系统Native库

          Android包含一些C/C++库,这些库能被Android系统中不同的组件使用

        2)Android运行时环境

         Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。虚拟机也在该层启动。

    每个Android应用都有一个专有的进程,这些进程每个都有一个Dalivik虚拟机实例,并在该实例中运行。

     

    • 硬件抽象层(HAL)

         Android的硬件驱动与Linux不同,传统的Liunx内核驱动完全存在于内核空间中。但是Android在内核外部增加了一个硬件抽象层(HAL-Hardware Abstraction Layer),把一部分硬件驱动放到了HAL层。

         为什么Android要这么做呢?

         Linux内核采用了GPL协议,如果硬件厂商需要支持Linux系统,就需要遵照GPL协议公开硬件驱动的源代码,这势必会影响到硬件厂家的核心利益。

        Android的HAL层运行在用户空间,HAL是一个“空壳”,Android会根据不同的需要,加载不同的动态库。这些动态库由硬件厂家提供。硬件厂家把相关硬件功能写入动态库,内核中只开放一些基本的读写接口操作。这样一些硬件厂家的驱动功能就由内核空间移动到了用户空间。

        Android的HAL层遵循Apache协议,并不要求它的配套程序,因此厂家提供的驱动库不需要进行开放,保护了硬件厂家的核心利益。

     

    • Liunx 内核(Marco Kernel)

    Android平台的基础是Linux内核,比如ART虚拟机最终调用底层Linux内核来执行功能。Linux内核的安全机制为Android提供相应的保障,也允许设备制造商为内核开发硬件驱动程序。

     

    下一节将会一起来看看Android系统是如何启动的,欢迎关注我,谢谢!

    微信公众号:IngresGe

     

    展开全文
  • Android系统图库源码

    热门讨论 2011-12-09 21:48:04
    Android系统图库源码、Android系统图库源码、Android系统图库源码
  • 使用Android Studio导入Android系统源码

    万次阅读 多人点赞 2018-11-08 17:00:55
    在之前的工作中,由于不仅要分析和调试Android系统源码中Framework以及Telephony部分的Java代码,而且还要兼顾RIL和Modem相关的C/C++代码。然而Android Studio对于C/C++代码的支持并不是很好,...

    转载请注明出处:https://blog.csdn.net/turtlejj/article/details/83857897,谢谢~

     

            在之前的工作中,由于不仅要分析和调试Android系统源码中Framework以及Telephony部分的Java代码,而且还要兼顾RIL和Modem相关的C/C++代码。然而Android Studio对于C/C++代码的支持并不是很好,所以我一直使用的是Source Insight来阅读代码。

            后来由于工作的调整,对于C/C++代码的关注少了很多,因此转而使用Android Studio来阅读代码。不得不说,Android Sutdio对于Android的开发跟调试要优于Source Insight太多太多。不仅可以快速的查找到想要查找的类和方法,更可以对系统进程打断点进行单步调试,从而在遇到问题时,不再需要进行“对出问题的模块加入debug log -> 重新编译模块 -> adb push -> 复现问题 -> 抓log -> 重新分析log”的操作,极大地提升了分析问题的效率。

            本篇文章会讲解如何使用Android Studio导入系统源码。关于如何使用Android Studio对系统源代码进行单步调试,请看文章《使用Android Studio对Android系统源码进行单步调试》。

     

    使用Android Studio导入系统源码

            在这里我们默认大家已经下载好了Android系统的源代码,关于如何下载,网上有很多详尽的教程,我这里就不再过多的赘述,不会的同学可以自行百度。

            PS: 使用Android Studio导入系统源代码需要对代码进行一定的编译操作,如果有些同学使用的是Windows系统,可以尝试在Cygwin下进行编译,或者将在Linux下编译生成的三个产物拷贝到Windows的源代码根目录下,也可以起到一样的效果。

            进入正题,在下载好代码之后,我们需要对代码进行编译操作,对于目前比较新的Android 8.0以及9.0版本,我这里推荐使用Ubuntu 16.04的版本进行编译,编译过程中一般不会遇到什么问题 (使用Ubuntu 18.04的话,可能会遇到一些坑,我在《Ubuntu 18.04 编译安卓系统源码 及 adb连接手机遇到的问题详解》里列举了所有我遇到的问题以及解决方法,有需要的同学可以参考)。

            这里需要执行以下四条命令:

            1. "source build/envsetup.sh" (source可以用 . 代替,即". build/envsetup.sh")

            2. "lunch",并选择要编译的项目

            3. "make idegen -j4" (这里的 -j4 表示用4线程来编译,可以不加)

            4. "sudo development/tools/idegen/idegen.sh" (我的电脑需要管理员权限才能执行成功,所以我一般会在前面加上"sudo")

     

            下面进行分布讲解:

            1. 进入系统源码的根目录(即可以看到frameworks、kernel等等文件夹的那一级目录),执行". build/envsetup.sh"命令:

    xxxxxx@xxxxxx-Ubuntu:~/code/android$ . build/envsetup.sh 
    including device/generic/mini-emulator-arm64/vendorsetup.sh
    including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
    including device/generic/mini-emulator-x86_64/vendorsetup.sh
    including device/generic/mini-emulator-x86/vendorsetup.sh
    including device/qcom/common/vendorsetup.sh
    including vendor/qcom/proprietary/common/vendorsetup.sh
    including sdk/bash_completion/adb.bash

            2. 而后,继续执行"lunch"命令,并选择你想要编译的那个项目,这里我选了2,即编译 aosp_arm64-eng:

    xxxxxx@xxxxxx-Ubuntu:~/code/android$ lunch
    
    You're building on Linux
    
    Lunch menu... pick a combo:
         1. aosp_arm-eng
         2. aosp_arm64-eng
         3. aosp_mips-eng
         4. aosp_mips64-eng
         5. aosp_x86-eng
         6. aosp_x86_64-eng
    
    Which would you like? [aosp_arm-eng] 2
    
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=8.1.0
    TARGET_PRODUCT=aosp
    TARGET_BUILD_VARIANT=arm64-eng
    TARGET_BUILD_TYPE=release
    TARGET_PLATFORM_VERSION=OPM1
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm64
    TARGET_ARCH_VARIANT=armv8-a
    TARGET_CPU_VARIANT=kryo300
    TARGET_2ND_ARCH=arm
    TARGET_2ND_ARCH_VARIANT=armv7-a-neon
    TARGET_2ND_CPU_VARIANT=cortex-a9
    HOST_ARCH=x86_64
    HOST_2ND_ARCH=x86
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-4.15.0-38-generic-x86_64-with-Ubuntu-18.04-bionic
    HOST_CROSS_OS=windows
    HOST_CROSS_ARCH=x86
    HOST_CROSS_2ND_ARCH=x86_64
    HOST_BUILD_TYPE=release
    BUILD_ID=OPM1.171019.026
    OUT_DIR=out
    AUX_OS_VARIANT_LIST=
    ============================================

            3. 前面两步是对编译环境进行配置,接下来执行"make idegen -j4",并等待(屏幕会输出很多log,这里只贴出最后部分):

    xxxxxx@xxxxxx-Ubuntu:~/code/android$ make idegen -j4
    ......
    
    [100% 765/765] Install: out/host/linux-x86/framework/idegen.jar
    
    #### make completed successfully (03:16 (mm:ss)) ####

            4. 看到以上输出以后,执行"sudo development/tools/idegen/idegen.sh",并继续等待,这个过程可能比较长,不要着急

    xxxxxx@xxxxxx-Ubuntu:~/code/android$ sudo development/tools/idegen/idegen.sh
    [sudo] xxxxxx 的密码: 
    Read excludes: 9ms
    Traversed tree: 127108ms

            完成以上四个步骤之后,会发现在源码根目录下出现了三个新的文件(也有可能是两个)

            1. android.iml (记录项目所包含的module、依赖关系、SDK版本等等,类似一个XML文件)

            2. android.ipr (工程的具体配置,代码以及依赖的lib等信息,类似于Visual Studio的sln文件)

            3. android.iws (主要包含一些个人的配置信息,也有可能在执行上述操作后没有生成,这个没关系,在打开过一次项目之后就会自动生成了)

     

            "android.iml"和"android.ipr"一般是"只读"的属性,我们这里建议大家,把这两个文件改成可读可写,否则,在更改一些项目配置的时候可能会出现无法保存的情况,执行如下两条命令即可。

    sudo chmod 777 android.iml
    sudo chmod 777 android.ipr

     

            如果你的电脑性能足够好(内存大于16G,代码下载在SSD上),那么可以直接打开Android Studio,点击"Open an existing Android Studio project"选项,找到并选中刚刚生成的"android.ipr"文件,点击OK,就可以开始导入项目了。 第一次导入,这个过程可能会持续很久,几十分钟或者超过一个小时。不过成功之后,以后再打开项目就会快很多了。

            如果电脑性能一般的话,我建议,可以在导入项目前,手动对"android.iml"文件进行一下修改,可以使我们导入的时间尽可能的缩短一些。

            首先,要保证"android.iml"文件已经添加了"可写入"的属性(上文中已经介绍了如何修改文件属性)。

            接下来,使用文本编辑器打开"android.iml"文件,并执行以下修改(仅代表我的个人习惯,也可以根据同学们的喜好自己调整):

            1. 搜索关键字"orderEntry",我一般会将所有带有这个关键字的标签项全部删除,仅保留以下三行,大概如下

    ......
        </content>
        <orderEntry type="sourceFolder" forTests="false" />
        <orderEntry type="inheritedJdk" />
        <orderEntryProperties />
      </component>
    </module>

            2. 搜索”excludeFolder“关键字,对这里进行一些修改,将我们不需要看的代码Exclude掉。通过这个步骤,能极大地提升第一次加载项目的速度。

            等项目加载完成后,我们还可以通过Android Studio对Exclude的Module进行调整,所以也不用害怕这里Exclude掉了有用的代码,或少Exclude了一部分代码,在项目加载完以后再进行调整就行了。

            以下是我的配置,大家可以参考(由于我比较关注Framework以及Telephony相关的代码,所以重点保留了这两部分,而其他一些如kernel、bootloader的代码,我就Exclude掉了,同学们也可以根据自己的需求来进行修改)。

    <excludeFolder url="file://$MODULE_DIR$/.repo" />
    <excludeFolder url="file://$MODULE_DIR$/art" />
    <excludeFolder url="file://$MODULE_DIR$/bionic" />
    <excludeFolder url="file://$MODULE_DIR$/bootable" />
    <excludeFolder url="file://$MODULE_DIR$/build" />
    <excludeFolder url="file://$MODULE_DIR$/compatibility" />
    <excludeFolder url="file://$MODULE_DIR$/dalvik" />
    <excludeFolder url="file://$MODULE_DIR$/developers" />
    <excludeFolder url="file://$MODULE_DIR$/developers/samples" />
    <excludeFolder url="file://$MODULE_DIR$/development" />
    <excludeFolder url="file://$MODULE_DIR$/device/google" />
    <excludeFolder url="file://$MODULE_DIR$/device/sample" />
    <excludeFolder url="file://$MODULE_DIR$/docs" />
    <excludeFolder url="file://$MODULE_DIR$/external" />
    <excludeFolder url="file://$MODULE_DIR$/flashing-files" />
    <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs" />
    <excludeFolder url="file://$MODULE_DIR$/kernel" />
    <excludeFolder url="file://$MODULE_DIR$/libcore" />
    <excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
    <excludeFolder url="file://$MODULE_DIR$/out" />
    <excludeFolder url="file://$MODULE_DIR$/pdk" />
    <excludeFolder url="file://$MODULE_DIR$/platform_testing" />
    <excludeFolder url="file://$MODULE_DIR$/prebuilt" />
    <excludeFolder url="file://$MODULE_DIR$/prebuilts" />
    <excludeFolder url="file://$MODULE_DIR$/shortcut-fe" />
    <excludeFolder url="file://$MODULE_DIR$/test" />
    <excludeFolder url="file://$MODULE_DIR$/toolchain" />
    <excludeFolder url="file://$MODULE_DIR$/tools" />

            完成之后,按照上面说的步骤,使用Android Studio选中"android.ipr"打开项目即可。

     

    优化Android Studio的配置

            在打开系统源代码后,我们还可以对Android Studio进行一些配置,使得我们可以更好的进行代码阅读。

        1. Exclude不需要的代码目录

            点击"File -> Project Structure...",中间的窗口选择"android"(首字母小写的那一个),在弹出的窗口中左边栏中选择"Modules",而后在右边的窗口中选择"Sources"。在这里我们可以看到项目的所有代码目录,我们可以选中不需要的module,并点击上面的"Excluded"按钮,当被选中的目录变为橙色,即表示完成Exclude操作;如果想要取消对某代码目录的Exclude操作,选中该目录,再次点击"Excluded"按钮,等待目录变为蓝色即可。

     

        2. 选择项目的SDK版本

            点击"File -> Project Structure...",中间的窗口选择"android"(首字母小写的那一个),在弹出的窗口中左边栏中选择"Modules",而后在右边的窗口中选择"Dependencies"。在下拉菜单中选择系统源代码相应的SDK版本(如:8.0的代码就选择API 26,9.0的版本就选择API 28)。

            如果在下拉菜单中没有找到相应的SDK版本,就打开Android Studio自带的SDK Manager下载即可。

            PS: 这步非常关键,如果这里不选择Android API,而是使用JDK 1.8之类的话,无法进行系统源码的单步调试。

     

        3. 指定项目的minSdkVersion

            在阅读源代码的时候,经常会看到类似的这种错误"Field requires API level xx (current min is 1): android.xx.xx",这是由于我们只对项目指定了targetSdkVersion,但没有指定minSdkVersion。

            解决办法如下:

            点击"File -> Project Structure...",在弹出的窗口中左边栏中选择"Modules",中间的窗口选择"Android"(首字母大写的那一个),而后在右边的窗口中选择"Structure"。如下图所示,将这三行配置改为你自己的代码目录即可(不一定非要使用这个AndroidManifest.xml文件以及res和assets目录,你可以选择你喜欢的任意一个),完成后点击Apply或者OK。

            接下来,找到刚刚选择的那个AndroidManifest.xml,打开并在manifest标签下的任意一行添加如下代码并保存即可

    <uses-sdk android:minSdkVersion="26" />

             这里的数字根据你源代码的版本来填写,比如你导入的是8.0的源代码,就写26;9.0的源代码就写28,以此类推。由于是系统源代码,所以minSdkVersion与前面第2步中设置的Android API版本保持一致即可。

        4. 增加打开代码文件的数量以及对代码标签页显示的优化

            Android Studio默认只能打开10个代码文件,且文件打开多了以后显示不开的文件还会被隐藏,需要点击最右边的箭头才能查看。而最致命的是,如果不小心修改了某个文件,在标签页上,不会有任何的提示

            其实,我们可以通过修改设置改变这种情况,从而使得我们更好的阅读代码。

            点击"File -> Settings...",在弹出的窗口中左边栏中选择"Editor -> General -> Editor Tabs",而后在右边的窗口中修改三个选项:

            1. 取消勾选"Show tabs in single row"    ->   使得文件可以在多行进行显示,而不会被隐藏

            2. 勾选"Mark modified tabs with asterisk"    ->    在标签栏中,对被修改但尚未保存的文件加上一个星号进行提示

            3. 将"Tab limit"后面的数字修改为你希望最多同时打开文件的数量,比如"20"

     

            修改后效果如下:

            以上的修改,都是我在阅读Android源代码时遇到的不便,因而总结出来的解决方法,希望能对大家有所帮助。

    展开全文
  • 在开始研究Android系统之前,我们要准备好一些开发的资料,比如Ubuntu,源码,开发资料等,Android系统本身来说,非常的庞大,应用使用的是JAVA语言,底层使用C/C++,所以,如果条件允许的话,尽可能的多掌握一些吧...
  • 谷歌工程师多图详解Android系统架构【PDF】

    千次下载 热门讨论 2014-02-13 17:07:45
    Google的一位工程师Sans Serif 发布了一篇博文非常清楚地描述了Android 系统架构,中国移动通信研究院院长黄晓庆在新浪微博上推荐了该文,并认为文中对 Android的介绍很好,您可以看一下Google工程师眼中的Android ...
  • 2019的最佳Android系统 | 运行在台式机、笔记本手提电脑的安卓Android系统 适用于PC 2019的最佳Android操作系统 2019年3月1日团队技术探索Android 您是否知道,即使有几个升级版本,如Windows 10和10.1,即使这样...
  • Android系统Android系统架构简介

    千次阅读 2015-06-17 02:55:30
    概述Android系统架构如下图: 从上往下一共是四层: 应用程序层、应用程序框架层、函数库与Android运行时层、Linux内核层。下面分别介绍各层:分层介绍应用程序层包含系列的Android核心应用程序,大部分的Android...
  • Kali远程控制Android系统(Metasploit)

    万次阅读 多人点赞 2019-06-24 22:42:55
    一、查看Metasploit工具中可以在Android系统下使用的payload类型 可以看到有9种可以在Android下使用的payload 二、端口映射、以及软件签名问题 端口映射问题 如果我们的手机与使用的计算机处在同一局域网,...
  • Android系统截屏功能提取Demo

    千次下载 热门讨论 2014-09-15 21:34:58
    Android系统截屏功能提取的演示代码,文章在这里http://blog.csdn.net/xu_fu/article/details/39268771
  • Android系统启动流程

    万次阅读 多人点赞 2019-02-12 17:35:34
    在此说明,此文章只是个人的一个关于“Android系统启动流程”的一个总结,没什么源码。 Android系统启动流程: 1、启动电源以及系统启动: 当电源键按下时引导芯片代码从预定义的地方(固化在ROM)开始执行。加载...
  • 要学会分析系统的启动log信息,首先得了解Android系统的启动过程,建议先阅读《Android内核开发:图解Android系统的启动过程》这篇文章,它详细介绍了Android系统的启动过程。其次,你需要知道如何抓取系统启动log信...
  • Android系统源代码情景分析》

    千次下载 热门讨论 2012-12-09 12:16:26
    Android系统源代码情景分析》随书光盘内容(源代码) 目录如下: 第1篇 初识Android系统 第1章 准备知识 1.1 Linux内核参考书籍 1.2 Android应用程序参考书籍 1.3 下载、编译和运行Android源代码 ...
  • Android 系统架构图

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

    千次阅读 2019-04-12 14:01:25
    本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制。虽然Android系统非常庞大且错综复杂,需要具备全面的技术...
  • android系统原理及开发要点详解

    千次下载 热门讨论 2011-05-08 19:04:42
     第1章“Android系统概述”,概述Android系统方面的内容,包括智能手机平台的发展历程、Android系统的特点、Android的3种开发工作,以及Android的2种不同的开发方式。  第2章“Android系统开发综述”,介绍Android...
  • Android 系统的裁剪

    千次阅读 2019-06-04 15:11:32
    1.前言 大概几个月前,笔者收到一些信息,说道公司出去的Android工控系统冗余很多,希望做一些精简,但不管那时的笔者还是现在的笔者。都是一个大菜鸟啊,听到...可以跟着Android系统架构来进行一些动作。 1.驱动...
  • linux系统和Android系统的区别

    千次阅读 2019-05-27 13:36:57
    众所周知Google的Android系统跟Linux系统有着千丝万缕的关系,可究竟有什么关系呢?有人说Android是Android,Linux是Linux,两个只是kernel一样调度机制一样,其他没一毛钱关系,有人说Android说到底就是个Linux系统...
  • Android系统布局——android.R.layout详解

    万次阅读 2018-09-23 00:31:03
    布局文件,作为android中必不可少的一部分,android系统为了方便开发人员,在系统中定义了很多的布局文件。 系统布局文件和我们自定义的布局在写法用前缀android以示区别: 系统布局文件:android.R.layout.xxx; ...
  • 在上一遍文章《使用Android Studio导入Android系统源码》中,我们已经介绍了如何将Android源代码导入Android Studio进行阅读,这篇文章我们开始介绍,如何使用Android Studio对系统源代码打断点并进...
  • Android系统移植:驱动篇

    万次阅读 多人点赞 2017-05-24 15:05:23
    【导语】在Android系统移植中,有很重要的一个部分工作,就是为新平台上的硬件设备移植驱动程序。因为Android系统是基于Linux kernel内核构建,所以这里说的移植驱动程序,其实就是基于Android系统平台开发适应移动...
  • Android 系统字体

    千次阅读 2018-04-26 14:47:51
    转载:https://blog.csdn.net/rjdeng/article/details/485453130、对Android字库的认识:Android系统对字体的载入和Linux桌面很像,有一个Priority Order(优先级顺序)的,当然先是西方字符,然后是一些符号字体...
  • Android系统级深入开发——移植与调试 pdf

    千次下载 热门讨论 2012-08-31 11:30:25
    Android系统级深入开发——移植与调试 pdf
  • android系统架构解析

    万次阅读 多人点赞 2016-01-08 00:20:22
    出发点 由于楼主在学习android的时候并没有很系统地进行学习,知识点比较零碎,所以需要将自己的知识点进行系统的整理,...Android架构解析Google工程师多图详解Android系统架构Android基础之Android系统架构Androi
  • Android系统架构 五层结构

    万次阅读 2017-06-27 14:09:43
    Android系统架构 五层结构 Android系统架构(由下往上): Linux Kernel HAL Native C/C++ Libraries & Android Runtime Java Framework Applications Android系统架构
  • 在内容上,《Android系统源代码情景分析(含CD光盘1张)》结合使用情景,全面、深入、细致地分析了Android系统的源代码,涉及到Linux内核层、硬件抽象层(HAL)、运行时库层(Runtime)、应用程序框架层...
  • Android系统架构开篇

    万次阅读 多人点赞 2016-03-06 21:07:46
    一、Android概述Android系统非常庞大,底层是采用Linux作为基底,上层采用带有虚拟机的Java层,通过通过JNI技术,将上下打通,融为一体。下图是Google提供的一张经典的4层架构图,从下往上,依次分为Linux内核,系统...
  • 树莓派3B+安装Android 系统

    万次阅读 热门讨论 2019-08-04 17:10:26
    试水在树莓派3B+上安装Android 系统,受到了一个小哥安装成功的鼓舞(带度盘资源:https://www.cirmall.com/articles/396530)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 956,518
精华内容 382,607
关键字:

android系统