安装ubuntu并sync android源码的笔记

来源:互联网 发布:淘宝买原味胖次 编辑:程序博客网 时间:2024/06/05 04:35

 sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
用于apt-get install之后的锁死情况

 

 

====================

====================

====================

====================

====================

 

 

三、源码运行

 

在编译完整个项目后,如果我们需要观看编译后的运行效果,那么就需要在系统中安装模拟器android-sdk-linux_x86-1.1_r1,这个SDK的下载地址为:

 

linux: http://dl.google.com/android/android-sdk-linux_x86-1.1_r1.zip 
mac: 
http://dl.google.com/android/android-sdk-mac_x86-1.1_r1.zip 
windows: 
http://dl.google.com/android/android-sdk-windows-1.1_r1.zip

 

解压后需要把/usr/local/src/android-sdk-linux_x86-1.1_r1/tools目录加入到系统环境变量/etc/profile中。

 

然后找到编译后android的目录文件out,我们发现在android/out/host/linux-x86/bin下多了很多应用程序,这些应用程序就是android得以运行的基础,所以我们需要把这个目录也添加到系统PATH下,在$HOME/.profile文件中加入如下内容:

 

PATH=”$PATH:$HOME/android/out/host/linux-x86/bin”

 

接下来我们需要把android的镜像文件加载到emulator中,使得emulator可以看到android运行的实际效果,在$HOME/.profile文件中加入如下内容:

 

ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/generic
export ANDROID_PRODUCT_OUT

 

然后重新启动机器。

 

下面就可以进入到模拟器目录中并启动模拟器

 

cd $HOME/android/out/target/product/generic
emulator -image system.img -data userdata.img -ramdisk ramdisk.img

 

 

总结一下安装过程中的关键点:

1JDK版本必须安装

2:利用下面的命令确保所需软件都被正确安装

sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential python valgrind curl git

3:内存及虚拟内存保证在2GB以上,可以采用命令行free -m查看内存是否足够,如果内存不够终端停滞

 

 

 

====================

====================

====================

====================

====================

 

 

第一次编译Android源码时,使用Jdk6没有编译通过,可能需要用Jdk5。
直接使用命令:apt-get install无法获取jdk5包,可能已从源库中移走。
所以需要到SUN网站上手动下载。

1 首先从网上搜索下载:jdk-1_5_0_22-linux-i586.bin(47M)

2 下载到本地后(假如将jdk5下载到了目录/home/yvon/download下),进行安装:
  cd /home/yvon/download
  chmod 777 jdk-1_5_0_22-linux-i586.bin
  sudo -s ./jdk-1_5_0_22-linux-i586.bin
  然后会出现大篇幅的协议内容,一路回车即可,知道问你要不要安装,选择yes.
  安装成功后,会在当前目录下生成一个目录: jdk1.5.0_22

3 安装好后,还必须配置环境变量
  sudo gedit/etc/profile.d/java.sh
 这样可以在所有的用户中使用
  在新的java.sh中输入以下内容:
   #set java environment
   export JAVA_HOME=/home/yvon/download/
jdk1.5.0_22
   export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
   export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

  保存。
  重启机器。

4 重启机器后,使用如下命令查看
 1)查看安装成功与否
  java -version
  显示信息:
  java version "1.5.0_22"
  Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
  Java HotSpot(TM) Server VM (build 1.5.0_22-b03, mixed mode)
  则安装成功。

 2)查看环境变量修改成功与否
  echo $JAVA_HMOE
  echo $CLASSPATH


5 最后,就可以编译Android源码了,具体编译过程可参考本空间中的另一篇文章
Build the Android work environment in Ubuntu Linux


安装Jdk5后编译通过!

 

 

repo安装之后,在.bashrc中export一下path, 之后最好重进一下bash或者是source一下PATH

 

192.168.174.132

文件夹映射驱动器 --- 创建共享文件

 

http://wenku.baidu.com/view/c130b16648d7c1c708a14551.html

http://www.360doc.com/content/10/0222/16/155970_16459284.shtml

http://blog.sina.com.cn/s/blog_40b025790100lsg0.html

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

                                                                                                                                      

http://hi.baidu.com/huleyin/blog/item/d1fec00bd9b7033de8248816.html    

http://spaceflysky-163-com.javaeye.com/blog/377589

http://www.cnblogs.com/kaixuan/archive/2009/03/18/1415431.html

 

 

全部同步完毕后,进入到Android目录下,使用make命令编译,你会发现出现如下错误提示:

 

host C: libneo_cgi <= external/clearsilver/cgi/cgi.c 
external/clearsilver/cgi/cgi.c:22:18: error: zlib.h: No such file or directory

 

这个错误是因为我们缺少zliblg-dev,需要使用apt-get命令从软件仓库中安装,如下:

 

sudo apt-get install zliblg-dev

 

同理,我们还需要依次安装如下软件

 

sudo apt-get install flex

sudo apt-get install bison

sudo apt-get install gperf

sudo apt-get install libsdl-dev

sudo apt-get install libesd0-dev

sudo apt-get install libncurses5-dev

sudo apt-get install libx11-dev

 

以上软件全部安装完毕后,运行make命令再次编译Android源码。

 

这个时候你会发现出现很多java文件无法编译的错误,打开Android的源码我们可以看到在android/dalvik/libcore/dom/src/test/java/org/w3c/domts下有很多java源文件,这意味着编译Android之前需要先安装JDK

首先从sun官方网站下载jdk-6u16-linux-i586.bin文件并安装它。

Ubuntu 10.04中,/etc/profile文件是全局的环境变量配置文件,它适用于所有的shell。在我们登陆Linux系统时,首先启动/etc/profile文件,然后再启动用户目录下的~/.bash_profile~/.bash_login~/.profile文件中的其中一个,执行的顺序和上面的排序一样。如果~/.bash_profile文件存在的话,一般还会执行~/.bashrc文件。

 

 

 

  • 7 编译源码, 并得到~/open_src/android/out 目录
     在命令行执行make命令:
     $make
     这是一个很漫长的过程, 等吧......
  • 8 测试运行
     8.1 先设置环境变量:
      打开~/.bashrc文件, 并在最后添加下面两行:
      export PATH=$PATH:~/open_src/android/out/host/linux-x86/bin
      export ANDROID_PRODUCT_OUT=~/open_src/android/out/target/product/generic
     
     8.2 运行模拟器:
      emulator --debug-init -skin QVGA-L  //可能会提示unknown option: --debug-init, 去掉--debug-init即可
      或者直接执行emulator, 这样使用的是默认的皮肤
     
     如果最后能进入到系统并看到一个大时钟, 说明就大功告成了.
     
     
  • 9 后续编译:

           先在android目录下执行
           $ . build/envsetup.sh
           然后你就会多出几个可用的命令。在改了Contacts联系人项目后,可以简单的执行一下命令来单独编译这个部分:
           $mmm packages/apps/Contacts/
          为了可以直接测试改动,需要生成新的system.img,在android目录下执行:
           $ make snod
          当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了

  • 以下是编译成功后的最后一些输出:
    Install: out/target/product/generic/system/xbin/scp
    Notice file: system/extras/showmap/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/showmap.txt
    Install: out/target/product/generic/system/xbin/showmap
    Notice file: system/extras/showslab/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/showslab.txt
    Install: out/target/product/generic/system/xbin/showslab
    Notice file: external/sqlite/dist/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/sqlite3.txt
    Install: out/target/product/generic/system/xbin/sqlite3
    Notice file: external/dropbear/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/ssh.txt
    Install: out/target/product/generic/system/xbin/ssh
    Install: out/target/product/generic/system/xbin/strace
    Notice file: system/extras/su/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/su.txt
    Install: out/target/product/generic/system/xbin/su
    Install: out/target/product/generic/system/xbin/timeinfo
    Copy: out/target/product/generic/system/etc/apns-conf.xml
    Copying: out/target/product/generic/obj/NOTICE_FILES/src/kernel.txt
    Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp
    Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
    gzip -c out/target/product/generic/obj/NOTICE.html > out/target/product/generic/obj/NOTICE.html.gz
    zip -qj out/target/product/generic/system/etc/security/otacerts.zip build/target/product/security/testkey.x509.pem
    Generated: (out/target/product/generic/android-info.txt)
    Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
    Install system fs image: out/target/product/generic/system.img
    Target ram disk: out/target/product/generic/ramdisk.img
    Target userdata fs image: out/target/product/generic/userdata.img

 

 

 

 

 

 

 

6、在模拟器上运行编译好android

android SDK的emulator程序在android-sdk-linux_x86-1.0_r2/tools/下,emulator是需要加载一些image的,默认加载android-sdk-linux_x86-1.0_r2/tools/lib/images下的kernel-qemu(内核) ramdisk.img  system.img  userdata.img

编译好android之后,emulator在~/project/android/cupcake/out/host/linux-x86/bin下, ramdisk.img  system.img  userdata.img则在~/project/android/cupcake/out/target/product/generic下
cd ~/project/android/cupcake/out/host/linux-x86/bin

增加环境变量
vim ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量
export ANDROID_PRODUCT_OUT=~/project/android/cupcake2/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/project/android/cupcake2/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN};

最后,同步这些变化:
source ~/.bashrc

emulator -image system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了。
out/host/linux-x86/bin下生成许多有用工具(包括android SDK/tools的所有工具),因此,可以把eclipse中android SDK的路径指定到out/host/linux-x86/bin进行开发

7、编译linux kernel
直接make android源码时,并没有make linux kernel。因此是在运行模拟器,所以不用编译 linux kernel。如果要移值android,或增删驱动,则需要编译 linux kernel
linux kernel的编译将在以后的文章中介绍。

8、编译模块
android中的一个应用程序可以单独编译,编译后要重新生成system.img
在源码目录下执行
. build/envsetup.sh (.后面有空格)
就多出一些命令:
- croot:   Changes directory to the top of the tree.
- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory.
- mmm:     Builds all of the modules in the supplied directories.
- cgrep:   Greps on all local C/C++ files.
- jgrep:   Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir:   Go to the directory containing a file.
可以加—help查看用法
我们可以使用mmm来编译指定目录的模块,如编译联系人:
 mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk
可以使用make snod重新生成system.img
再运行模拟器

9、编译SDK
直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发 android了。

1)修改/frameworks/base/include/utils/Asset.h
‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’
原因是Eclipse编译工程需要大于1.3M的buffer

2)编译ADT。
注意,我们是先执行2),再执行3)。因为在执行./build_server.sh时,会把生成的SDK清除了。
用上了新的源码,adt这个调试工具也得自己来生成,步骤如下:
进入cupcake源码的development/tools/eclipse/scripts目录,执行:
export ECLIPSE_HOME=你的eclipse路径
./build_server.sh 你想放ADT的路径

3)执行make sdk。
注意,这里需要的javadoc版本为1.5,所以你需要在步骤1中同时安装sun-java5-jdk
make sdk
编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.xxx_linux-x86.zip和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是SDK目录
实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来

4)关于环境变量、android工具的选择
目前的android工具有:
A、我们从网上下载的SDK( tools下有许多android工具,lib/images下有img映像)
B、我们用make sdk编译出来的SDK( tools下也有许多android工具,lib/images下有img映像)
C、我们用make编译出来的out目录( tools下也有许多android工具,lib/images下有img映像)
那么我们应该用那些工具和img呢?
首先,我们不会用A选项的工具和img,因为一般来说它比较旧,也源码不同步。测试发现,如果使用B选项的工具和img,android模拟器窗口变小(可能是skin加载不了),而用C选项的工具和img则不会有此问题。
有些android工具依赖android.jar(比如android),因此,我们在eclipse中使用B选项的工具(SDK),使用C选项的img。其实,从emulator -help-build-images也可以看出,ANDROID_PRODUCT_OUT是指向C选项的img目录的
不过,除了用A选项的工具和img,用B或C的模拟器都不能加载sdcard,原因还不清楚。

5)安装、配置ADT
安装、配置ADT请参考官方文档

6)创建Android Virtual Device
编译出来的SDK是没有AVD(Android Virtual Device)的,我们可以通过android工具查看:
android list
输出为:
Available Android targets:
[1] Android 1.5
     API level: 3
     Skins: HVGA-P, QVGA-L, HVGA-L, HVGA (default), QVGA-P
Available Android Virtual Devices:
表明没有AVD。如果没有AVD,eclipse编译工程时会出错(Failed to find a AVD compatible with target 'Android 1.5'. Launch aborted.)
创建AVD:
android create avd -t 1 -c ~/sdcard.img -n myavd
可以android –help来查看上面命令选项的用法。创建中有一些选项,默认就行了
再执行android list,可以看到AVD存放的位置
以后每次运行emulator都要加-avd myavd或@myavd选项,这里eclipse才会在你打开的emulator中调试程序


注意:
这样,SDK和ADT就生成了,就按照官方文档把他们整合到Eclipse,这里不再细说了。
建个android的新工程,试试你自己编译的sdk。