Android入门

1.下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html/jdk-8u31-windows-i586.exe, 安装。

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环境变量。

3.下载Eclipse:http://www.eclipse.org/downloads/eclipse-java-luna-SR1a-win32.zip , 解压。

4. 启动Eclipse,选择Help>InstallNewSoftware,点击右上角的Add,安装ADTPlugin: https://dl-ssl.google.com/android/eclipse/

 5. 学习文档和sample,开发者讨论,开源代码网址:

下载android源代码:

官方地址,要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

 文档:

http://developer.android.com/training/index.html

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              (厂商定制代码)

 

Android入门

 

Android入门