涉及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:[email protected] 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