Android 开发 及 编译系统

一、Android 的开发分为三个类型

移植开发移动设备系统;android 系统级开发;应用程序

可以把android 分为四个层次,从底层往上依次为:linux 内核、C/C++ 

库、java 框架和java 应用程序

1、移植开发移动设备:涉及到linux 内核(包括其驱动)

2、Android 系统级开发:涉及到C/C++库的开发及给上层java 框架;指的是扩展android 的框架或者是修改bug,这方面比较少,除非有些开发移动设备的厂商,比如做gps,可以往里面加入一些自己的特定系统东西,这可能导致一些不兼容。当然也可能是简单的修复bug。

3、Android 应用程序开发就是调用java的框架写应用程序,这应该是比较主流的开发,也就是给android 系统写应用程序。

简单的从上到下,android 应用程序需要有java 框架支持,比如它要发送短信,就需要java框架,java 框架其实就是将C/C++库包装成为了一个JNI,而实现具体的功能是C/C++库最后驱动硬件完成功能,这也就是linux 内核部分。

二、开发工作入门

根据上面所述,android 开发就分为基于sdk 开发和源代码开发。

1、SDK 开发,主要是应用程序开发。

2、源代码的开发,涉及到的知识有linux 操作系统基础知识、android 底层库等知识。

三、android 系统级开发概述

所谓framework,也就是系统级开发,虽然android 的framework 开发比较少,但是对其了解后更有利于整体开发的进行,当然很多设备厂商还是非常需要这些的。

1、android 系统架构

Linux 内核及驱动、C/C++框架、java 框架、java 应用程序。

1)Linux 内核及驱动

其中linux 内核及驱动是内核层的,系统总是需要操作系统的支持的,比如内存管理、进程管理、网络协议栈等。

2)android 的C/C++框架

系统C 库:用的是libc,没什么好说的,C 程序员都知道。

多媒体库:

SurFace Manager:显示子系统的管理器

LibWebCore:web 浏览器引擎,支持android 浏览器

SGL:skia 图形库,底层的2D 图形引擎

3D 库:OpenGL

FreeType:字体显示

Android 的运行环境,这个也应该属于这个框架里面的,android 的虚拟机叫做

Dalvik,运行环境就是由这个虚拟机和基础的java 类库组成。

3)android 应用框架

提供一系列的服务和系统,包括视图、内容提供器、资源管理器、通知管理器、活

动管理器。

视图非常丰富:list、grid、text box、button 等。

内容提供器是使得应用程序可以访问另一个程序的数据。

资源管理器是提供访问非代码的资源访问,如布局文件。

通知管理器,使得程序可以在状态栏中显示自定义的提示信息。

活动管理器,用来管理程序生命周期。

4)android 应用程序

Android 所有的应用程序都是用java 写的,当然现在好像也支持一些脚本语言,如

ruby,但是不支持C 开发,所谓支持C 开发是指jni 的形式。

二、Android Build 系统

Android Build 系统用来编译 Android 系统,Android SDK 以及相关文档。该系统主要由 Make 文件,Shell 脚本以及 Python 脚本组成。Build 系统中最主要的处理逻辑都在 Make 文件中,而其他的脚本文件只是起到一些辅助作用。

整个 Build 系统中的 Make 文件可以分为三类:

第一类是 Build 系统核心文件,此类文件定义了整个 Build 系统的框架,而其他所有 Make 文件都是在这个框架的基础上编写出来的。Build 系统核心文件全部位于 /build/core目录下。

第二类是针对某个产品(一个产品可能是某个型号的手机或者平板电脑)的 Make 文件,这些文件通常位于 device 目录下,该目录下又以公司名以及产品名分为两级目录。对于一个产品的定义通常需要一组文件,这些文件共同构成了对于这个产品的定义。

第三类是针对某个模块的 Make 文件。整个系统中,包含了大量的模块,每个模块都有一个专门的 Make 文件,这类文件的名称统一为“Android.mk”,该文件中定义了如何编译当前模块。Build 系统会在整个源码树中扫描名称为“Android.mk”的文件并根据其中的内容执行模块的编译。

android编译步骤如下:

1. source build/envsetup.sh: 将envsetup.sh里的所有用到的命令加载到环境变量

2. lunch:选择平台编译选项

3. make:执行编译。make 的参数“-j”指定了同时编译的 Job 数量,该值通常是编译主机 CPU 支持的并发线程总数的 1 倍或 2 倍,如:make –j8

整个 Build 系统的入口文件是源码树根目录下名称为“Makefile”的文件,当在源代码根目录上调用 make 命令时,make 命令首先将读取该文件。Makefile 文件的内容只有一行:“include build/core/main.mk”。该行代码的作用很明显:包含 build/core/main.mk 文件。在 main.mk 文件中又会包含其他的文件,其他文件中又会包含更多的文件,这样就引入了整个 Build 系统。

Build 结果的目录结构

所有的编译产物都将位于 /out 目录下,该目录下主要有以下几个子目录:

/out/host/:该目录下包含了针对主机的 Android 开发工具的产物。即 SDK 中的各种工具,例如:emulator,adb,aapt 等。

/out/target/common/:该目录下包含了针对设备的共通的编译产物,主要是 Java 应用代码和 Java 库。

/out/target/product/<product_name>/:包含了针对特定设备的编译结果以及平台相关的 C/C++ 库和二进制文件。其中,<product_name>是具体目标设备的名称。

/out/dist/:包含了为多种分发而准备的包,通过“make disttarget”将文件拷贝到该目录,默认的编译目标不会产生该目录。

Build 生成的镜像文件

Build 的产物中最重要的是三个镜像文件,它们都位于 /out/target/product/<product_name>/ 目录下。这三个文件是:

system.img:包含了 Android OS 的系统文件,库,可执行文件以及预置的应用程序,将被挂载为根分区。

ramdisk.img:在启动时将被 Linux 内核挂载为只读分区,它包含了 /init 文件和一些配置文件。它用来挂载其他系统镜像并启动 init 进程。

userdata.img:将被挂载为 /data,包含了应用程序相关的数据以及和用户相关的数据。

时间: 2024-10-29 19:10:49

Android 开发 及 编译系统的相关文章

Android开发快速入门(环境配置)

Android是一种激动人心的开源移动平台,它像手机一样无处不在,得到了Google以及其他一些开放手机联盟成员(如三星.HTC.中国移动.Verizon和AT&T等)的支持,因而不能不加以学习,否则你承担不起为此付出的代价. 好在Android开发入门很容易,即使没有Android手机都没关系,只需有一台可供安装Android SDK和设备模拟器的计算机即可. 本章首先介绍如何安装所有的开发工具,然后再创建一个可运行的应用——Android版“Hello, World”.如果你并非Androi

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件. 经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86

android开发及测试工具

1.Buckfacebook开源的Android编译工具,效率是ant的两倍.主要优点在于:(1) 加快编译速度,通过并行利用多核cpu和跟踪不变资源减少增量编译时间实现(2) 可以在编译系统中生成编译规则而无须另外的系统生成编译规则文件(3) 编译同时可生成单元测试结果(4) 既可用于IDE编译也可用于持续集成编译(5) facebook持续优化中项目地址:https://github.com/facebook/buck 2.Android Maven PluginAndroid Maven插

OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建

/******************************************************************************************** * OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建 * * 声明: * 1. 本人用的虚拟机是 VMware 10.0.5 64位: * 2. 本人测试过 Ubuntu 12.04.2.Ubuntu 12.04.4,.Ubuntu 14.04 版本,出现一些问题: * 1. U

Android 开发工具及测试工具 汇总

注明:  转自 外部网站 http://www.tuicool.com/articles/EFBjequ 主要介绍和Android开发工具和测试工具相关的开源项目.  Json2Java 根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson Annotations对应代码自动生成.期待后续的提取父类以及多url构建整个工程的功能 项目地址: https://github.com/jonfhancock/JsonToJava 在线演示: http://jsontojava.a

Android开发最佳实践---Futurice之见

原文链接:https://github.com/futurice/android-best-practices 本文是Futurice公司的Android开发人员总结的最佳实践,遵循这些准则可以避免重复制造轮子.如果你对iOS或者WindowsPhone开发感兴趣,那么也请看看iOS最佳实践和Windows客户端开发最佳实践. 第一版翻译自:http://blog.csdn.net/asce1885 Android开发技术日新月异, Github上也有较大更新, 故对原文有增删 CSDN的mar

Android开发技术周报 Issue#27

教程 Android开发技术前线第五期 (@MrSimp1e) 深入Android图形管道.Romain Guy的性能优化案例.图片加载框架Glide.模仿iOS的模糊视图,都是些不错的文章. Android内存优化之MAT工具使用教程系列 (@高建武_Gracker) 正所谓工欲善其事,必先利其器,在对Android应用进行内存优化MAT(Memory Analyzer Tool)是一把必不可少的利剑,MAT一个基于Eclipse的内存分析工具,是一个快速.功能丰富的JAVA heap分析工具

[转]Android开发最佳实践

——欢迎转载,请注明出处 http://blog.csdn.net/asce1885 ,未经本人同意请勿用于商业用途,谢谢—— 原文链接:https://github.com/futurice/android-best-practices 本文是Futurice公司的Android开发人员总结的最佳实践,遵循这些准则可以避免重复制造轮子.如果你对iOS或者Windows Phone开发感兴趣,那么也请看看iOS最佳实践和Windows客户端开发最佳实践. 概要 使用Gradle和推荐的工程结构

Android开发之入口Activity

原文:Android开发之入口Activity Android开发之入口Activity Adnroid App是如何确定入口Activity的? 难道就因为class的类名叫MainActivity,布局文件叫activity_main.xml? 如果这样认为,就大错特错了. 之所以能够确定入口Activity,是因为在应用的清单文件中有所配置,系统会根据应用的清单文件(AndroidManifest.xml)来确立. 如何确立,标志是什么? 我们来看一下清单文件,便一目了然: 对了,系统能够