这是关于Android下C开发的资料,基于Linux系统。
1.软件准备(可参见【搭建Android系统入门】)
(1)操作系统ubuntu安装
在windows系统中使用wubi安装ubuntu-deskt-i386系统(版本8.04及以上)。
(2)系统软件下载
打开ubuntu终端,输入sudo apt-get install命令来通过ubuntu服务器在线安装需要
使用的软件,这里不需要选择软件版本,ubuntu服务器会做自动的版本匹配。待安装的软
件有flex,bison,gperf,libsdl- dev,libesd0-dev,libwxgtk2.6-dev,build-essen
tial,python,valgrind,curl,git(ubuntu10.04及以上版本安装git-core)。执行命
令后使用 which命令验证是否安装成功,注意,如果缺少部分软件,或者安装没有成功,
编译通常都会遇到问题,无法完成。
(3)下载安装JDK1.5(只能是1.5版本)
将下载的jdk_1.5.0_22.bin安装到/usr目录下,
# cp $JDK$/jdk_1.5.0_22.bin /usr
其中$JDK$为下载的jdk_1.5.0_22.bin所在目录。然后进入/usr目录。
# cd /usr
执行一下命令安装jdk_1.5.0_22
# ./ jdk_1.5.0_22.bin
出现提示后输入yes进行安装,安装完成后,使用一下命令设置java环境变量。
# export JAVA_HOME=/usr/jdk1.5.0_22
# export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# export PATH=$PATH:$JAVA_HOME/bin
然后输入java –version查看jdk是否安装成功,若出现java版本信息,表明安装成功
。
以上在终端设置的java环境变量只是暂时有效,若要使jdk长期有效,需修改系统配置
文件bashrc执行
# gedit /etc/bash.bashrc
(或vim /etc/bash.bashrc)
在打开的bash.bashrc文件末尾添加
export JAVA_HOME=/usr/jdk1.5.0_22
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
然后保存修改。
(4)准备android源文件
在/home目录下创建android目录,并在创建的android目录下创建bin目录。通过执行
一下命令完成:
# mkdir /home/android
# mkdir /home/android/bin
将android_2.2.tar.gz文件放入 /home/android,假定android_2.2.tar.gz所在目录
为$android_2.2.tar$,执行下列命令
# cp $android_2.2.tar$/android_2.2.tar.gz /home/android
在ubuntu中将该文件加压,发现/home/android目录下多出android_2.2目录,将该目
录中的所有文件移动至/home/android目录下
# mv –r /home/android/android_2.2/* /home/android
# rm –r /home/android/android_2.2
2.android编译环境搭建
(1)android源码编译
将android安装在/home/android/目录下后,进入 /home/android
# cd /home/android
使用make命令编译android源码
# make
编译源码大约持续1个多小时(双核CPU可用命令 #make -j2,四核CPU用命令#make -
j4提高编译速度)。
(2)设置android的image路径
编译完成后应该可以看到/home/android/out/target/product/generic/目录下面有s
ystem.img以及ramdisk.img两个镜像文件,android模拟器运行时要加载这两个文件。设置
环境变量,在终端执行
# export ANDROID_PRODUCT_OUT=/home/android/out/target/product/generic
若要使环境变量永久有效,在/etc/bash.bashec文件末尾加上
export ANDROID_PRODUCT_OUT=/home/android/out/target/product/generic
(3)调出模拟器(emulator)
环境搭建好之后,可以调出模拟器
# cd /home/android/out/host/linux-x86/bin
# ./emulator
出现模拟器界面后先不要关闭,下面的helloworld会在模拟器中测试。
(4)设置模拟器环境变量
为了在每次调用模拟器(或其他命令,如adb)时不进入模拟器所在目录,需要设置环
境变量,使用下列命令
# export PATH=$PATH:/home/android/out/host/linux-x86/bin
若要使环境变量永久有效,需要在/etc/bash.bashrc末尾添加
export PATH=$PATH:/home/android/out/host/linux-x86/bin
这样每次启动shell终端后可直接运行emulator命令启动模拟器。
3.helloworld测试
(1)设置mm命令
要编译一个单独的模块,需要使用mm命令。开启另一个终端(可使用Ctrl+Shift+N键
),执行如下命令,否则mm命令可能无法执行。
# source build/envsetup.sh
若要设置mm永久有效,需要在/etc/bash.bashrc末尾添加source /
home/android/build/envsetup.sh。
(2)创建helloworld源程序以及make文件
在/home/development/目录下创建hello目录
# cd /home/android/development
# mkdir hello
通过一下命令更改hello目录的权限,便于访问或创建文件。
# chmod 755 ./hello
在创建的hello目录下创建hello.c和Android.mk两个文件。
编写hello.c程序:
#include <stdio.h>
int main()
{
printf("Hello World!/n");
return 0;
}
编写Android.mk文件:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=/
hello.c
LOCAL_MODULE:=helloworld
include $(BUILD_EXECUTABLE)
上面LOCAL_SRC_FILES用来指定源文件;LOCAL_MODULE指定要编译的模块的名字,下一
步骤编译时就要用到;include $(BUILD_EXECUTABLE)表示要编译成一个可执行文件,如果
想编译成动态库则可用BUILD_SHARED_LIBRARY,这些可以在$(YOUR_ANDROID)/build/core
/config.mk查到。
另外,Android.mk文件中由LOCAL_MODULE指定的模块名helloworld即为目标文件。
(3)编译hello.c文件
首先进入/home/android/development/hello目录,然后使用mm命令编译hell.c文件
# cd /home/android/development/hello
# mm
如果输出“Install: out/target/product/generic/system/bin/helloworld”表示编
译完成,生成的目标文件helloworld 在/home/android/out/target/product/generic/s
ystem下面。
(4)登陆模拟器运行helloworld
要运行编译生成的helloworld文件,需将Linux系统下的helloworld文件拷贝到andro
id模拟器下。这里先使用adb shell登录模拟器,在模拟器中创建一个目录存放编译生成的
helloworld文件。adb位于Linux系统/home/android/out/host/linux-x86/bin目录下,如
果已经设置好了模拟器环境变量,则可直接在终端执行adb shell命令登陆模拟器;若尚未
设置好模拟器环境变量,则进入/home/android/out/host/linux-x86/bin目录调用adb登录
模拟器
# cd /home/android/out/host/linux-x86/bin
运行adb shell登录模拟器
# ./adb shell
登录模拟器需等待模拟器初始化完成(之前已使用./emulator启动),否则会出现如
下错误:
* daemon not running. starting it now *
* daemon started successfully *
error: device offline
当终端上出现#时, 表明adb登录成功。
模拟器根目录下有一个dev目录,在该目录下创建如下project,再在project目录下创
建hello目录。
#mkdir /dev/project
#mkdir /dev/project/hello
创建完成之使用exit命令后返回linux系统终端。然后用adb push命令将位于Linux系
统中的helloworld文件拷贝到android模拟器中。
# ./adb push /home/android/out/target/peoduct/generic/system/bin/helloworl
d
/dev/project/hello
注:可以使用adb pull ,push 命令将文件复制到一个模拟器/设备实例的数据文件或
是从数据文件中复制。install 命令只将一个.apk文件复制到一个特定的位置,与其不同
的是,pull 和 push 命令可令你复制任意的目录和文件到一个模拟器/设备实例的任何位
置。 从模拟器或者设备中复制文件或目录,使用(如下命):
adb pull <remote> <local>
将文件或目录复制到模拟器或者设备,使用(如下命令)
adb push <local> <remote>
在这些命令中, <local> 和<remote> 分别指通向自己的发展机(本地)和模拟器/设
备实例(远程)上的目标文件/目录的路径
然后再登录模拟器,进入模拟器下的/dev/project/hello目录,运行helloworld。
# ./adb shell
#cd /dev/project/hello
#./helloworld
若输出 Hello World!说明运行成功。