涉及3方面的环境搭建

1、Android应用程序开发环境

2、Android NDK开发环境

3、交叉编译环境


开发、测试和调试Linux驱动、HAL程序库需要的工具如下:

jdk(java开发包,用来编译Android)

Eclipse(Android开发的IDE(集成开发环境),选用Eclipse3.4以上版本)

ADT(Android应用开发工具 for Eclipse)

CDT(Android NDK开发工具 for Eclipse)

Android SDK工具

Android NDK(编译NDK程序)

交叉编译工具链

Linux kernel源码

Android源码

minicom


应用类开发包括:eclipse、Android SDK工具、

NDK开发包括:

驱动开发包括:jdk、交叉编译工具链


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

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

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

jdk(java开发包,用来编译Android)安装:

http://www.oracle.com/technetwork/java/javase/downloads/index.html下载jdk-6u43-linux-i586.bin(Android 2.3及以上版本使用jdk6,android2.2及以下版本使用jdk5),

下载最新的jdk-7u17-linux-i586.tar.gz无法使用。

特别要注意自己的主机是多少位的,否则你编译时会遇到如下打印,就是jdk对应位数(64/32)和实际操作系统的位数不符,需重新下载

uname -ar //查看系统版本是32位还是64位,若有x86_64或arm64之类的字样,就是64位,否则就是32位

打印如下:

bash: /usr/lib/jdk/jdk1.6.0_43/bin/java:cannot execute binary file


sudo chmod -R 777 /usr/lib/

cd /usr/lib

mkdir jdk

拷贝jdk-6u43-linux-i586.bin到/usr/lib/jdk

必须改权限,不然以下命令无法执行

chmod 777 jdk-6u43-linux-i586.bin

安装

./jdk-6u43-linux-i586.bin

将jdk1.6.0_43目录中的文件全部解锁

sudo chmod -R 777 /usr/lib/jdk/jdk1.6.0_43/

安装完成后调整环境变量

gedit ~/.bashrc

文件末尾添加如下描述信息:

export JAVA_HOME=/usr/lib/jdk/jdk1.6.0_43

export JRE_HOME=/usr/lib/jdk/jdk1.6.0_43/jre

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

同步一下:

. ~/.bashrc

确认一下路径:

printenv JAVA_HOME

打印如示:/usr/lib/jdk/jdk1.6.0_43

java -version

打印如示:java version "1.6.0_43"


javac //正常打印javac的语法规则,说明就ok啦!


若是出现jdk方面的错误,相见我的例外一篇博客:编译android4.0出现jdk版本问题

命令行下载并安装jdk6,连PATH都不用额外配置,就按如下方式操作,(但本人未亲自测试):

add-apt-repository "deb http://archive.canonical.com/ lucid partner"

apt-get update

apt-get install sun-java6-jdk



Android SDK工具安装:

下载地址http://developer.android.com/sdk/index.html,其实这里下载的仅仅是Android SDK的安装器和必须的工具,在安装的时候通过在线方式,需再选择自己所需的Android版本

本人在ubuntu下开发,需要选择

DOWNLOAD FOR OTHER PLATFORMS

再在列表中选择,

android-sdk_r21.1-linux.tgz

弹出协议信息,打勾后选择Download android-sdk_r21.1-linux.tgz,即可下载

拷贝到指定目录/sdk/android,解压

tar zxvf android-sdk_r21.1-linux.tgz

进入解压后目录/sdk/android/android-sdk-linux/tools

执行android脚本进行SDK安装(图形界面可以双击执行脚本,命令行就用./android执行)

复选框方式选择自己所需的Android版本

点击 install XX package 后,等待安装完成

完成后在/sdk/android/android-sdk-linux/platforms有各个版本的Android SDK资源目录

以下目录包含常用的工具,需要添加到PATH环境变量中:

/sdk/android/android-sdk-linux/tools

/sdk/android/android-sdk-linux/platform-tools


gedit /etc/profile

添加到文件最后

export PATH=$PATH:/opt/sdk/android-sdk-linux/tools/
export PATH=$PATH:/opt/sdk/android-sdk-linux/platform-tools/

保存

. /etc/profile



Eclipse安装:

下载地址http://www.eclipse.org/downloads/,根据自己的平台和平台位宽(32/64)选择最新版下载

Eclipse针对不同的平台有不同的版本,对于Android开发,需要选择for Java EE Developers

本人在ubuntu下开发,需要选择linux版本的

Eclipse IDE for Java EE Developers

本人下载到/developer,解压得到eclipse目录

cd /developer/eclipse

给可执行文件eclipse创建桌面链接,就可以在桌面上双击打开eclipse了



ADT插件安装:

google针对Eclipse开发的插件

将Eclipse和Android SDK粘合在一起,使得Eclipse能开发Android程序

如果你选择的其它IDE需要安装对应的插件


打开eclipse

Help - Install New Software...

Work with:项点击Add...(右边)

弹出对话框,填写

名字:ADT Plugin(自定义的,但不要与已有的重复)

地址:https://dl-ssl.google.com/android/eclipse/(如果先下载了ADT的安装包,点击右边的Archive...来添加本地的ADT的安装包

完成后,在Work with中选择添加的ADT Plugin

等待加载列表,然后在列表框中勾选Developer tools(全部选中,一般都全选)

一路Next...,直到Finish

再配置一下,ADT才能找到Android SDK

Windows - Preferences

左边列表选择Android

右边SDK Location写入Android SDK的安装目录(本人的Android SDK装在/sdk/android/android-sdk-linux

右下角选择Apply(将列出当前SDK支持的所有Android版本)

选择右下角OK

完成之后在eclipse的File - New - Project中可以看到有Android的节点,包含有当前ADT版本可以创建的Android项目


注意:

Android应用运行前,必须创建一个对应版本的AVD(Android Virtual Device),指定Android版本的模拟器

Android SDK每个Android版本对应一个AVD

当ADT安装成功后,eclipse工具栏就多出两个Android按钮,点第二个(手机中关一个android logo)按钮进入Android Virtual Device Manager

点右上角New...

配置新建的AVD后,点击右下角Create AVD

再在Android Virtual Device Manager中选中欲启动的AVD,点击右边Start...即可


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

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

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

Android NDK安装:

NDK部分不能单独作为应用来运行,所以需保证Android SDK已经安装了

下载地址http://developer.android.com/tools/sdk/ndk/index.html,选择下载android-ndk-r8e-linux-x86.tar.bz2

拷贝到/sdk/android,解压

tar jxvf android-ndk-r8e-linux-x86.tar.bz2

解压后得到/sdk/android/android-ndk-r8e

里面的ndk-build脚本就是用来编译NDK程序,那么该脚本所在目录需要添加到PATH环境变量中:

/sdk/android /android-ndk-r8e


gedit /etc/profile

添加到文件最后,保存

。 /etc/profile


CDT插件安装:

Eclipse中开发C/C++程序的Eclipse插件

NDK程序不一定用到CDT,但在Eclipse中同时开发Android应用和Android NDK就要装CDT

下载地址http://eclipse.org/cdt/downloads.php

若在线安装CDT 8.1.2 for Eclipse Juno地址http://archive.eclipse.org/tools/cdt/releases/juno/

这里为Eclipse安装CDT插件和安装ADT插件的方法是一样的,可以参考一下上面的描述


NDK的目标是编译得到.so动态链接库文件,然后通过JNI提供给上层的Java调用,从而实现C/C++程序的简易迁移。

编译.so和编译成二进制可执行文件的过程是一样的。


Android NDK的命令行编译:

进入欲编译的NDK模块目录,而NDK源码还在其子目录jni中(基本包含Android.mk、XXX.cpp)

ndk-build //不用进到jni目录中去

编译输出.so库在其子目录libs/armeabi


Eclipse导入已有的NDK程序到Eclipse:

File - Android Project - Create project from existing source

Location指向NDK模块目录 - Finish


麻烦:以上在命令行编译NDK - Eclipse中刷新NDK工程 - Eclipse中重新编译NDK工程生成apk

简化:配置NDK集成开发环境Eclipse,使Eclipse中改了XXX.cpp,在生成apk之前自动编译XXX.cpp,就不用在console和Eclipse之间换来换去的操作。

右击Eclipse工程 - Properties - (左边)Builders - (右边)New - 选择Program - OK

编辑配置

Name:XXX_builder(自定义)

Main页:

Location:/bin/bash(用bash来解析Script)

Working Directory:/bin(当前工具目录)

Arguments:-c "cd /sdk/android/android-ndk-r8e/samples/XXX && /sdk/android/android-ndk-r8e/ndk-build"(进入NDK模块目录、调用ndk-build编译NDK)

Refresh页:

选择将要刷新的目录:Specify Resources...,勾选libs - Finish

Build Options页:

选择将要编译的目录:Specify Resources...,勾选jni - Finish

ok,在Eclipse里面编译XXX工程就会自动重新编译NDK(NDK就只是jni目录部分,当然,一个工程除了jin目录还有其他的java部分),在Eclipse的Console输出中可以看到打印


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

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

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

交叉编译环境安装:

一般在Android NDK和Android源码中会包含,也可以自己下载

下载地址http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

ARM processors - Download the GNU/Linux Release 将会转到ARM linux交叉编译工具链索取页

ARM processors - Download the EABI Release 将会转到ARM eabi交叉编译工具链索取页

填上你的个人信息,(Email:XXX@gmail.com  County:UNITED STATES  Zip Code:12345678) - Get Lite!

到邮箱里面去查看下载地址并转到,选最新版本 - 选IA32 GNU/Linux Installer(CodeSourcery下载页)下载

安装:

./安装文件名.bin

修改PATH环境变量,添加交叉编译工具链的bin目录


若下载的是.tar.bz2,解压

tar jxvf arm-XXX-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

得到解压后的交叉编译工具链目录

修改PATH环境变量,添加交叉编译工具链的bin目录

修改ARCH环境变量,ARCH=arm


设定交叉编译参数
打开kernel目录下的Makefile文件,
ARCH        ?= $(SUBARCH) 改为: ARCH        ?= arm
CROSS_COMPILE指向刚才下载的prebuilt中的arm-eabi编译器:CROSS_COMPILE ?= arm-eabi-
注意:自己下载的交叉编译工具则按照下面方法修改 
CROSS_COMPILE ?= arm-none-linux-gnueabi-
这里是指定自己下载和解压的工具链的前缀了,告诉make,在编译的时候要使用自己的工具链。


这里交叉编译环境的建立,需要理清思路:

1、安装到自定义目录(不管是自己下载的、从别人那里拷贝来的、还是用NDK的或Android 源码里面的)

2、把交叉编译工具目录下的bin目录路径添加到PATH环境变量,不管在哪个目录都可以直接使用该目录下的编译命令(bin目录下的所有命令都有相同的前缀,把这相同的前缀部分拷贝,用以修改要编译的kernel目录下面Makefile文件的CROSS_COMPILE变量值

3、编译指定的kernel,需要修改kernel目录下的Makefile文件

ARCH?= $(SUBARCH) //是指你要使用kernel/arch/目录下面的哪个子架构,你进入该目录就可以看到不同的架构在不同的架构名目录下,当然,我的平台是arm架构的

CROSS_COMPILE?= $(CONFIG_CROSS_COMPILE:"%"=%) //你要使用的交叉编译工具链前缀,注意不要把最后的一个减号写掉了


ARCH    ?= arm //所以这里写arm,就是kernel/arch/目录下面的arm/目录名

CROSS_COMPILE    ?= arm-none-linux-gnueabi- //第2步拷贝的编译命令的前缀

这样子就针对这个kernel使用自己指定的交叉编译工具了


编译内核

kernel/arch/arm/configs目录下有各种平台的默认配置

找到自己的平台,eg:s3c6400_defconfig

cd ../../.. //回到kernel目录

make s3c6400_defconfig //将s3c6400_defconfig拷贝到kernel目录下的.config文件中,作为当前配置

make menuconfig //根据自己的平台差异,做变更

make //按.config的配置编译kernel




Logo

更多推荐