编写生成.a库
第一步: 创建JNI的hello程序

第二步:在cpp下创建include/calcul.h

calcul.h
//
// Created by Administrator on 2020/11/12.
//
#ifndef JNITEST_CALCUL_H
#define JNITEST_CALCUL_H
int add(int a , int b);
#endif //JNITEST_CALCUL_H
第三步:写calcul.cpp来实现头文件calcul.h中的方法

calcul.cpp
#include <jni.h>
#include "include/calcul.h" //引用头文件,相当于java中实现接口,头文件为接口,本cpp为实现
int add(int a , int b){
return a + b;
}
第四步: 在CMakeLists.txt中加入calcul.cpp

第五步: 在native-lib.cpp中调用add方法

第六步: 在MainActivity中调用

以上是c代码例子编写 , 下面生成.a静态库供别人使用
打开CMakeLists.txt文件,
将add_library下的SAHRED改为STATIC,
将native-lib.cpp删掉 ,
将MainActivity中native方法删去


直接运行或者编译一下都行,.a文件就会生成了,别人引用就能直接使用里面的方法

使用.a库
第一步:将.a文件需要的头文件放到指定目录,这里放在了include/下面

第二步:在main下创建jniLibs把需要的.a文件粘贴进去

第三步:修改CMakeLists.txt
添加include_directories(include/)
, 括号里是.a文件的头文件
添加
add_library(native-lib STATIC IMPORTED)
set_target_properties(
native-lib #这个一般是.a文件去掉lib和后缀之后的名字,
#可以在生成的时候自己设置,
#上次没改所以还是native-lib,
#与这次项目重名了,
#所以这次项目改成了native-lib123
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../jniLibs/arm64-v8a/libnative-lib.a #.a文件的路径, ${CMAKE_SOURCE_DIR}这个是cpp下的路径
)
在 target_link_libraries 中添加
target_link_libraries( # Specifies the target library.
native-lib123
native-lib #这个是.a静态库名字
# Links the target library to the log library
# included in the NDK.
${log-lib} )


在 MainActivity 中使用

直接使用add()方法,他的实现在.a静态库中

网友评论