Android C++开发环境搭建Android 开发环境搭建安装JDK
JDK的环境变量配置
安装 Eclipse
SDK 4.0安装安装方法可以参考http://wenku.baidu.com/view/2b2aa341b307e87101f6960a.html 直接解压android-sdk.rar压缩包安装,或者到http://developer./sdk/index.html下载的android-sdk。 解压后打开SDK Manager.exe可以看到如下的界面; 左侧是我们要安装的SDK目录,如果你的网络够快而且空间不是特别少的话,选择Accept All,然后Install,开始漫长的在线安装,之后出现下面界面: 这样SDK的安装已经基本完成,由于在tools目录下有许多我们在命令行下执行的命令,我们要进行环境变量的添加,就是在Path中添加我们的tools目录: Eclipse中安装配置ADT(Android Development Tools)插件
下载完成后点击I accept the terms of the license ,之后点击Finish进行安装 重新启动Eclipse, 重启之后我们会发现Eclipse工具栏中多了 一些东西这就是我们安装插件的效果。此时如果点击模拟器(向下箭头的按钮)的按钮的话,会报错,因为我们还没有对模拟器进行配置。配置方法:Windows-->Preferences-->Android,在SDK Location中添加最早解压出来的那个压缩包的路径android-sdk-windows: 随后OK。此时再点击模拟器的按钮
然后Create AVD就可以了。随后选中模拟器的版本,点击Start就会出现模拟出来的手机界面了:
在eclipse中集成c/c++开发环境,安装CDT注意 :自己下载的CDT组件可能配置不完整,建议采用eclipse提供的C++开发方案里面的 CDT,然后把该方案里面所有CDT的 features和plugins复制出来我用的是http://www./downloads/packages/eclipse-ide-cc-developers/heliossr2 下载后,直接解压,然后运行一下里面的eclipse,创建一个 C++项目看能不能编译成功,如果能就没问题。然后把features和plugins 目录下跟CDT有关的文件和目录复制到装有android开发环境的eclipse 的 features和plugins目录下也可以采用那个自己下载CDT插件来安装,不过可能造成配置错误,后面无法debug。
下载安装NDK参考资料
下载安装cygwin由于NDK编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境, cygwin是一个在windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,非常有用。通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了。下面我们一步一步的安装cygwin吧。
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环境变量
NDK=/cygdrive/e/android-ndk-r5 export NDK NDK这个名字是随便取的,为了方面以后使用方便,选个简短的名字,然后保存 PATH=$PATH:$NDK //记得设置路径参数
测试用NDK来编译程序
配置C/C++的编译器
还有一种方法,就是用CDT自己的编译配置来做,而不用新建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) 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 用来显示详细的调试处理信息
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的端口
项目调试
运行项目中会有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
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. //启动成功
注意:C++调试由于是远程调试,相对还是比较慢 |
|