android调用c++

1:下载ndk,本人下载的是64位android-ndk-r10,设置ndk的环境变量NDK_HOME=E:\Software\Android\android-ndk32-r10-windows-x86_64\android-ndk-r10,另外再添加PATH环境变量同NDK_HOME一样的,cmd查看ndk-build的版本信息 ndk-build -version。

2:在adt的eclipse中设置NDK路径,菜单window-preferences-android-ndk-ndk location就是上面提到的NDK_HOME目录。

3:添加工程的本地支持,右键-android tools-add native support,命名例如TestNative,会自动生成一个jni文件夹,里面有两个文件,Android.mk,TestNative.cpp。

4:C++编译设置项目右键-properties-c/c++ build,设置build command =${NDK_HOME}/ndk-build.cmd,就是NDK_HOMD下的命令文件ndk-build.cmd,当然use default build command不要选。

5:新建类,例如TestNative,代码如下

public class TestNative {
	static 
    { 
        System.loadLibrary("TestNative"); 
    }
	
	public native int add(int i, int j);
}

6:用javah,利用cmd cd进入到项目com目录的上一层src,输入命令javah -classpath . -jni com.example.***.TestNative2,回车,就会看见src目录下多一个头文件com_example_hheas_TestNative2,将该文件拷贝到jni目录下。

该方法每次都要重新设置,不方便,可以用工具

External Tools Configurations,左边Program右键new,例如命名javahForAndroidProject,

Location设置为:${system_path:javah}

Working Directory设置为:${project_loc}

Arguments设置为:-v -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name}

应用之后,Organize Favorites,Add,选择刚才新建的工具javahForAndroidProject,OK。

以后文件重新编辑之后,只要点击那个工具javahForAndroidProject,选中jni重新刷新F5就可以了。

7:在TestNative.cpp中实现,

#include <jni.h>

#include "com_example_hheas_TestNative.h"
#include "com_example_hheas_TestNative2.h"

#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_hheas_TestNative
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_example_hheas_TestNative_add
  (JNIEnv *, jobject, jint i, jint j) {
	return i + j;
}

JNIEXPORT jint JNICALL Java_com_example_hheas_TestNative2_multiply
  (JNIEnv *, jobject, jint i, jint j) {
	return i * j;
}

#ifdef __cplusplus
}
#endif

如果头文件是C规则的话,源文件要加extern "C"一定要注意!

8:项目libs目录下会找到刚才生成的库文件libTestNative.so

9:注意C和C++还是有区别的,例如

C++中用:

return env->NewStringUTF( "Hello from JNI !  Compiled with ABI ");

注意:只有一个参数!!

C中用:

return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI ");

注意:有两个参数!!

10:还要新建Application.mk文件

例如支持stl什么的,平台什么的

APP_STL := stlport_static
APP_STL := gnustl_static
APP_ABI := all

APP_PLATFORM := android-14

上面第四句话是调试C++用到的。

11:调试C++,工程右键-Properties-c/c++ Build,Build command处添加NDK_DEBUG=1,即重新改写为

${NDK_HOME}/ndk-build.cmd NDK_DEBUG=1

常见错误

APP_PLATFORM android-19 is larger than android:minSdkVersion 14

反正是版本不对的意思,在Application.mk中添加APP_PLATFORM := android-14。

Unable to launch cygpath. Is Cygwin on the path?

添加NDKROOT 设置为本地ndk目录

工程右键-Properties-c/c++ Build-Environment-Add

例如E:\Software\Android\android-ndk32-r10-windows-x86_64\android-ndk-r10

12:还有一步,本人在重新按照此步骤时,出现jint无法识别的问题,需要设置C/C++头文件路径的,项目右键Properties-c/c++ General-Path and Symbols右边Include Add 添加路径E:\Software\Android\android-ndk32-r10-windows-x86_64\android-ndk-r10\platforms\android-14\arch-arm\usr\include,上面是本人的路径,依实际情况而变。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值