NDK打包.so库

在我们的c++代码写好后,我们往往会需要打包成so文件给别人使用,那就要求我们知道如何把c++代码打包成so文件,这里介绍NDK打包的方式

  • 1.创建android工程

  • 2.关联NDK

  • 3.声明native方法,并创建头文件和C++文件

  • 4.创建Android.mk文件和Application.mk文件

  • 5.打包so文件

1.2属基本准备工作不再赘述,项目别忘关联ndk就行(注意不是sdk)

3:首先声明一个native方法

public class JNIUtils {

  
    public native static String stringFromJNI();

}

然后切换到java文件夹下

 

然后执行javac指令生成.class文件

 

然后执行javah指令生成.h头文件

 

然后创建.cpp文件,引入.h头文件及里面的方法

 

然后创建 jni文件夹(与java文件夹同级),里面放置Android.mk,Application.mk,.h头文件,.cpp文件,四个东西。

其中,Android.mk文件如下

# Android.mk必须以LOCAL_PATH开头,注释#除外
# 设置工作目录,而my-dir则会返回Android.mk文件所在的目录
LOCAL_PATH := $(call my-dir)

# 借助CLEAR_VARS变量清除除LOCAL_PATH外的所有LOCAL_<name>变量
include $(CLEAR_VARS)

# 设置模块的名称,即编译出来.so文件名
# 注,要和上述步骤中build.gradle中NDK节点设置的名字相同
LOCAL_MODULE := native-lib

# 指定参与模块编译的C/C++源文件列表,多文件用"\"隔开
LOCAL_SRC_FILES := JNIUtils.cpp


# 必须在文件结尾定义编译类型,指定生成的静态库或者共享库在运行时依赖的共享库模块列表。
# BUILD_SHARED_LIBRARY 共享库,供java或者其他共享库调用
# BUILD_STATIC_LIBRARY 静态库,供共享库调用,不能直接被java调用
include $(BUILD_SHARED_LIBRARY)

Application.mk

# 最常用的APP_ABI字段:指定需要基于哪些CPU平台的.so文件
# 常见的平台有armeabi x86 mips,其中移动设备主要是armeabi平台
# 默认情况下,Android平台会生成所有平台的.so文件,即同APP_ABI := armeabi x86 mips
# 指定CPU平台类型后,就只会生成该平台的.so文件,即上述语句只会生成armeabi平台的.so文件
# APP_ABI := armeabi armeabi-v7a mips x86
APP_ABI := all
APP_PLATFORM := android-23

以上两个文件根据需求自行更改

然后build.gradle文件中配置

defaultConfig {
...
        ndk{
            //模块名称,即编译的.so文件名
            moduleName "native-lib"

            //"log"表示加入Android的调试日志,只要再导入#include <android/log.h>
            //就可以使用__android_log_print方法打印日志到logcat中
            ldLibs "log"
        }
    }

注意so库的名称保持一致

第五步,生成.so文件

Terminal(或cmd)切换至jni文件目录,执行ndk-build即可

so库的调用

public class JNIUtils {

    /**
     * 加载生成的so库文件
     * **/
    static {
        System.loadLibrary("native-lib");
    }

    /**
     * java调C中的方法都需要用native声明且方法名必须和c的方法名一样
     * **/
    public native static String stringFromJNI();

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值