《android深入探索》第四章心得

看了本书第四章,我学会了下载、编译、测试android源代码和linux内核源代码:

  1. android源代码的下载、编译、测试:

① 配置Android源代码的下载环境:

创建一个用于存放下载脚本文件(repo)的目录(例如bin):

#mkdir ~/bin

#PATH=~/bin:$PATH

下载repo脚本文件用于下载安卓源码,repo文件实际上是用python脚本对Git的封装,主要是为了简化下载安卓源码的操作:

#curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

#chmod a+x ~/bin/repo

创建用于存放安卓源码的目录:

#mikdir android_source

#cd android_source

初始化:

#repo init –u https://android.googlesource.com/platform/manifest

开始下载安卓源码:

#repo sync

② 下载android源码中的一部分:

法一:使用命令#repo sync(后跟工程名)

法二:使用#git clone命令

两种方法的区别:前者会在当前目录生成一个隐藏目录.repo,该目录存放了下载android源码所需的全部信息;前者下载指定工程的源码会按实际路径存放,后者只会建立工程目录,并不会建立层次路径结构。

③ 编译android源码:

初始化编译环境:#source build/envsetup.sh 或# .build/envsetup.sh

选择目标:#lunch full-eng

编译安卓源码:#make (若为四核)#make j4

④ 编译完成后,生成out目录,用来存放android源码生成的目标文件。

  • out文件夹目录结构如下所示:
    out/
    -- CaseCheck.txt
    -- casecheck.txt
    -- host
        -- common
        -- linux-x86/darwin-x86
    -- target(如果编译时候定义TARGET_STRIP_MODULE=false的话,这个目录为debug/target)
        -- common
        -- product

Out目录的直接子目录:host、target。

host目录主要包含编译过程中需要的一些java library,target目录中的目标文件(.jar、.so、.img等都可以在android系统上运行),host目录的结构如下所示:
out/host/
-- common
    -- obj(JAVA库)
-- linux-x86/darwin-x86
    -- bin(二进制程序)
    -- framework(JAVA库,*.jar文件)
    -- lib(共享库*.so)
    -- obj(中间生成的目标文件)
out/target/generic目录包含最终要使用的目标文件(system.img、ramdisk.img、userdata.img),安卓系统中大多程序都在system目录中,包括apk应用程序。out/target/generic/system目录结构和linux根目录类似,但是android也增加了许多特有的目录,如app、media目录等。

target目录的结构如下所示:
out/target/
-- common
    -- R (资源文件)
    -- docs
    -- obj (目标文件)
        -- APPS(包含了JAVA应用程序生成的目标,每个应用程序对应其中一个子目录,将结合每个应用程序的原始文件生成Android应用程序的APK包)
        -- JAVA_LIBRARIES(包含了JAVA的库,每个库对应其中一个子目录)
-- product
    -- generic
        -- android-info.txt
        -- clean_steps.mk
        -- data(存放数据的文件系统)
        -- obj
            -- APPS(包含了各种JAVA应用,与common/obj/APPS相对应,但是已经打成了APK包)
            -- SHARED_LIBRARIES(存放所有动态库)
            -- STATIC_LIBRARIES(存放所有静态库)
        -- ramdisk.img(内存盘的根文件系统映像)
        -- root
        -- symbols
        -- system(存放主要的文件系统)
        -- system.img(文件系统的映像)
        -- userdata-qemu.img(模拟器使用的数据文件)
        -- userdata.img(数据内容映像)
其中common目录表示通用的内容,product中则是针对产品的内容。

⑤ 将apk作为安卓内置程序发布:将apk嵌入到镜像文件(如system.img):直接将apk文件复制到system/app目录下,再从system目录生成system.img文件。

⑥ 用模拟器测试生成的镜像文件(system.img):

需要一个mkyaffs2image命令行工具,将原来的system.img文件备份

然后重新生成system.img文件#mkyaffs2image system system.img

使用模拟器测试新生成的system.img文件:#emulator –avd myavd –system system.img –data userdata.img

 

      2.linux内核源码的下载、编译

① 下载linux内核源码:

#git clone https://android.googlesource.com/kernel/common.git

进入common目录:#git branch –a 查看当前有哪些远程版本库

导出最新linux内核:#git checkout –b android-3.0 remotes/origin/android-3.0

② 安装android内核编译环境:

配置内核源码下的Makefile文件,找到ARCH、CROSS_COMPILE并设置:

“ARCH    ?= arm

CROSS_COMPILE?= arm-none-linux-gnueabi-“

安装交叉编译器

准备工作:将arm-linux-gcc-4.3.2.tgz文件和arm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2文件复制到工作目录。

解压编译器:

#tar zxvf(前者文件名) -C /

#tar jxvf(后者文件名-C /

验证交叉编译器是否安装成功:#ls /usr/local/arm -1

安装libncurses5:#apt-get install libncurses5-dev

③ 编译和配置linux内核

#export PATH=/root/compilers/arm-none-linux-gnueabi/bin:$PATH

#cd ~/linux_kernel

#make clean

#make

成功编译linux内核后,会在(linux内核源码根目录)/arch/arm/boot目录生成一个zImage文件。

测试linux内核:

#emulator –avd myavd –kernel /root/kernel/goldfish/arch/arm/boot/zImage

     3.Android移植主要是linux内核的移植,linux内核的移植主要是linux驱动的移植。

 

转载于:https://www.cnblogs.com/cqj0818/p/5431015.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值