编译安卓源码

来源:互联网 发布:淘宝捡漏是怎么回事 编辑:程序博客网 时间:2024/05/07 11:46
一.配置环境变量
1.1.sudo apt-get install openjdk-7-jdk     //将会安装上jdk
2.安装相关的软件:
  sudo apt-get install build-essential make gcc g++ libc6-dev patch texinfo libncurses5-dev git-core gnupg flex bison gperf libsdl1.2-dev  libesd0-dev  build-essential zip curl libncurses5-dev zlib1g-dev valgrind libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 gstreamer0.10-plugins-base:i386 gstreamer0.10-plugins-good:i386 libxml2-utils
3.修改:vim ~/.bashrc   
  文档末尾添加:unset JAVA_TOOL_OPTIONS
4.修改完成后 source ~/.bashrc


二.下载Android源码
1.开始下载源码,从不同的服务器下载,指令不同。
   mkdir work
   mkdir android-5.1.1_r1_folio
   cd android-5.1.1_r1_folio/
   curl http://10.100.207.254:8080/static/repo > ./repo-conn  //下载repo脚本到到本地
   chmod +x repo-conn                             //给repo脚本加权限
   sudo mv repo-conn /usr/local/bin/                          
   ssh-keygen
   cd .ssh/
   vi config
   ssh conntech
   cat id_rsa.pub
   ssh conntech
   repo-conn init -u conntech:manifest.git -b android-5.1.1_r1_folio
   git config --global user.email "renss@litsoft.com.cn"
   git config --global user.name "renss"
   repo-conn init -u conntech:manifest.git -b android-5.1.1_r1_folio
   repo-conn sync


三.首次编译整套源码
1.准备
    1. source build/envsetup.sh  //这样会列出很多include....
    2. lunch //会列出很多设备的名称,必须的选一种设备型号才可以编译
    3. 14 (代表google的n5手机)//aosp_hammerhead-userdebug
    4. make update-api //首先编译api
    5. make -j8 //正式开始编译 后面的数字表示使用系统几核进行编译,其实不管数字有多大使用的核数肯定不超过机器的内核数量
备注:首次编译的时间比较长,如果编译一次后,修改后再次编译的话就会快很多


四.配置ADB环境变量
----------start------------(这部分,在同一台电脑上只需要执行一次即可!!!)
1. lsusb     //查看usb使用情况  : 18d1:4ee2
2.sudo gedit /etc/udev/rules.d/70-android.rules    //新建并且编辑这个文件
SUBSYSTEM=="usb", ATTRS{idVendor}=="230b", ATTRS{idProduct}=="0100",MODE="0666"    //写入这句话,nexus所对应的ATTRS为18d1  idProduct对应为4ee1

3. sudo chmod a+rx /etc/udev/rules.d/70-android.rules //设置权限
4.sudo service udev restart   //重启udev
5.修改~/.bashrc中的环境变量ANDROID_PRODUCT_OUT为:
export ANDROID_PRODUCT_OUT=~/work/android-5.1.1_r1/out/target/product/hammerhead    //注意路劲写adb成自己的真实路径
export PATH=$PATH:~/work/android-5.1.1_r1_folio/out/host/linux-x86/bin
6.source ~/.bashrc

-----------end--------------------



五.刷机
1.source build/envsetup.sh   //必须先进入到android源码的目录下面在开始执行此指令
2.lunch

     make clean;//清除已经编译过到文件
===============================================================================
root@ThinkPad:~/work/android-5.1.1_r1_folio# ls
abi       build       development  frameworks       Makefile  pdk        system
art       cts         device       hardware         ndk       prebuilts  vendor
bionic    dalvik      docs         libcore          out       repo-conn
bootable  developers  external     libnativehelper  packages  sdk
root@ThinkPad:~/work/android-5.1.1_r1_folio# cd out/
root@ThinkPad:~/work/android-5.1.1_r1_folio/out# ls
root@ThinkPad:~/work/android-5.1.1_r1_folio/out# cd ../
root@ThinkPad:~/work/android-5.1.1_r1_folio# ls
abi       build       development  frameworks       Makefile  pdk        system
art       cts         device       hardware         ndk       prebuilts  vendor
bionic    dalvik      docs         libcore          out       repo-conn
bootable  developers  external     libnativehelper  packages  sdk
root@ThinkPad:~/work/android-5.1.1_r1_folio# source build/envsetup.sh
==============================================================================
3.选择要刷机的手机对应的编号
4. adb reboot bootloader  
5. fastboot flashall -w
result:刷机完成后会显示:
    .....
    rebooting...
    finished. total time: 66.378s
==============================================================
< waiting for device >//找不到usb设备
^C

louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ lsusb **
Bus 004 Device 002: ID 8087:8000 Intel Corp.
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 8087:8008 Intel Corp.
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 001 Device 005: ID 04f2:b39a Chicony Electronics Co., Ltd
Bus 001 Device 004: ID 8087:07dc Intel Corp.
Bus 001 Device 060: ID 18d1:4ee0 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ /etc/udev/  //usb相关配置文件
hwdb.d/  rules.d/
louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ /etc/udev/rules.d/70-android.rules **
/etc/udev/rules.d/70-android.rules: 行 1: ATTRS{idVendor}==8087,: 未找到命令
louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ sudo vim /etc/udev/rules.d/70-android.rules **
[sudo] password for louisgracia:
louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ sudo service ud //重启服务
udev         udev-finish  udisks2      
louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ sudo service udev restart //重启系统usb相关
louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ adb reboot bootloader **
louisgracia@ThinkPad:~/work/android-5.1.1_r1_folio$ fastboot flashall -w**
Creating filesystem with parameters:
    Size: 28521246720
    Block size: 4096
====================================================================
    


六.以后单独编译某个模块,使用Push的方式推到手机即可
比如编译SystemUI模块  
也要cd folio目录下
1.  mmm frameworks/base/packages/SystemUI/       //通常此目录只包含一个模块
2.  编译完生成系统级别的apk,或者jar.
        ####比如:我重新编译生成了framework.jar,它生成的目录在out/target/product/hammerhead/system/framework
        并且手机中对应的framework.jar在/system/framework/下面
        
        ***就在自己的项目下(我是cplus项目)
        1.adb root
        2.adb remount
        3.adb push out/target/product/hammerhead/system/framework/framework.jar /system/framework/
    
备注:如果编译的是SystemUI的话,最后terminal中会显示Install:out/target/product/hammerhead/system/priv-app/SystemUI/SystemUI.apk
     SystemUI.apk,才是真正要push进手机的。接下来再执行adb push指令即可。  

















   

0 0
原创粉丝点击