Android 1.6源码编译

作者: 安卓程序员小黄 | 来源:发表于2017-11-17 11:00 被阅读106次

    概述

    本篇为使用Ubuntu10.04编译Android 1.6源码的教程,使用的是清华的AOSP镜像,Ubuntu的版本和所需依赖的包等可以参考Android源码编译环境要求

    编译成功的环境

    1. Linux系统:Ubuntu10.04
    2. Android源码版本:Ubuntu10.04
    3. VMware Workstation版本: 12.1.0 build-3272444
    4. JDK版本:jdk-1_5_0_22-linux-amd64-rpm.bin
    5. gcc版本:4.3
    6. g++版本:4.3

    一、下载Ubuntu 10.04 64位操作系统镜像文件

    中国科学技术大学或者的网站中下载对应的iso文件,或者这个网址下载。

    二、创建虚拟机环境

    (1) 在VMware Workstation中创建一个64位的Linux系统,内存分配5G,硬盘60G。

    (2) 安装下载的Ubuntu系统镜像文件,过程略。

    三、修改软件下载源

    因为10.04版本上的软件源不支持下载,比如下载一个git,会出现“无法定位软件包 git”的错误。处理方式如下:

    (1)使用如下命令编辑source.list文件。

    sudo gedit /etc/apt/sources.list
    

    (2)替换source.list的文件内容如下:

    ## Major bug fix updates produced after the final release of the
    ## distribution.
    deb http://old-releases.ubuntu.com/ubuntu/ maverick main restricted
    deb-src http://old-releases.ubuntu.com/ubuntu/ maverick main restricted
    deb http://old-releases.ubuntu.com/ubuntu/ maverick-updates main restricted
    deb-src http://old-releases.ubuntu.com/ubuntu/ maverick-updates main restricted
     
    ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
    ## team. Also, please note that software in universe WILL NOT receive any
    ## review or updates from the Ubuntu security team.
    deb http://old-releases.ubuntu.com/ubuntu/ maverick universe
    deb-src http://old-releases.ubuntu.com/ubuntu/ maverick universe
    deb http://old-releases.ubuntu.com/ubuntu/ maverick-updates universe
    deb-src http://old-releases.ubuntu.com/ubuntu/ maverick-updates universe
     
    ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
    ## team, and may not be under a free licence. Please satisfy yourself as to
    ## your rights to use the software. Also, please note that software in
    ## multiverse WILL NOT receive any review or updates from the Ubuntu
    ## security team.
    deb http://old-releases.ubuntu.com/ubuntu/ maverick multiverse
    deb-src http://old-releases.ubuntu.com/ubuntu/ maverick multiverse
    deb http://old-releases.ubuntu.com/ubuntu/ maverick-updates multiverse
    deb-src http://old-releases.ubuntu.com/ubuntu/ maverick-updates multiverse
    

    (3)使用如下命令进行更新。

    sudo apt-get update
    
    

    四、安装依赖包

    使用如下命令安装10.04版本编译时所需要的依赖包

    sudo apt-get install git gnupg flex bison gperf build-essential \
      zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
      x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
      libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
      libxml2-utils xsltproc
    

    (1)安装Jdk1.5

    1.下载Jdk1.5

    前往下载地址下载Jdk1.5.

    2.安装Jdk1.5

    下载下来的安装包名称为jdk-1_5_0_22-linux-amd64-rpm.bin,将其复制到Soft/目录下,进入到该目录执行下列步骤。

    修改文件的可执行权限:

    chmod +x jdk-1_5_0_22-linux-amd64-rpm.bin
    

    解压文件,文件解压后,会产生一个jdk-1_5_0_22-linux-amd64.rpm文件:

    ./jdk-1_5_0_22-linux-amd64-rpm.bin
    

    安装文件,执行此命令后,会自动安装到/usr/java目录下:

    rpm -ivh jdk-1_5_0_22-linux-amd64.rpm --nodeps --force
    

    上面的--nodeps --force两个参数的作用为:安装时不再分析包之间的依赖关系而直接安装,没有这两个参数,会出现如下错误导致安装不成功:

    rpm: RPM should not be used directly install RPM packages, use Alien instead!
    rpm: However assuming you know what you are doing...
    error: Failed dependencies:
        glibc >= 2.1.2-11 is needed by jdk-2000:1.5.0_22-fcs.x86_64
        sh-utils >= 2.0-1 is needed by jdk-2000:1.5.0_22-fcs.x86_64
        fileutils >= 4.0-8 is needed by jdk-2000:1.5.0_22-fcs.x86_64
        gawk >= 3.0.4-1 is needed by jdk-2000:1.5.0_22-fcs.x86_64
        textutils >= 2.0-2 is needed by jdk-2000:1.5.0_22-fcs.x86_64
        /bin/sh is needed by jdk-2000:1.5.0_22-fcs.x86_64
    
    

    3.配置环境变量

    编辑/etc/profile文件,在最后面追加如下配置:

    #set java environment
    JAVA_HOME=/usr/java/jdk1.5.0_22
    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    PATH=$JAVA_HOME/bin:$PATH
    export PATH JAVA_HOME CLASSPATH
    

    保存后执行如下代码,使刚才的配置生效:

    source /etc/profile
    

    使用如下指令,查看是否安装成功:

    root@caiyuan-desktop:/home/caiyuan# java -version
    java version "1.5.0_22"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
    Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode)
    
    

    (2)安装gcc、g++

    在Ubuntu10.04系统中使用的gcc4.4、g++4.4对语法检查比较严格,因此需要下载并切换成较低的版本,这边使用gcc4.3、g++4.4成功编译,如果使用系统默认的gcc、g++版本,则会出现如下错误:

    development/emulator/qtools/trace_reader.cpp: In function ‘char* ExtractDexPathFromMmap(const char*)’:
    development/emulator/qtools/trace_reader.cpp:1012: error: invalid conversion from ‘const char*’ to ‘char*’
    development/emulator/qtools/trace_reader.cpp:1015: error: invalid conversion from ‘const char*’ to ‘char*’
    make: *** [out/host/linux-x86/obj/EXECUTABLES/bb2sym_intermediates/trace_reader.o] Error 1
    

    为了能够顺利编译,安装gcc:

    sudo apt-get install gcc-4.3
    

    安装g++:

    sudo apt-get install g++-4.3
    

    切换gcc、g++的版本为我们刚才安装的版本:

    root@caiyuan-desktop:/home/caiyuan# cd /usr/bin
    root@caiyuan-desktop:/usr/bin# ls -l gcc*
    lrwxrwxrwx 1 root root      7 2017-11-15 12:35 gcc -> gcc-4.4
    -rwxr-xr-x 1 root root 242840 2010-09-10 17:16 gcc-4.3
    -rwxr-xr-x 1 root root 259232 2012-03-09 09:00 gcc-4.4
    root@caiyuan-desktop:/usr/bin# sudo mv gcc gcc.bak
    root@caiyuan-desktop:/usr/bin# sudo ln -s gcc-4.3 gcc
    
    

    查看gcc版本:

    root@caiyuan-desktop:/usr/bin# gcc -v
    Using built-in specs.
    Target: x86_64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.5-3ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
    Thread model: posix
    gcc version 4.3.5 (Ubuntu 4.3.5-3ubuntu1) 
    
    

    切换g++版本并查看是否切换成功:

    root@caiyuan-desktop:/usr/bin# ls -l g++*
    lrwxrwxrwx 1 root root      7 2017-11-15 12:35 g++ -> g++-4.4
    -rwxr-xr-x 1 root root 242752 2010-09-10 17:16 g++-4.3
    -rwxr-xr-x 1 root root 263240 2012-03-09 09:00 g++-4.4
    root@caiyuan-desktop:/usr/bin# sudo mv g++ g++.bak
    root@caiyuan-desktop:/usr/bin# sudo ln -s g++-4.3 g++
    root@caiyuan-desktop:/usr/bin# g++ -v
    Using built-in specs.
    Target: x86_64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.5-3ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
    Thread model: posix
    gcc version 4.3.5 (Ubuntu 4.3.5-3ubuntu1) 
    
    

    安装g++-4.3-multilib,不安装则会出现could not find lgcc类似的错误:

    sudo apt-get install g++-4.3-multilib
    

    五、下载Android1.6版本的源代码

    (1) 下载repo工具,教程

    执行如下命令:

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
    chmod a+x ~/bin/repo
    

    (2)修改repo文件

    修改bin/repo文件,改动有两处,修改最低的git版本。

    将MIN_GIT_VERSION = (1, 7, 2)修改成MIN_GIT_VERSION = (1, 7, 1)
    

    修改REPO_URL

    将  REPO_URL = 'https://gerrit.googlesource.com/git-repo'修改为  REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
    

    (3)初始化

    执行如下命令进行初始化,其中android-1.6_r1.5为对应的源码版本号,详见版本号列表

    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-1.6_r1.5
    

    (4)同步源码树(下载代码)

    repo sync
    

    六、编译源码

    进入到源码根目录,执行:

    make
    

    七、导出源码到AndroidStudio

    进入到源码根目录,执行如下命令,它会生成idegen.jar文件:

    root@caiyuan-desktop:/home/caiyuan/Android1.6#  source build/envsetup.sh
    root@caiyuan-desktop:/home/caiyuan/Android1.6# mmm development/tools/idegen/
    ============================================
    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=1.6
    TARGET_PRODUCT=generic
    TARGET_BUILD_VARIANT=eng
    TARGET_SIMULATOR=
    TARGET_BUILD_TYPE=release
    TARGET_ARCH=arm
    HOST_ARCH=x86
    HOST_OS=linux
    HOST_BUILD_TYPE=release
    BUILD_ID=DMD64
    ============================================
    make: Entering directory `/home/caiyuan/Android1.6'
    Install: out/host/linux-x86/framework/idegen.jar
    Copy: out/target/product/generic/system/etc/apns-conf.xml
    make: Leaving directory `/home/caiyuan/Android1.6'
    
    

    然后执行如下命令,它会在根目录生成文件android.iml、android.ipr这两个文件:

    root@caiyuan-desktop:/home/caiyuan/Android1.6# development/tools/idegen/idegen.sh
    Read excludes: 3ms
    Traversed tree: 3225ms
    

    然后在AndroidStudio中导入android.ipr文件,设置项目配置如下:

    p3.png p4.png p5.png

    八、在模拟器中运行刚编译出来的Rom

    在"Android Virtual Device Manager"中点击“Create Cirtual Device”创建一个模拟器,这里创建了一个名字叫Emualtor1.6的模拟器,设备为Nexus S。

    p1.png

    在Sdk的根目录下面有一个叫“.android”的目录,进入目录找到“avd”的子目录,这里就是模拟器的存储位置,然后在“Emualtor1.6.avd”目录中放置我们编译好的系统镜像文件即可,镜像文件的目录地址为“Android1.6/out/target/product/generic”,将其中的ramdisk.img、system.img、userdata.img、userdata-qemu.img这四个文件拷贝到该目录,然后启动模拟器即可。

    p2.png

    九、直接运行编译后的模拟器

    编译完成之后会在根目录生成一个out文件夹,然后要设置对应的环境变量,才能够使用命令运行模拟器。

    export PATH=$PATH:/home/caiyuan/Android1.6/out/host/linux-x86/bin
    export ANDROID_PRODUCT_OUT=/home/caiyuan/Android1.6/out/target/product/generic
    

    执行下面的命令启动模拟器,这个命令在out/host/linux-x86/bin目录下面,所以上面一步要设置环境变量。

    emulator
    

    十、调试进程

    调试应用进程

    在弹出的“Choose Process”对话框中,选中应用进程即可。

    调试系统进程

    system_server、Zygote之类的系统进程在对话框中被统一叫做system_process,所以选择它就可以调试AMS、WMS的逻辑了。


    p6.png

    十一、指定模块编译

    编译模块

    使用m、mm、mmm编译命令

    //首先执行
    source build/envsetup.sh
    
    //编译framework模块
    mm framework
    

    重新生成镜像文件

    部分模块编译后,需要重新执行指令生成镜像文件

    make snod
    

    VirtualBox使用技巧

    加载共享文件夹

    sudo mount -t vboxsf share /home/caiyuan/ShareFile
    

    参考资料

    相关文章

      网友评论

        本文标题:Android 1.6源码编译

        本文链接:https://www.haomeiwen.com/subject/vvgdvxtx.html