《Android深度探索卷一》读书笔记四

下载,编译和测试Android源代码

  1.配置Android源代码下载环境

  下载之前必须先在Linux终端执行一些命令配置环境。

  创建存放脚本文件的目录“mkdir ~/bin””PATH=~/bin:$PATH”;下载repo脚本文件“curl 地址 > ~/bin/repo””chmod a+x ~/bin/repo”;创建存放Android源代码的目录“mkdir android_source”“cd android_source”;初始化“repo init -u 地址”;

  2.开始下载Android源代码

  “repo sync”下载时占带宽,且会有4h或更长时间,也依机器性能而定。

  Android源代码目录:

        
  3.下载指定工程:

  方法1.“repo sync platfrom/工程名”。

其中获取相关信息通过文件manifest.xml:其中每一行代表一个工程,path表示工程路径,name表示工程名。还可知道当前源代码相关信息。

  方法2.“git clone 地址<工程名>”。

  4.编译Android源代码

  编译之前进入源代码根目录。

    4.1.初始化编译环境“source build/envsetup.sh”envsetup.sh脚本文件用来初始化编译命令,其中定义了一些shell函数。“mm”和“mmm”可以编译Android源代码中指定的工程。

    4.2.选择目标:“lunch full-eng”选择针对所有移动设备,Android模拟器有效,并打开所有调试选项。默认“full-eng”,可用序号选择其他。

    4.3.编译Android源代码“make”,4核可用“make -j4”。时间会长,编译成功后,在Android源代码根目录会生成out目录,所有编译的目标文件都在这个目录中。

    4.4.out文件夹目录结构如下所示:

  out/

  -- CaseCheck.txt

  -- casecheck.txt

  -- host

      -- common

      -- linux-x86/darwin-x86

  -- target(如果编译时候定义TARGET_STRIP_MODULE=false的话,这个目录为debug/target)

      -- common

      -- product

主要的两个目录为host和target,前者表示在主机(x86)生成的工具,后者表示目标机(模认为ARMv5)运行的内容。

 

  host目录的结构如下所示:

  out/host/

  -- common

      -- obj(Java库)

  -- linux-x86/darwin-x86

     -- bin(二进制程序)

      -- framework(JAVA库,*.jar文件)

      -- lib(共享库*.so)

      -- obj(中间生成的目标文件)

  host目录是一些在主机上用的工具,有一些是二进制程序,有一些是JAVA的程序。

 

  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(数据内容映像)

  5.将自己的APK作为Android内置程序发布

  apk是zip格式,odex格式文件是分离apk和classes.dex文件得到。复制工程目录到Android源代码目录/packagea/apps,在终端执行“mm”编译,成功后会在system/app目录中生成.apk和.odex文件。

  6.用模拟器测试system.img文件

  添加了新新程序,需新生成system.img文件。在<Android源代码目录>/out/target/product/generic目录下,执行“mkyaffs2image system system.img”生成新的system.img文件。

  在PATH中添加<Android SDK根目录>/tools目录,打开AVD,执行“emulator -avd myavd -system system.img -data userdata.img”,Android模拟器会用新的数据启动。该程序是嵌入了Android系统中,无法常规卸载。除非删除.apk和.odex文件,重新生成system.img文件启动Android模拟器。

posted @ 2016-04-27 22:48  大海里的鱼  阅读(169)  评论(0编辑  收藏  举报