1.下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html/jdk-8u31-windows-i586.exe, 安装。html
2.下载Android SDK:http://developer.android.com/tools/sdk/tools-notes.html/android-sdk_r24.0.2-windows.zip,解压。运行SDK manager下载SDK。SDK tools路径写入path环境变量。java
3.下载Eclipse:http://www.eclipse.org/downloads/eclipse-java-luna-SR1a-win32.zip , 解压。linux
4. 启动Eclipse,选择Help>InstallNewSoftware,点击右上角的Add,安装ADTPlugin: https://dl-ssl.google.com/android/eclipse/。android
5. 学习文档和sample,开发者讨论,开源代码网址:git
下载android源代码:github
官方地址,要FQ。 http://source.android.com/source/downloading.html 官方地址,要FQ。 http://android.git.kernel.org/ 不FQ在线可看。 https://github.com/android?page=2
不FQ在线可看。http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/
不FQ可看。 https://android.googlesource.com 算法
文档:shell
http://developer.android.com/training/index.htmlwindows
http://developer.android.com/guide/topics/fundamentals.html安全
http://android-developers.blogspot.com
http://code.google.com/edu/android/index.html
http://stackoverflow.com/
http://www.youtube.com/user/GoogleDevelopers
6. windows下载部分android源码:
1)下载git https://msysgit.github.com
2)在git bash中运行git clone https://android.googlesource.com/platform/packages/apps/Browser.git
7.windows下载framework源码:
1)下载git https://msysgit.github.com
2)在git bash中运行git clone https://android.googlesource.com/platform/frameworks/base
3) 在base目录下git tag 而后 git checkout android-sdk-4.0.1_r1
8.windows下载整个android源码 1) 在cygwin/home/Administratord/bin的.bash_profile文件下加上export PATH=~/bin:$PATH 2)curl --insecure https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 3)chmod a+x ~/bin/repo 4) git config --global http.sslverify "false" 5)repo init -u git://Android.git.linaro.org/platform/manifest.git -b android-2.3.5_r1 6)repo sync
9.windows下载kernel源码 1)git clone https://android.googlesource.com/kernel/goldfish.git 2)git branch -a 3)git checkout remotes/origin/android-gldfish-2.6.29
10.运行android源码 1)emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
11.运行linux kernel源码 1)emulator -kernel ./kernel/common/arch/arm/boot/zImage & 2)adb shell
12.Linux内核源代码版权遵循GNU License,而Android源代码版权遵循Apache License,前者在发布产品时,必须公布源代码,然后者无须发布源代码。若是把对硬件支持的全部代码都放在Linux驱动层,那就意味着发布时要公开驱动程序的源代码,而公开源代码就意味着把硬件的相关参数和实现都公开了,在手机市场竞争激烈的今天,这对厂家来讲,损害是很是大的。
13.内核开发时printk输出的日志信息保存在/proc/kmsg 用户空间中提供了轻量级的logger日志系统
LOGV("This is the log printed by LOGV in android user space.");
Log.i(LOG_TAG, "This is the log printed by Log.i in android user space.");
logcat
14.源代码部分:
编写一个驱动: kernel/common/drivers
编写HAL部分: hardware/libhardware/include/hardware hardware/libhardware/modules mmm hardware/libhardware/modules/hello make snod
编写jni部分: frameworks/base/services/jni
编写硬件访问服务 frameworks/base/core/java/android/os
15.Logger模块调用:
应用程序层调用应用程序框架层的Java接口,应用程序框架层的Java接口经过调用本层的JNI方法进入到系统运行库层的C接口,系统运行库层的C接口经过设备文件来访问内核空间层 的Logger驱动程序.Logger是轻量级的日志系统,以驱动程序形式实如今内核空间,用户空间分别提供了Java接口和C/C++接口来使用这个日志系统。 驱动程序代码在:kernel/common/drivers/staging/android/logger.c 应用框架层代码在:frameworks/base/core/java/android/util/Log.java jni代码: frameworks/base/core/jni/android_util_Log.cpp
16 .进程间通信: 有传统的管道(Pipe)、信号(Signal)和跟踪(Trace),这三项通讯手段只能用于父进程与子进程之间,或者兄弟进程之间;后来又增长了命令管道(Named Pipe), 使得进程间通讯再也不局限于父子进程或者兄弟进程之间;为了更好地支持商业应用中的事务处理,在AT&T的Unix系统V中,又增长了三种称为“System V IPC”的进程间通讯机制, 分别是报文队列(Message)、共享内存(Share Memory)和信号量(Semaphore);后来BSD Unix对“System V IPC”机制进行了重要的扩充,提供了一种称为插口(Socket)的 进程间通讯机制。Android系统没有采用上述提到的各类进程间通讯机制,而是采用Binder机制。Binder是一种进程间通讯机制,它是一种相似于COM和CORBA分布式组件架构, 通俗一点,实际上是提供远程过程调用(RPC)功能。由一系统组件组成,分别是Client、Server、Service Manager和Binder驱动程序,其中Client、Server和Service Manager 运行在用户空间,Binder驱动程序运行内核空间。 Service Manager和Binder驱动已经在Android平台中实现好,开发者只要按照规范实现本身的Client和Server组件 Service Manager在用户空间的源代码位于frameworks/base/cmds/servicemanager
广播机制倒是不可替代的,它和Binder机制不同的地方在于,广播的发送者和接收者事先是不须要知道对方的存在的,这样带来的好处即是, 系统的各个组件能够松耦合地组织在一块儿,这样系统就具备高度的可扩展性,容易与其它系统进行集成。
17.内存调用:
Ahshmem: frameworks/base/core/java/android/os/MemoryFile.java -> frameworks/base/core/jni/adroid_os_MemoryFile.cpp ->system/core/libcutils/ashmem-dev.c
18.ART运行时的垃圾收集机制,Dalvik虚拟机的垃圾收集机制都使用到了Mark-Sweep算法. 内存碎片问题可使用dlmalloc技术解决。内存不足问题则经过垃圾回收和在容许范围内增加堆大小解决.在Android5.0中,ART运行时取代了Dalvik虚拟机。 Android运行时ART,它的核心是OAT文件.在ART运行时中,类方法的执行方式有两种。一种是像Dalvik虚拟机同样,将其DEX字节码交给解释器执行; 另外一种则是直接将其本地机器指令交给CPU执行。ART之因此会比Dalvik快,是由于ART执行的是本地机器指令,而Dalvik执行的是Dex字节码.APK在安装时被执行了AOT。 AOT(Ahead Of Time)是相对JIT(Just In Time)而言的。也就是在APK运行以前,就对其包含的Dex字节码进行翻译,获得对应的本地机器指令,因而就能够在运行时直接执行了。 当一个进程试图访问一个文件时,SEAndroid会将进程和文件的安全上下文提取出来,根据安全策略规则,决定是否容许访问。
19.一个完整的刷ROM过程,包含如下两个步骤:
1)让设备进入到Fastboot模式,刷入一个recovery.img镜像
2) 让设备进入到Recovery模式,刷入一个包含system.img镜像和boot.img镜像的zip包 好在有不少现成的基于AOSP的第三方开源项目,能够编译出来在目前市场上大部分的手机上运行。其中,最著名的就是CyanogenMod了,简称CM。
采用Git来进行版本管理.由许许多多子项目组成,所以它在Git的基础上创建了一套本身的代码仓库,而且使用工具Repo进行管理。
20.UI的服务:
SurfaceFlinger服务在启动的过程当中,一共涉及到了三种类型的线程,它们分别是Binder线程、UI渲染线程和控制台事件监控线程。 SurfaceFlinger服务就是经过向这个帧缓冲区写入内容来绘制应用程序的用户界面的。Android系统在硬件抽象层中提供了一个Gralloc模块,封装了对帧缓冲区的全部访问操做。 链接上SurfaceFlinger服务以后,Android应用程序就能够请求SurfaceFlinger服务建立Surface。而当有了Surface后,Android应用程序就能够用来渲染本身的UI了。
21.Android源码结构:
Android 2.1
|-- Makefile
|-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性测试套件标准)
|-- dalvik (dalvik JAVA虚拟机)
|-- development (开发者须要的一些例程及工具)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (主要保护硬解适配层HAL代码)
|-- out (编译完成后的代码输出与此目录)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (文件系统库、应用及组件——C语言)
`-- vendor (厂商定制代码)