环境:win7 64位,虚拟机ubuntu10.04,TI4.1.2源码
在源码下编译so文件是方便了,不要在下载android ndk 和cygwin啥的。
具体做法如下:
1 在源码新建的extral/mtJNItest/Android.mk
内容:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
SerialPort.c
LOCAL_MODULE_TAGS := optional
LOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES := libutils
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := libmyserialport
include $(BUILD_SHARED_LIBRARY)
2,编写c文件
在复制你的c代码,必须准守java调用的c代码哦Jint啥的
重点是c的代码如何写,不小心就会找不到方法
比如JNIEXPORT jint JNICALL Java_com_start_am335x_factorytest_utils_SerialPort_test
(JNIEnv *env, jobject t){
return 110;
}
函数名字分析:
JNICALL Java是固定
com_start_am335x_factorytest是包名
utils是包下的类名
test才是函数名
还有一些数据类型以后再补充。。。
3 开始编译:
在源码目录下执行 make libmyserialport TARGET_PRODUCT=am335xevm
ok,在out回生成libmyserialport.so库
4 使用so库
拷贝到libs下的armeabi开始调用了
需要注意的是
public native void test();
static {
System.loadLibrary("myserialport");//不是libmyserialport
}