使用jni打包成.so库,因为底层程序都是使用c实现的,现mcu模块需要提供java的接口给客户用,先用jni打包成so库,再打包成jar。
以下是jni打包成.so的方法。
1、使用Android studio 2.3.3 新建项目,包含c++支持。
2、在main下新建文件夹jni,把原c文件拷贝到jni文件夹下
3、在java文件夹下创建HTMcuSDK.java的文件,把接口函数定义好,如下:
public static native void vcSetCallback(Object mcuCallbackObj);
public static native boolean vcSysInit(byte[] mcuSystemIniFile, byte[] mcuIP);
public static native void vcCleanUp();
4、使用Terminal进入到HTMcuSDK.java的目录下,cd app\src\main\java\com\example\ht\mcuconsole
5、javac HTMcuSDK.java,得到HTMcuSDK.class文件,再返回到java目录下cd …
6、javah com.example.ht.mcuconsole 获得HTMcuSDK.h文件
7、右击文件夹,New-Folder-JNI Folder生成cpp文件,把HTMcuSDK.h拷贝进来,再新建c/c++ Source File,实现函数
8、app 下的build.gradle里defaultConfig{ ndk{
moduleName “mcuconsole” //生成的so名
abiFilters “armeabi-v7a” //cpu类型
}}
9、AndroidMainfest.xml添加
10、在jni文件夹新建Android.mk和Application.mk,默认使用的Android.mk在jni文件夹里
Android.mk内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mcuconsole
LOCAL_SRC_FILES := mcuSdk_jni.cpp
LOCAL_SRC_FILES += mcuFunc.cpp
LOCAL_SRC_FILES += mcuMsg.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk内容:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_PLATFORM := android-19
APP_ALLOW_MISSING_DEPS=true
11、添加ndk-build工具,File-Settings-Tools-External Tools打开+,
Name:ndk-build
Program:F:\android-ndk-r16b-windows-x86_64\android-ndk-r16b\ndk-build.cmd
Working directory:E:\ANDROID\SO\console\app\src\main
12、使用ndk-build工具,右击文件夹-External Tools-ndk-build可生成.so文件