Android C++开发环境搭建

Android 开发环境搭建

安装JDK

  • 首先找到本地JDK安装包jdk-7-windows-i586.exe,或者到甲骨文公司的官方网站下载JDK的安装包,根据自己电脑的操作系统选择正确的版本下载。下载还的安装包如下图所示。

  • 用鼠标左键双击JDK安装包,会出现下图所示的安装界面。

 

  • 点击“下一步”出现下图所示的自定义安装界面。

  • 可以根据需要选择不同的安装路径和安装内容。这里我们保持默认选择。点击“下一步”出现下图所示的“正在安装”界面。

  • 等待进度条到100%的时候,又会跳出“自定义安装”界面,这个时候要安装的是语言支持插件。直接点击下一步。

JDK的环境变量配置 

  • 完成了第一步,只是把JDK环境安装完成了。这个时候还要通过一系列的环境变量的配置才能使用JDK环境进行JAVA开发。配置环境变量包括java_home,path和classpath三个部分。用鼠标右击“我的电脑”,选择“属性”->“高级”->“环境变量”->“系统变量”->“新建”。

  • 在“变量名”输入框中写入“java_home”,在“变量值”输入框中写入“C:\Program Files\Java\jdk1.7.0” (根据安装路径填写),然后点击“确定”,java_home就设置完成了。

  • 下面开始“classpath”的配置。选中“系统变量”查看是否有classpath项目,如果没有就点击“新建”,如果已经存在就选中classpath选项,点击“编辑”按钮,然后在“变量名”中填写“classpath”,在“变量值”中填写“C:\Program Files\Java\jdk1.7.0\jre\lib”(根据安装路径填写)。

  • 现在可以进行“path”的配置了。同上在“classpath”设定时类似,“变量名”输入框填写“path”,“变量值”输入框填写“C:\Program Files\Java\jdk1.7.0\bin”(根据安装路径填写)。

  • JDK的环境变量已经配置完成,可以通过打开命令提示符窗口,输入命令“java -version”, 看到Java版本的信息,来确定安装是否成功。首先点击“开始”,然后点击“运行”。

  • JDK版本信息就全部显示出来了,也表面JDK已经安装和配置完成,可以开始进行JAVA开发了。

安装 Eclipse

  • 建议直接使用Eclipse压缩包,解压即可运行。或者可以选择重新安装,下载地址:http://www.eclipse.org/downloads/

SDK 4.0安装

  安装方法可以参考http://wenku.baidu.com/view/2b2aa341b307e87101f6960a.html

直接解压android-sdk.rar压缩包安装,或者到http://developer.android.com/sdk/index.html下载的android-sdk。

解压后打开SDK Manager.exe可以看到如下的界面;

左侧是我们要安装的SDK目录,如果你的网络够快而且空间不是特别少的话,选择Accept All,然后Install,开始漫长的在线安装,之后出现下面界面:

这样SDK的安装已经基本完成,由于在tools目录下有许多我们在命令行下执行的命令,我们要进行环境变量的添加,就是在Path中添加我们的tools目录:

Eclipse中安装配置ADT(Android Development Tools)插件

  • 启动Eclipse后,选择Help->Install New Software

  • 然后添加ADT plus-in网址:https://dl-ssl.google.com/android/eclipse/,然后选择并安装Android DDMS(Android Dalvik Debug Moniter Server)和Android Development Tools(ADT),选择下一步。(需要用到 WST common core 组件,所以在安装ADT前一定要先安装,这个可以用  Install New Software http://download.eclipse.org/releases/galileo  找到目前国内的可能需要用到代理才可以安装, 设置IE的连接代理服务器,就可以)

下载完成后点击I accept the terms of the license ,之后点击Finish进行安装

重新启动Eclipse, 重启之后我们会发现Eclipse工具栏中多了

一些东西这就是我们安装插件的效果。此时如果点击模拟器(向下箭头的按钮)的按钮的话,会报错,因为我们还没有对模拟器进行配置。配置方法:Windows-->Preferences-->Android,在SDK Location中添加最早解压出来的那个压缩包的路径android-sdk-windows:

随后OK。此时再点击模拟器的按钮则会出现配置界面。选在New就可以新建一个新的Android模拟器,因为手机版本不同,版本提供的服务也不同,所以要建立多个模拟器来测试:

 

 

然后Create AVD就可以了。随后选中模拟器的版本,点击Start就会出现模拟出来的手机界面了:

 

在eclipse中集成c/c++开发环境,安装CDT

注意 :自己下载的CDT组件可能配置不完整,建议采用eclipse提供的C++开发方案里面的 CDT,然后把该方案里面所有CDT的 features和plugins复制出来我用的是http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliossr2  下载后,直接解压,然后运行一下里面的eclipse,创建一个 C++项目看能不能编译成功,如果能就没问题。然后把features和plugins 目录下跟CDT有关的文件和目录复制到装有android开发环境的eclipse 的 features和plugins目录下也可以采用那个自己下载CDT插件来安装,不过可能造成配置错误,后面无法debug。

  • 装Eclipse的C/C++环境插件:CDT,这里选择在线安装,首先登录http://www.eclipse.org/cdt/downloads.php,找到对应你Eclipse版本的CDT插件的在线安装地址。如我这里的Eclipse 的版本是3.7 Eclipse Indigo
  • 进入http://www.eclipse.org/cdt/downloads.php 。选择和自己安装的 Eclipse 匹配的 CDT 插件版本。如我这里的Eclipse 的版本是“3.7 Eclipse Indigo”,所以选择的是 CDT 8.0.2 for Eclipse Indigo,点击http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/indigo/dist/cdt-master-8.0.2.zip 链接进入相关页面下载。
  • 将cdt解压,有两个文件夹:features和plusins,把文件夹中的东东拷到eclipse对应的目录中。
  • 重启 Eclipse,发现 C/C++ Development 出现,证实安装成功。

下载安装NDK

参考资料

l  Android NDK

l  Android NDK 是什么

  • 本地环境里面已经下载NDK,可以直接使用,或者下载后解压到一个目录,目录可以随便当在哪里。

下载安装cygwin

    由于NDK编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境, cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,非常有用。通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了。下面我们一步一步的安装cygwin吧。

  • 首先,你得先跑到http://www.cygwin.com下载setup.exe
  • 然后双击运行吧,运行后你将看到安装向导界面:

 

  • 点击下一步

  • 此时让你选择安装方式:

           1)Install from Internet:直接从Internet上下载并立即安装(安装完成后,下载好的安装文件并不会被删除,而是仍然被保留,以便下次再安装)。

           2)Download Without Installing:只是将安装文件下载到本地,但暂时不安装。

           3)Install from Local Directory:不下载安装文件,直接从本地某个含有安装文件的目录进行安装。

l  以install方式下载整个cygwin的话,大小大概在1.7G左右,所以注定这是一个比较漫长的过程。特别是不能采用我们平时的下载工具,并且服务器在国外,更加剧了耗时的长度,请从第三步开始;

l  以Install From Local Directory方式,下载Cygwin包,选择安装的目录(如果已经有了CygWin安装包,强烈建议用这种方法);请从第七步开始。

  • 选择第一项,然后点击下一步:

  • 选择要安装的目录,注意,最好不要放到有中文和空格的目录里,似乎会造成安装出问题,其它选项不用变,之后点下一步:

 

5.     上一步是选择安装cygwin的目录,这个是选择你下载的安装包所在的目录,默认是你运行setup.exe的目 录,直接点下一步就可以:

 

6.     此时你共有三种连接方式选择:

     1) Direct Connection:直接连接。

     2) Use IE5 Settings:使用IE的连接参数设置进行连接。

     3) Use HTTP/FTP Proxy:使用HTTP或FTP代理服务器进行连接(需要输入服务器地址、端口号)。

          用户可根据自己的网络连接的实情情况进行选择,一般正常情况下,均选择第一种,也就是直接连接方式。然后再点击“下一步”;

 

7.      这是选择要下载的站点,我用的是http://mirrors.163.com/,速度感觉还挺快,选择后点下一步。

8.      此时会下载加载安装包列表

9.     建议全部安装所有包,不然在以后编译时会出现错误,或者安装开发NDK所需的文件包。Search是可以输入你要下载的包的名称,能够快速筛选出你要下载的包。那四个单选按钮是选择下边树的样式,默认就行,不用动。View默认是Category,建议改成full显示全部包再查,省的一些包被隐藏掉。左下角那个复选框是是否隐藏过期包,默认打钩,不用管它就行,下边开始下载我们要安装的包吧,为了避免全部下载,这里列出了后面开发NDK用得着的包:autoconf2.1、automake1.10、binutils、gcc-core、gcc- g++、gcc4-core、gcc4-g++、gdb、pcre、pcre-devel、gawk、make共12个包。

10.  然后开始选择安装这些包吧,点skip,把它变成数字版本格式,要确保Bin项变成叉号,而Src项是源码,这个就没必要选了。

11.  下面测试一下cygwin是不是已经安装好了。

运行cygwin,在弹出的命令行窗口输入:cygcheck -c cygwin命令,会打印出当前cygwin的版本和运行状 态,如果status是ok的话,则cygwin运行正常。

然后依次输入gcc --version,g++ --version,make –version,gdb –version进行测试(或,输入make -v 和 gcc -v ),如果都打印出版本信息和一些描述信息,非常高兴的告诉你,你的cygwin安装完成了!

配置NDK环境变量

  • 首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,例如我的是:C:\cygwin\home\Administrator\.bash_profile,(注意:我安装的时候我的home文件夹下面神马都没有,解决的办法:首先打开环境变量,把里面的用户变量中的HOME变量删掉,在E:\cygwin\home文件夹下建立名为Administrator的文件夹(是用户名),然后把E:\cygwin\etc\skel\.bash_profile拷贝到该文件夹下)。
  • 打开bash_profile文件,添加NDK=/cygdrive/<你的盘符>/<android ndk 目录> 例 如:

                   NDK=/cygdrive/e/android-ndk-r5

                   export NDK

                   NDK这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存

                 PATH=$PATH:$NDK  //记得设置路径参数

  • 打开cygwin,输入cd $NDK,如果输出上面配置的/cygdrive/e/android-ndk-r5信息,则表明环境变量设置成功了。

 

测试用NDK来编译程序 

  • 现在我们用安装好的NDK来编译一个简单的程序吧,我们选择ndk自带的例子hello-jni,我的位于D:\android\ndk-r5\samples\hello-jni(根据你具体的安装位置而定),运行cygwin,输入命令cd /cygdrive/d/android/ndk-r5/samples/hello-jni,进入到d:\android\ndk-r5\samples\hello-jni目录。

  • 输入$NDK/ndk-build,执行成功后,它会自动生成一个libs目录,把编译生成的.so文件放在里面。 ($NDK是调用我们之前配置好的环境变量,ndk-build是调用ndk的编译程序)

  • 此时去hello-jni的libs目录下看有没有生成的.so文件,如果有,你的ndk就运行正常啦!

配置C/C++的编译器

  1. 打开 eclipse ,新建一个项目,采用用已经存在的源码创建,不然后选ndk自带的hello-jni例子来测试
  2. 选择项目的右键点击Properties,然后选择Builders创建一个项目的扩展编译工具,出现了添加界面,首先给编译配置起个名字,如:C_Builder设置Location为<你cygwin安装路径>\bin\bash.exe程序,例如:C:\cygwin\bin\bash.exe,设置Working   Directory为<你cygwin安装路径>\bin目录,例如:C:\cygwin\bin设置Arguments为--login -c "cd /cygdrive/e/android-ndk-r5/samples/hello-jni && $NDK/ndk-build"这个参数很重要一定要注意路径必须是项目的包含有NDK 编译文件的路径上面的配置中/cygdrive/e/android-ndk-r5/samples/hello-jni是你当前要编译的程序的目录,$NDK是之前配置的ndk的环境变量,这两个根据你具体的安装目录进行配置,其他的不用变,Arguments这串参数实际是  给bash.exe命令行程序传参数,进入要编译的程序目录,然后运行ndk-build编译程序
  3. 接着切换到Refresh选项卡,给Refresh resources upon completion打上钩 .这个一定要是选刷新整个工作区域的,不然可能造成NDK编译后没有马上打包到APK里面,要下一次运行才打包进去
  4. 然后切换到Build Options选项卡,勾选上最后三项  //这个可以不用,避免每次修改C文件都会编译,很烦
  5. 之后点击Specify Resources按钮,选择资源目录,勾选你的项目目录即可 //也可以不处理
  6. 最后点击Finish,把你配置的编译器排到第一位,否则C代码的编译晚于Java代码的编译, 会造成你的C代码要编译两次才能看到最新的修改

还有一种方法,就是用CDT自己的编译配置来做,而不用新建Builder

  1. 打开属性窗口,选择C++ builder

在执行程序处,把原来的 bash 改成 <你cygwin安装路径>\bin\bash ,后面 参数 跟 新建Builder  的 Arguments一样比如 : c:\cygwin\bin\bash.exe  --login -c "cd /cygdrive/d/android/ndk-r5/samples/hello-jni && $NDK/ndk-build" 因为参数可能很多,而参数本身就是一些linux的shell 命令,所以,可以采用把所有的shell命令写到一个shell脚本文件,然后参数里面改用这个脚本文件的名字,比如--login -c " /cygdrive/d/android/ndk-r5/samples/hello-jni/build.sh" 其中 build.sh就是脚本文件的名字,build.sh 必须有执行的权限, 可以用 chmod +x  build.sh 来加这个权限,这个在执行cygwin的终端窗口中执行改变权限后用可以用 ls -l 来查看权限

//下面是我的脚本文件的格式

# 先切换到程序目录

cd /cygdrive/d/android-ndk-r5/samples/hello-jni  

#设定一个编译器输出obj文件的目录

objPath="obj/local/armeabi/objs-debug/hello-jni/"

#验证obj目录是否存在

if [ -d "$objPath" ]; then

         #删除所有的0.d文件,不然在编译错误后,就无法再编译了

         rm -rf $objPath/*.o.d

fi

#设置是支持debug模式的

debug=true

#开始真正调用NDK的编译,开始编译项目

$NDK/ndk-build

 

C++  build  里面要去掉自动生成makefile选项,不然会无法编译,根据以上的配置就可以很方便的在修改源代码后,自动编译程序。

配置 NDK 调试

配置调试环境比较麻烦,要有一些准备

  1. 所限需要修改 ndk-gdb 文档,本来ndk-gdb在启动模拟器上的 gdb-server 后会调用一个 默认的gdb客户端,现在需要把它注释掉
  2. ndk-gdb  文件在 NDK的目录下,把该文件的最后一行  $GDBCLIENT -x `native_path $GDBSETUP` 注释掉,就不会启动一个gdb客户端,因为我们要把gdb集成到eclipse 里面调试,比较方便可以可视化断点跟踪,文件修改后另存一个文件,文件名可以随便,我这里叫ndk-gdb.eclkipse的。
  3. 需要先编译一次项目,编译后会在项目目录下的obj/local/armeabi目录下生成一些文件,里面有一个gdb.setup文件,该文件有一个gdbserver 的 端口映射,需要把它删除,才能让eclipse的调试映射到该端口,然后另存为一个文件,比如 gdb2.setup、gdb.setup 文件必须在运行一次ndk-gdb.eclkipse后才会出现
  4. 打开run菜单 ->external tools -> external tools configurations  新建一个  program ,可以随便起名 比如 NDK-GDB

1)         main 页面,location 输入 调试的程序名 比如 c:\cygwin\bin\bash.exe  ,working directory  输入c:\cygwin\bin\

    参数 输入  --login -c "cd /cygdrive/d/android/ndk-r5/samples/hello-jni && ndk-gdb.eclipse --verbose"   这个参数的输入方式跟 编译器一样ndk-gdb.eclipse  就是那个移除 GDBCLIEN 的 ndk-gdb文件--verbose 用来显示详细的调试处理信息

  1. 创建一个C++  debug  配置

l  选择 run 菜单--->debug  configurations

l  选择C/C++ Attach to Application  ,新建一个debug 配置,名字随意起,我这里起

l  main 页面 C/C++ Application 选择 项目录下obj/local/armeabi 的app_process 文件,如D:\android-ndk-r5\samples\hello-jni\obj\local\armeabi\app_process,app_process 文件必须是在运行一次ndk-gdb.eclkipse后才会出现在 main 页面 最下面的GB选择,选择 select other,在弹出的GDB选择中选中 use configuration specific settings 然后选中列表框中的standard create process launcher

l  debug页面

    debugger 选择 gdbserver  main   gdb debug 选择 NDk 的gdb  执行文件,我这里是 D:\android-ndk-r5\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-gdb.exe

gdb command files 选择 上面 项目录下obj/local/armeabi 的 gdb配置文件,就是上面提到的gdb2.setup

比如   D:\android-ndk-r5\samples\hello-jni\obj\local\armeabi\gdb2.setup connection 页面,type 选择TCP port number 输入5039 android 的gdbserver 是5039的端口

                              

项目调试

  1. 在android 项目的  第一个Activity 中的oncreate ,设置一个断点
  2. 运行android 项目的debug,

         运行项目中会有install apk 以及启动调试信息

         Installing HelloJni.apk... // 安装程序包

         HelloJni] Success!  //安装成功

         HelloJni] Starting activity com.example.hellojni.HelloJni on device emulator-5554 //开始启动 activity

         HelloJni] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.hellojni/.HelloJni }

         HelloJni] Attempting to connect debugger to 'com.example.hellojni' on port 8638                  //debug

  1. 在触发Activity 的断点后,执行 >external tools的  NDK-GDB 这里会显示,gdbserver 启动信息,以及android项目的PID等等信息,成功的话,会有成功信息,这里要注意android 的版本,必须是2.2以后的版本才支持调试

                   Android NDK installation path: /cygdrive/D/android-ndk-r5

                   Using default adb command: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb

                   ADB version found: Android Debug Bridge version 1.0.26

                   Using final ADB command: '/cygdrive/d/Android/android-sdk-windows/platform-tools/adb'

                   Using auto-detected project path: .

                   Found package name: com.example.hellojni

                   ABIs targetted by application: armeabi

                   Device API Level: 8  // Android 2.2 以后的平台才支持远程调试

                   Device CPU ABI: armeabi

                   Compatible device ABI: armeabi

                   Found debuggable flag: true

                   Found device gdbserver: /data/data/com.example.hellojni/lib/gdbserver

                   Using gdb setup init: /cygdrive/d/android-ndk-r5/samples/hello-jni/libs/armeabi/gdb.setup

                   Using toolchain prefix: /cygdrive/D/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-

                   Using app out directory: /cygdrive/d/android-ndk-r5/samples/hello-jni/obj/local/armeabi

                   Found data directory: '/data/data/com.example.hellojni'

                   Found running PID: 306

                   ## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb shell run-as com.example.hellojni lib/gdbserver +debug-socket --attach 306

                   Launched gdbserver succesfully.

                   Setup network redirection

                   ## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/com.example.hellojni/debug-socket

                   Attached; pid = 306  //把 GDB server跟程序 PID 306挂钩

                  

                   Listening on sockaddr socket debug-socket

                  

                   ## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb pull /system/bin/app_process D:/android-ndk-r5/samples/hello-jni/obj/local/armeabi/app_process

                   354 KB/s (5676 bytes in 0.015s)

                   Pulled app_process from device/emulator.

                   ## COMMAND: /cygdrive/d/Android/android-sdk-windows/platform-tools/adb pull /system/lib/libc.so D:/android-ndk-r5/samples/hello-jni/obj/local/armeabi/libc.so

                   75 KB/s (270068 bytes in 3.484s)

                   Pulled libc.so from device/emulator. //启动成功

  1. 执行C++ 的debug 配置 ,成功的话会显示一些gdb 信息,这里要注意,如果CDT安装不正确,可能会出现无法执行程序的想象
  2. 在C++程序中设置断点
  3. 恢复android项目的运行
  4. 等待一会,程序会触发C++的断点,这是就可以单点调试C++程序

注意:C++调试由于是远程调试,相对还是比较慢

posted on 2013-04-19 12:06  刀光建影  阅读(2268)  评论(0编辑  收藏  举报

导航