Linux下编译和安装android系统

citic 2015-03-31

Linux下编译和安装android系统

上一篇文章说到我们已经下载好了android源码并解压,接下来我们terminal进到解压后的目录。利用make命令,开始编译android系统。

1.编译android系统

结果报错了:Your version is: java version "1.6.0_24". The correct version is: Java SE 1.6。原来是需要1.6的jdk,我之前安装的是1.7的。解决办法如下:

$sudo add-apt-repository 
"deb http://security.ubuntu.com/ubuntu hardy-security main multiverse"
	$ sudo apt-get update
        $ sudo apt-get install sun-java6-jdk

  在终端中执行:make -j4

  -j4:表示用四个线程来编译,这样相对能快点:

恩,不错,开始编译了。编译时间比较长,我们可以去睡个觉。编译好的东西放在这个目录下
larson@larson-pc ~/Android_Dev/Android4_4source/out/target/product/generic $ ls
android-info.txt  cache.img       data          fake_packages        obj                       ramdisk.img  symbols  system.img
cache             clean_steps.mk  dex_bootjars  installed-files.txt  previous_build_config.mk  root         system   userdata.img

PS:经过多次测试之后,我发现这个make编译可以断点续编,因此如果突然断电,没有关系,继续编译就好了,总有一天会编译成功的!完了以后我这里出现了个这:

+ echo make_ext4fs -S out/target/product/generic/root/file_contexts -l 69206016 -a cache out/target/product/generic/cache.img out/target/product/generic/cache
make_ext4fs -S out/target/product/generic/root/file_contexts -l 69206016 -a cache out/target/product/generic/cache.img out/target/product/generic/cache
+ make_ext4fs -S out/target/product/generic/root/file_contexts -l 69206016 -a cache out/target/product/generic/cache.img out/target/product/generic/cache
Creating filesystem with parameters:
    Size: 69206016
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 4224
    Inode size: 256
    Journal blocks: 1024
    Label: 
    Blocks: 16896
    Block groups: 1
    Reserved block group size: 7
Created filesystem with 11/4224 inodes and 1302/16896 blocks
+ '[' 0 -ne 0 ']'
out/target/product/generic/cache.img maxsize=70654848 blocksize=2112 total=69206016 reserve=713856

 代表编译成功,恭喜恭喜!

2.安装编译好的Android镜像到模拟器上

2.1设置环境变量

$export PATH=$PATH:~/Android_Dev/android4_4source/out/host/linux-x86/bin
$export ANDROID_PRODUCT_OUT=~/Android_Dev/android4_4source/out/target/product/generic
 

其中,~/Android_Dev/android4_4source/out/host/linux-x86/bin有我们要执行的emulator命令 ,而~/Android_Dev/android4_4source/out/target/product/generic是Android镜像存放目录, 下面执行emulator命令时会用到。

2.2运行模拟器

模拟器运行需要四个文件,分别是Linux
Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator
命令时,如果不带任何参数,即只输入emulator命令,则Linux
Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而
Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,
也就是我们刚刚编译出来的镜像问题。

 

我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:

$emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img

不同版本的android源码的kenel文件可能在不同位置,上面那个是android2.3的,而4.0的则是这样的:

 

$ emulator -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
 执行之后,我这里报了一个错误:

 qemu: could not load initrd 'ramdisk.img'

于是,我按照网上说的办法,把-ramdisk ramdisk.im去掉,模拟器果然跑起来了,可是进不去系统,然后呢。。。我又百度,然后说需要chmod 777 generic/,执行之,有个系统分区太小的错误

emulator: WARNING: system partition size adjusted to match image file (550 MB > 200 MB)

然后我百度找到的答案是,emulator 加入参数 -partition-size 1024 ,即:

emulator -partition-size 1024 -system sytem.img -data userdata.img -ramdisk ramdisk.img
还是不行,然后我又修改成除了chmod 777 外,还需要执行时加上绝对路径,最终执行的代码如下:
$ emulator -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7 -sysdir ./out/target/product/generic -partition-size 1024 -system system.img -data userdata.img -ramdisk ./out/target/product/generic/ramdisk.img
 到了这里,我们已经指定内核运行我们编译好的安卓系统了,有没有很开心啊?有啊 有啊。

相关推荐