编译构建android 源码

编译构建环境

  • ubuntu 8.10 (32-bit x86)
  • jdk 5.0 当前android 版本需要在5.0环境下编译,java6目前不支持。原因是在生成javadoc的时候某些标记不兼容导致编译失败。
  • gcc ,g(plugs plugs) libc6-dev python (ubuntu默认已经提供)
  • 10G以上的磁盘空间及1G以上内存。

构建编译

1. 使用apt-get 安装所需软件

sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

2. 安装repo同步工具

cd ~
mkdir bin
cd bin
curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo

3. 创建源码工作目录

cd ~
mkdir android
cd android

4.初始化工作空间

cd ~ android
../bin/repo init -u git://android.git.kernel.org/platform/manifest.git

完成目录初始化的工作将开到以下的信息提示:

repo initialized in /mydroid

注:当前使用repo命令同步源码库的android主干版本,如果需要同步其他分支版本需要使用 -b 参数 如以下示例

../bin/repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake

同步版本标记为cupcake 的版本

5. 开始从android源码库同步源码,源码大概2个G左右同步时间取决于网速

../bin/repo sync

6. 编译前的准备工作 设置环境变量

编辑 .bashrc 文件加入以下环节变量

PATH=$PATH:~/android/bin
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
ANDROID_PRODUCT_OUT=~/android/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin
PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT}:~/eclipse
export PATH JAVA_HOME ANDROID_PRODUCT_OUT

使环境变量生效

cd ~
source .bashrc

7. 编译构建

执行make进行编译,这个过程也比较耗时需耐心等待。

cd ~ android
make

编译完成后会在$ANDROID_PRODUCT_OUT 目录生成 ramdisk.img、system.img、userdata.img 三映像文件,模拟器或真实设备运行需要这3个映像文件。

启动模拟器

emulator

如果看到模拟器的界面正常显示,说明这次基本构建已经完成。

创建SDK

在构建编译成功后可以继续构建android sdk 开发包。网上的文档基本上说通过make sdk 命令即可完成sdk的生成,经过我的测试这样直接生成的sdk并不能正常使用而是通过以下步骤完成sdk的构建。

cd ~ android
. build/envsetup.sh
lunch sdk-eng
make sdk

编译部署指定的模块

如果我们需要编译部署单独的一个模块可以通过”mmm” 命令实现,如下示例编译部署浏览器模块。

cd ~ android
. build/envsetup.sh
mmm packages/apps/Browser/

注:mmm 命令必须在运用 envsetup.sh 后使用

在重新编译了更新的模块后如我们在模拟器环境下测试需要重新生成system.img 使用以下命令重新生成system.img (这个过程会比使用make快一些)

make snod


Ubuntu 9.10编译时问题收集


1.找不到PRODUCT_POLICY

frameworks/policies/base/PolicyConfig.mk:22: *** No module defined for the given PRODUCT_POLICY (android.policy_phone).

解法: 修改build/tools/findleaves.sh的89行:

#find "${@:0:$nargs}" $findargs -type f -name "$filename" -print |
find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print |

2. fprintf未定义

frameworks/base/tools/aidl/AST.cpp:10: error: 'fprintf' was not declared in
this scope

解法:

apt-get install gcc-4.3 g++-4.3,
cd /usr/bin
rm /usr/bin/gcc
rm /usr/bin/g++
ln  -s gcc gcc-4.3
ln -s g++ g++-4.3

3.安装sun- java6-jdk,并且在环境变量中设置:

export JAVA_HOME=/usr/lib/jvm/java-6-sun/
export ANDROID_JAVA_HOME=$JAVA_HOME

参考资料


Android 4.0 Cream Sandwich(ICS) 编译构建环境

  • Ubuntu 10.04
  • Python 2.4 – 2.7
  • JDK 6
  • Git 1.7 或者更高版本

64位系统:

sudo apt-get install git-core 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

On Ubuntu 10.10: $ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

On Ubuntu 11.10: $ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so

32-bit (experimental)

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
  libxml2-utils







fastboot android10版本 ubuntu linux平台 fastboot version 28.0.2-PD02.200305.0422 $ fastboot -h usage: fastboot [OPTION...] COMMAND... flashing: update ZIP Flash all partitions from an update.zip package. flashall Flash all partitions from $ANDROID_PRODUCT_OUT. On A/B devices, flashed slot is set as active. Secondary images may be flashed to inactive slot. flash PARTITION [FILENAME] Flash given partition, using the image from $ANDROID_PRODUCT_OUT if no filename is given. basics: devices [-l] List devices in bootloader (-l: with device paths). getvar NAME Display given bootloader variable. reboot [bootloader] Reboot device. locking/unlocking: flashing lock|unlock Lock/unlock partitions for flashing flashing lock_critical|unlock_critical Lock/unlock 'critical' bootloader partitions. flashing get_unlock_ability Check whether unlocking is allowed (1) or not(0). advanced: erase PARTITION Erase a flash partition. format[:FS_TYPE[:SIZE]] PARTITION Format a flash partition. set_active SLOT Set the active slot. oem [COMMAND...] Execute OEM-specific command. gsi wipe|disable Wipe or disable a GSI installation (fastbootd only). boot image: boot KERNEL [RAMDISK [SECOND]] Download and boot kernel from RAM. flash:raw PARTITION KERNEL [RAMDISK [SECOND]] Create boot image and flash it. --dtb DTB Specify path to DTB for boot image header version 2. --cmdline CMDLINE Override kernel command line. --base ADDRESS Set kernel base address (default: 0x10000000). --kernel-offset Set kernel offset (default: 0x00008000). --ramdisk-offset Set ramdisk offset (default: 0x01000000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值