1. Android源码目录介绍

bionic/    C库build/    编译系统规则基础开发包配置cts/    兼容性测试dalvik/    java虚拟机external/    Android引入的第三方模块frameworks/    Android核心框架hardware/    硬件适配层(HAL)system/    底层文件系统库,应用和组件device/    产品目标目录out/    目标文件目录packages/appAndroid原生的appsdk/ndk    Android原生sdk

2. Android开发环境搭建

2.1 安装Ubuntu

2.2 配置开发环境

sudo apt-get install git-core gnupg flex bison gperf zipsudo apt-get install curl libc6-dev-i386 lib32ncurses5-devsudo apt-get install lib32readline-gplv2-dev lib32z-dev

2.3 下载jdk到Ubuntu并安装,配置环境变量,打开.bashrc文件,添加如下内容

export JAVA_HOME=jdk目录export PATH=$JAVA_HOME/bin:$PATHexport classPath=$JAVA_HOME

3. Android开机模式

Android设备的两种开机模式:在uboot阶段会进行判断(比如是否有组合键按下)是否进入recovery模式。

recovery升级模式:挂起system分区,启动recovery分区上的内核和文件系统;差量包升级,将差量包与system分区进行对比,将不同的内容新增(写操作)到system分区上;全包升级,将整个包覆盖(写操作)到system分区。

正常开机模式:启动system分区上的内核和文件系统。

 

4. Android.mk 解析

以下是一个简洁版的Android.mk文件,以它为例进行分析

LOCAL_PATH:=$(call my-dir)        获取当前模块的相对路径(调用my-dir函数),此时MAKEFILE_LIST变量被设置为当前Android.mk所在路径include $(CLEAR_VARS)             清空当前环境变量,此时MAKEFILE_LIST变量被设置为build/core/路径LOCAL_MODULE:=test                编译生成的模块名称LOCAL_SRC_FILES:test.c xxx.c      编译该模块需要的所有源文件include $(BUILD_EXECUTABLE)       编译所生成的目标文件格式 

4.1 Android编译相关的规则、配置大多在build/ 路径下,通过在build/下搜索my-dir可知,该函数定义在build/core/definitions.mk中

############################################################# Retrieve the directory of the current makefile############################################################ Figure out where we are.define my-dir$(strip \  $(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \  $(if $(filter $(CLEAR_VARS),$(LOCAL_MODULE_MAKEFILE)), \    $(error LOCAL_PATH must be set before including $$(CLEAR_VARS)) \   , \    $(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \   ) \ )endef

my-dir函数的功能就是从MAKEFILE_LIST中取出并执行最后一个makefile,取出该makefile中所有符合CLEAR_VARS模式的单词,如果有符合的就打印错误,否则返回当前makefile所在的路径。

4.2 通过在build/下搜索CLEAR_VARS可知,可知该变量定义在build/core/config.mk中

CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mkbuild/目录下搜索BUILD_SYSTEM可知其定义在build/core/main.mk文件中BUILD_SYSTEM := $(TOPDIR)build/core

所以CLEAR_VARS:=build/core/clear_vars.mk,这个是makefile中规则模板使用的所有变量,全部置空,只保留了最后一个变量MAKEFILE_LIST := $(lastword $(MAKEFILE_LIST))即clear_vars.mk文件,所以这个脚本不能放到LOCAL_PATH的前面,否则得到的就是build/core/路径,而不是当前模块所处的路径。

【注:】保留最后一个MAKEFILE_LIST变量是为了$(call my-dir)时就不需要每次迭代数千个条目,同时确保不会丢失当前makefile文件中任何我们期望得到的内容。

 

更多相关文章

  1. 1. Android(安卓)环境搭建
  2. 关于android avd目录的设置
  3. android内部外部存储卡路径的获取
  4. 设置Android(安卓)SDK tools工作路径环境变量
  5. Android根据文件路径使用File类获取文件相关信息
  6. android keytool 不是内部命令或外部命令在 (win7下不能用的解决
  7. katalon设置Android(安卓)SDK路径
  8. Android根据文件路径使用File类获取文件相关信息
  9. 《Android开发从零开始》——1.Android开发环境的搭建

随机推荐

  1. Android(安卓)ANR原因以及开发时如何预防
  2. Android底层开发之JNI编程
  3. android脱壳,手机端实现,Fdex2
  4. Android(安卓)getSystemService()的API
  5. Android(安卓)ListView改变数据源
  6. Android(安卓)解决输入法遮挡布局控件的
  7. android bluedroid调试
  8. Android中string.xml,动态改变数据方法
  9. Android(安卓)8.1移植:针对某个APK做到wif
  10. Android(安卓)ViewPager2实现无限轮播