原文地址:http://blog.sina.com.cn/s/blog_5396c96c0100uu4t.html
1 用常规方法建立或导入java工程。
2 在工程所在目录下建立jni目录,所有的c++代码和mk文件都放在这个目录下。
3 从sample目录里拷贝Android.mk和Application.mk到jni目录下并修改相应内容。
4 如果包含多个c++模块,那么修改Application.mk的APP_MODULES字段,例:
APP_MODULES = freetype myapp2
同时建立freetyp.mk, myapp2.mk,修改android.mk为:
LOCAL_PATH := $(call my-dir)
include $(LOCAL_PATH)/freetype.mk
include $(LOCAL_PATH)/myapp2.mk
也就是说:android.mk里可以包含多个模块的mk文件。
5 如果要使用c++库函数,在Application.mk里加上
APP_STL := stlport_shared
在android.mk里加上:(注意不用手工添加stlport头文件目录)
LOCAL_STATIC_LIBRARIES += libstlport_shared.so
另外java代码里所有打包进apk的模块都要手工load,否则要异常:(不像windows是自动load)
System.loadLibrary("stlport_shared");
System.loadLibrary("freetype");
System.loadLibrary("myapp2");
5 把java工程改成c++混合工程:file->new->other->c/c++->convert to a c/c++ project
6 在工程上右键属性,修改如下:
cygwin/bin要加入系统path环境变量里。NDK_ROOT为ndk所在目录,也要加入系统环境变量。
7 build工程,顺利编译出所有模块。
8 新建一个调试配置:
c/c++ application为当前工程目录的obj\local\armeabi\app_process。然后点击Select other...
继续修改属性:
debugger: F:\android-ndk-r5b\toolchains\arm-eabi-4.4.0\prebuilt\windows\bin\arm-eabi-gdb.exe
file: F:\tj\at_utils\build\android\obj\local\armeabi\gdb.setup
9 进入ndk目录,把ndk-gdb文件复制成ndk-gdb2。打开ndk-gdb2,屏蔽掉最后第1和最后第5句话,屏蔽的方法是句子最前面加#:
#echo "target remote :$DEBUG_PORT" >> $GDBSETUP
if [ -n "$OPTION_EXEC" ] ; then
cat $OPTION_EXEC >> $GDBSETUP
fi
#$GDBCLIENT -x `native_path $GDBSETUP`
10 在工程的obj\local\armeabi目录下建立一个叫dbg.bat的文件,文件内容为:
set ANDROID_NDK_ROOT=/cygdrive/f/android-ndk-r5b
bash %NDK_ROOT%/ndk-gdb2
(图是r5b版本的,不需要第一句,r5c版需要定义ANDROID_NDK_ROOT)
现在设置工作全部完成,可以开始调试了。
调试步骤为:
1 启动java程序
2 启动后双击dbg.bat,这个时候会弹出一个小dos窗口,不要关闭这个窗口,里面是gdbserver。当用户结束调试后这个窗口会自动关闭。
3 再次点击调试按钮下旁边的小三角形按钮,选择调试配置,找到刚才的c++ aplication,点击debug。(见过程8)
这个时候就可以同时调试java和c++代码了。不过调试c++代码性能非常差,速度不是一般的慢。