• 《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驱动的移植。

     

  • 相关阅读:
    HDU 5642 King's Order 动态规划
    HDU 5640 King's Cake GCD
    HDU 5641 King's Phone 模拟
    HDU 5299 Circles Game 博弈论 暴力
    HDU 5294 Tricks Device 网络流 最短路
    HDU 5289 Assignment rmq
    HDU 5288 OO’s Sequence 水题
    星际争霸 虚空之遗 人族5BB 操作流程
    Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
    Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
  • 原文地址:https://www.cnblogs.com/cqj0818/p/5431015.html
Copyright © 2020-2023  润新知