jni部分是使用c++写的么?
WMNetSdkTest.cpp:
这两句只要针对在cpp中的标准头文件如:<string.h>……
如果是 在JNI里面要 extern "C"{jni c++代码}
随笔:ubuntu下截图:先按下shift键再按下PrtSc出现小十字鼠标,选取范围截图。
找不到头文件:
1.首先打印当前目录查看
$(warning ****LOCAL_PATH**** )
$(warning $(LOCAL_PATH))
2.别人的一个例子,里面有加载另外一个so文件的完整代码,我截图分析下:
其中:将要被加载的so文件为NetSdklib下的libShitAdd.so,编写的头文件为Add.h。编译后输出的so文件为armeabi文件夹下的两个so文件。接下列出并分析Android.mk文件
Android.mk:
LOCAL_PATH := $(call my-dir)
$(warning ****LOCAL_PATH**** )
$(warning $(LOCAL_PATH))//打印当前位置
include $(CLEAR_VARS)
LOCAL_MODULE := ShitAdd //即将被加载的so文件需要重新编译
LOCAL_SRC_FILES := NetSdklib/libShitAdd.so //即将被加载的so文件位置
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/NetSdk/include//自己编写的头文件位置
include $(PREBUILT_SHARED_LIBRARY) //编译成动态so文件
include $(CLEAR_VARS)
LOCAL_MODULE := ShitAdd-test//加载了so文件后编译出的so文件的名字
LOCAL_SRC_FILES := WMNetSdkTest.cpp//
LOCAL_SHARED_LIBRARIES := libShitAdd //上边即将被加载的so文件重新编译后的名称
LOCAL_LDLIBS := -llog -lz -lm
include $(BUILD_SHARED_LIBRARY)
WMNetSdkTest.cpp:
#include "NetSdk/include/Add.h"
#include <jni.h>
#include <android/log.h>
#include <string.h>
#define LOG_TAG "myNetSdkTest"
#define LOGW(a ) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)
extern "C" JNIEXPORT jint JNICALL Java_com_example_sotest_MainActivity_WMNETSDKTest(
JNIEnv *env, jobject obj)
{
LOGW("Strart Server!!!");
int a = 5;
int b = 3;
int c = 0;
c = shitAdd(a,b);//这个就是即将被加载的so中的方法
return c;
}
另外:如果cpp文件中的标准头文件仍找不到,可以在Android.mk同目录下新建Applcation.mk在其中添加两句:
APP_STL := gnustl_shared
APP_STL:=stlport_shared
这两句只要针对在cpp中的标准头文件如:<string.h>……
接下来直接进入jni目录执行ndk-build.
附件:在百度云中