Android开发中如何将自己编译的.so文件用到其他的项目中

来源:互联网 发布:无锡华云数据 编辑:程序博客网 时间:2024/05/23 00:10

Android开发中如何将自己编译的.so文件用到其他的项目中(使用cmake的编译方式)

使用Androidstudio 做jni开发的时候,我们常常将c文件变成.so文件,再将.so文件放到其他项目中使用。下面介绍一种使用cmake编译方式来操作。

  • 使用Androidstudio创建一个Android项目

打开Androidstudio创建一个项目,命名为tryndk

这里写图片描述

  • 在项目中新创建一个类,在其中声明native方法
    在src/main目录下创建一个工具类,用来存放native方法
    这里写图片描述
    在Javautils类创建两个方法,声明为native
    这里写图片描述
    然后选中项目,点击build->make project,在项目中的build->intermediates->classes->debug->com->example->tryndk下就能看见javautils.class文件了

  • 在Androidstudio中打开终端(View->ToolWindows->Terminal)
    在terminal中进入到main目录中,然后在键入
    javah -d jni -classpath ../../build/intermediates/classes/debug com.example.tryndk.javautils记得debug 后面有个空格。然后就能在src/main目录下看到jni文件夹,里面存放了一个头文件com_example_tryndk_javautils.h,里面生成了函数声明,
    这里写图片描述

Java_com_example_tryndk_javautils_getStringFromNative为方法名,其中getStringFromNative为在javautils文件中创建的getStringFromNative方法。

  • 然后在jni目录下创建一个c文件命名为MyJni.c,实现相应的方法

这里写图片描述

方法中就是返回了一个字符串。

  • 编写CMakeLists.txt文件,用于ndk编译
    在该文件中配置编译信息
    这里写图片描述
add_library(          MyJni         SHARED         src/main/jni/MyJni.c )#c文件的路径
  • 配置使用cmake编译
    选中module,右键选择Link C++ project with gradle,选择cmake,指定CMakeLists文件的路径,编译之后就能在路径/build/intermediates/cmake/debug/obj下看见正对于不同abi的.so文件了。

然后在主程序中调用javautils中的getStringFromNative方法,即可得到返回的字符串。

  • 把.so文件放到其他module中使用
    如果想在其他的module中使用c方法,就要将/build/intermediates/cmake/debug/obj路径下的文件拷贝在新建的module中的src/main/jniLibs目录下(没有jniLibs文件夹就新建一个,名字不能错),在编译加载库时,会找到这个目录下的.so文件。接下来是最关键的一步了,在src/main/java目录下创建一个相同路径的文件并且类名也要一样,如:前面项目生成.so文件时,Javautils的路径是com.example.tryndk.javautils,那么在新的module里要建立同样的路径,并把相应的javautils文件放在该路径下。javautils的内容为:
public class javautils {    static {        System.loadLibrary("MyJni");//MyJni为链接库名    }    public static native String getStringFromNative();}

此时该类中的getStringFromNative()就可以使用了。


原创粉丝点击