这是关于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!说明运行成功。

posted on 2011-03-11 17:04  Kevin Bing  阅读(280)  评论(0编辑  收藏  举报