Android 开发建立经验分享...

 

一.开发环境:... 2

二.操作流程:... 2

1. PC工作环境准备... 2

2.     创建工作目录:... 2

3. 下载安装repo版本管理工具:... 2

4. 下载安装git 3

5. 准备下载Android. 3

6. 检查GNU 版本... 4

7.     检查JDK 版本... 4

8.     检查Python 版本... 4

9.     检查gperf 版本... 4

10.   检查gcc 编译器版本... 5

11.   增加一些基本功能的编译,例如输入法... 5

12.   开始编译... 5

13. 运行emulator 6

14. 烧录方法:... 7

三.FRQ.. 7

 

 

 

一.开发环境:

PC 環境:Fedora 8

硬件平臺:MSM7627

二.操作流程:

1. PC工作环境准备
从网上下载Fedora 8 安装 package, 使用硬盘安装方式进行安装。

这里你要保证存放Feora 8镜像文件的盘为FAT32格式,因为无论Linux还是DOS,都不能识别NTFS。另外你还要为Linux系统空出一部分空间出来,空间大小最好在10G以上。

下载Grub for DOS工具(http://www.linuxidc.com/Linux/2007-10/8641.htm),这是在开机时引导进入Linux安装过程用的。将下载好的Grub for DOS里面的文件(包括了menu.lst ,grldr,grub.exe)解压缩到C盘根目录下。而不是将解压后的文件夹拷到C盘根目录下, 其实仅这个文件grldr是必要的 。

在C盘根目录打开文件boot.ini,在该文件的最后一行,添加C:\grldr="Start Grub",保存,退出。C盘找到menu.lst文件,用记事本打开,在末尾添加以下三行(仅红色部分):

title Install-Fedora 8      

kernel (hd0,0)/vmlinuz          /*文件vmlinuz所在地址为(hd0,0)*/

initrd (hd0,0)/initrd.img       /*文件initrd.img所在地址为(hd0,0)*/

保存退出重新启动,安装即可。

2.  创建工作目录:
#mkdir /home/android
#cd /home/android
#mkdir bin

3. 下载安装repo版本管理工具:
#curl http://android.git.kernel.org/repo> /home/android /bin/repo
#cd bin
#chmod a+x repo
由于Android项目官方采用repo来做同步管理,所以这里只有使用repo才可以做代码同步。

4. 下载安装git

Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓库(repository),许多个工作目录(working copy),而像Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNU Arch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们可以支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。因为Android是由kernel、Dalvik、Bionic、prebuilt、build等多个Git项目组成,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库。.

如果没有事先安装git, 那么首先进行git 安装, Fedaro 8 目前没有git 安装包,所以需要从网上进行下载安装。

5. 准备下载Android

#cd /home/android

首先下載代碼包,依据MSM7627 release notes 80-VR358-6_B_M76xxTSNCJNLYA4615.pdf 到以下网址https://www.codeaurora.org/wiki/QAEP#Branch_Releases 进行BSP 下载,  下载比较麻烦,需要支持 git.

$ repo init -u git://codeaurora.org/platform/manifest.git -b [branch] -m [manifest]

$ repo sync

进 入/home/android/可以看到Android的源码目录如下:

–repo –主要是同步管理所用到的一系列文件
–bionic –Android编译过程所需要的一些库
–bootable –负责启动和备份的一些文件
–build –最主要的一些makefile和编译配置文件
–dalvik –经过Google优化了的java虚拟机
–development –开发用的一些文件夹,包括模拟器和工具等
–external –Android工程中引入的外部功能库
–frameworks –中间件部分
–hardware –和硬件有关的一些支持文件,包括wifi,电信模块等
–kernel –经过了优化和修改的linux内核
–packages –所有的上层应用包
–prebuild –Android编译工具所在目录
–system –一些系统级文件

6. 检查GNU 版本

可以到官網http://www.gnu.org/ 下載最新的make版本.

安裝方法:

$ tar zxvf make-3.8.1.tar.gz -C /home/user/tmp

$ cd /home/user/tmp/make-3.8.1

$ ./configure

$ make && make install

安裝完成后,重新登陸shell時可以使用 make -version 查看是否安裝成功。

7. 检查JDK 版本

JDK(java development kit)包含了整個java的核心,包括開發環境,運行環境,java工具,java基礎類庫,等等。

安裝方法:

$ su            //切換到root賬戶

# chmod +x jdk-6u12-linux-i586.bin

# ./jdk-6u12-linux-i586.bin

# mv  jdk1.6.0_12  /usr/local

# exit

安裝完成后,打開 .bash_profile文件,在文件末尾加入幾行:

$ vi ~/.bash_profile

export JAVA_HOME=/usr/local/jdk1.6.0_12

export ANDROID_JAVA_HOME=$JAVA_HOME

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

重新登陸shell,輸入 java –version就可以看到安裝是否成功了。

8. 检查Python 版本

Python 是一种开放源代码的脚本语言,需要python  2.4或者以上的版本。

9. 检查gperf 版本

Gperf 是一种完美的散列函数,它是被作为Hash 函数的生成器。

$ tar zxvf gperf-3.0.4.tar.gz -C /home/user/tmp

$ cd /home/user/tmp/gperf-3.0.4

$ ./configure

$ make && make install

重新登陸shell,輸入 gperf --version 即可以查看是否安裝成功。

10.    检查gcc 编译器版本

Android 所需要的編譯器所包含的include文件至少是2.6版本的,否則Android編譯時會出現找不到定義。

升級方法:到http://www.kernel.org/ 下載最新的內核源碼包。

 

$ tar jxvf linux-2.6.27.tar.bz2 -C /usr/src

$ cd /usr/src/linux-2.6.27

$ su

# make defconfig && make   

//……大約1個小時之后編譯完成……

# cd /usr/include

# mv /usr/include/linux /usr/include/linux-old-bk

# ln -s /usr/src/linux-2.6.27/include/linux linux

#cat /usr/include/linux/version.h  //出現下面的兩個語句就表明成功了

#define LINUX_VERSION_CODE 132635

#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

11.    增加一些基本功能的编译,例如输入法

Android文件系统由于已经自带了经过优化的交叉编译工具,并且为所有的源码都提供了经过验证的makefile,所 以系统的整体编译相对简单,官方发布的版本中基本功能都已经包含进了makefile中,如果想加入中文输入法这里做适当修改:

#cd /home/android/build/target/product/

#gedit generic.mk
打开这个文件后,在PRODUCT_PACKAGES中,加入PinyinIME,然后保存退出。这样在整体编译的时候就会把中文输入法也编译进system中了。

12.    开始编译

第一次进行整体编译,这个过程大概持续2到3小时,默认情况下,会在 /home/android/目录下生成一个out文件夹 ,所有的编译生成物都在这一目录下。如果想更改生成文件的目录,请参考/build/buildspec.mk.default文件中的说明。

开始编译:

$ cd /home/user/myandroid

$ make

大約2個小時以后編譯就完成了。

………

……            //順利的話,你就可以看到下面信息

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

查看/myandroid/out/target/product/generic就可以看到三個img文件:ramdisk.img  system.img  userdata.img

13. 运行emulator

修改.bashrc, 增加相应的声明信息。(用户可自行修改到相应Android目录) 修改.bashrc,增加相應的環境變量。

$ vi ~/.bash_profile

export PATH=/home/user/myandroid/out/host/linux-x86/bin:$PATH

export ANDROID_PRODUCT_OUT=/home/user/myandroid/out/target/product/generic

 

// 重新登陸shell

 

$ emulator

........虛擬機開始運行……

主畫面:

 

 

 

14. 烧录方法:

在PC上配置tftp服務器,這樣我們就可以通過USB或者Ethernet下載代碼到目標板。配置ftp服務器的方法:

請參考 http://www.yuanma.org/data/2006/0803/article_1300.htm

.FRQ

1.全部安装完Fedora 8, 出现编译错误:

Make: execvp: /bin/bash: Argument List too long

 

2. 全部重新安装即可,必须check gperf version.

 

3. 得到全部环境后,要chmod –R a=rwx /home/linux/* 来改变整个目录的属性,以便可以操作。

 

4.在linux上建samba服务器,将android代码共享给windows。系统—》管理—》samba.

       注意点:关闭防火墙,或者在防火墙中将samba端口打开

                     关闭selinux,修改/etc/selinux/config 文件 enforcingàdisabled

重新修改SAMBA配置后,最好重新启动SAMBA服务器。命令:

Service smb restart 或者 Service smb stop   Service smb start

 

5. Build 命令请参考kernel\Documentation\kbuild 和How_to_Write_makefile.pdf

 

 

6. 默认启动SVN server:

     vi  /etc/rc.d/rc.local

     Add the below command.

     killall svnserver

     svnserve -d -r /home/svn/newrepos

 

7. 烧录方法:

    source build/envsetup.sh

    fastboot devices

    fastboot flash boot boot.img

    fastboot flash system system.img

    fastboot flash userdata userdata.img

 

 

8.How to modify build script to add one new feature

   \kernel\arch\arm\configs\msm7627_defconfig

    CONFIG_MMC=y

    Or

    CONFIG_MMC=m

 

   \kernel\driver\makefile

   obj-$(CONFIG_MMC)               += mmc/

 

 

9. #pragma once

   #pragma pack( push, 4) // push to stack and meanwhile set align bytes

   #pragma pack(pop)

   #pragma pack(show)  //show the current setting

   #pragma pack()  //restore default setting

 

 

    Instead of

#pragma pack

struct s

{

  char c;

  int i;

};

with

struct s

{

  char c;

  int i __attribute__ ((__packed__));

};

 

or

__attibute__((aligned(n));

 

总结一下:

关于字节对齐的使用,gcc 一般用

__attribute__((aligned(n))

VC 中使用

#pragma pack(n)

还有一些程式使用另外的一种方式:

_declspec(align(n))


9.  make menuconfig

Please use “make kernelconfig” instead of “make menuconfig”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值