Android studio 初步使用JNI(二)制作.so库

来源:互联网 发布:牛扒和牛排区别知乎 编辑:程序博客网 时间:2024/05/16 02:50

制作.so库

  • 配置NDK环境,不明白的朋友可以去看我的上一篇文章
  • 创建Android项目-JNIDemo

    这里写图片描述

  • 新建一个类,命名为NdkJniUtils

package test.com.jnidemo;/** * Created by wl on 2017/6/7. */public class JniUtils {    static {        System.loadLibrary("JNIDemo");       }    public native String getCLanguageString();}
  • 使用javah命令生成.h文件

    • 点击Build–>Make Project,生成class文件

    • 找到class文件,在app->build->intermediates->classes->debug目录下

      这里写图片描述

    • 通过javah命令生成.h头文件,点击Android Studio底下菜单中的Terminal

      依次敲入:

      cd app\build\intermediates\classes\debug

      javah -jni test.com.jnidemo.JniUtils

      如图:

      这里写图片描述

      注意:test.com.jnidemo为包名,请结合项目情况进行修改

    • 在debug目录下找到test_com_jnidemo_JniUtils.h

      这里写图片描述

  • 根据生成.h头文件,新建.c或者.cpp文件,生成.so库文件

    • 在app->src->main目录下新建一个jni文件夹,用来存c/c++的头文件以及源文件,将刚刚生成.h头文件剪切到这里

    这里写图片描述

    • 在jni文件夹下创建一个jnitest.c或jnitest.cpp文件,并写下如下代码:
#include "test_com_jnidemo_JniUtils.h"JNIEXPORT jstring JNICALL Java_test_com_jnidemo_JniUtils_getCLanguageString  (JNIEnv *env, jobject obj){     return (*env)->NewStringUTF(env,"My name is Super Marie,Hi!");  }
  • 注意:

这里写图片描述

现在已经基本完成JNI层的实现了

接下来在jni文件夹下创建Android.mk和Application.mk文件

  • Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := JNIDemoLOCAL_SRC_FILES := jnitest.cinclude $(BUILD_SHARED_LIBRARY)
其中LOCAL_PATH是C/C++代码所在目录,也就是我们的jni目录。LOCAL_MODULE是要编译的库的名称。编译器会自动在前面加上lib,在后面加上.so。LOCAL_SRC_FILES是要编译的C/C++文件。
  • Application.mk
APP_ABI := all
表示生成所有平台的动态库。

配置gradle

1、在defaultConfig下,配置ndk:

ndk {      moduleName "JNIDemo" // 生成的so名字  }  

2、在android标签内配置sourceSets:

sourceSets {      main {          jniLibs.srcDirs = ['libs']      }  }    

如图:

这里写图片描述

3、在gradle.properties最下面加上“android.useDeprecatedNdk=true”

开始生成.so库

1.清空Termial并输入cd app\src\main,回车

2.输入ndk-build即可生成.so库

这里写图片描述

如果没有生成可以Build->Make Project一下,进行编译,生成.so库文件,路径:app->build->intermediates->ndk->debug->lib下

下篇文章将会讲怎么使用这个.so库

阅读全文
0 0
原创粉丝点击