编译so文件

作者: 暖宝宝_龍 | 来源:发表于2018-08-10 17:02 被阅读0次

先说明一下,这种方式并不实用于全部情况,只是我自己使用的时候,这种方式成功了,所以记录一下

1:创建一个类useNdk(随意写)

public class useNdk {

    static {

        System.loadLibrary("useNdk");

    }

    public native static int getMsg(int num);

}

这里System.loadLibrary("useNdk");的useNdk是你要编译成so包的名字,getMsg是调用c的方法,生成的so包名字是libuseNdk.so

然后点击Android Studio顶部的Build->Make Project

会在app/build/intermediates/classes/debug下面自动创建class类,比如

创建过后就要手动执行命令生成.h文件

先要cd到debug目录,然后执行:javah -d jni -classpath . 报名+类名

比如我的:D:\android\workspace\doorctrl\doorctrl\app\build\intermediates\classes\debug>javah -d jni -classpath . com.ll.useNdk

不要放过任何一个细节,-classpath后面是空格,然后是点,然后是空格,然后是包名类名

成功的话会在intermediates下生成jni文件夹,里面有.h文件

在src/main下面创建jni文件夹,或者吧上面的jni文件夹copy过来

然后创建.c文件

随便写的一个,主要是#include<com_ll_usendk.h>,引用.h文件,未了能让java调用到.c文件里面的方法

到这里.h文件和.c文件就弄好了,现在就编译

现在build.gradle中添加

ndk {

    moduleName "useNdk"//生成文件名

    cFlags "-DANDROID_NDK -D_RELEASE"//这个对应生成模式

    ldLibs "m","log","jnigraphics"//这个对应LOCAL_LDLIBS但是需要去掉前面的 "l"

    abiFilters "armeabi-v7a", "arm64-v8a", "x86","x86_64"//对应app的api

    stl "stlport_shared"//对应app_stl

}

sourceSets { main { jni.srcDirs= ['src/main/jni','src/main/jni'] } }

externalNativeBuild {

    ndkBuild {

        path 'build/intermediates/ndk/debug/Android.mk'

    }

}

ndk添加在defaultConfig下面

sourceSets和externalNativeBuild与defaultConfig同级的

然后cd到jni目录下,就是src/main/jni

然后执行ndk-build

这样就会在main目录下生成lib文件夹,也有可能会多生成一个obj文件夹,不管他

lib里面的东西就是你想要的so文件了

然后吧lib文件里的东西copy到你想要放的地方就ok了

基本就这些流程了,有些还是比较坑,我也有些地方没有说明白,有什么不懂的可以留言

相关文章

  • 编译so文件

    先说明一下,这种方式并不实用于全部情况,只是我自己使用的时候,这种方式成功了,所以记录一下 1:创建一个类useN...

  • ubantu上编译ffmpeg2

    接着上一篇:在ubantu上编译ffmepg 把各个so文件编译成一个so文件: 主要修改:开启静态文件(.a)编...

  • 如何调用so库文件

    制作so文件 首先先制作制作so文件:libadd_c.so[ add.c] 编译: -shared 生成共享目标...

  • FFmpeg 编译(2)--单一版

    写在前面的废话 接上一篇,介绍了如何编译出多个so文件。本片介绍如何编译出单一的so文件。网上对于编译出单一库文件...

  • NDK

    编译so文件 在jni文件路径下面,输入ndk-build。

  • Android NDK Jni学习使用(一)

    jni 编译三种方法 纯源码编译 写头文件,提供.a文件 编译 jni中调用so文件 编译 1. 创建工程 创建一...

  • 偶遇FFmpeg(番外)——FFmpeg花样编译入魔2之单个SO

    单个SO文件 1. 编译o文件 因为最后会将文件合成libffmpeg.so文件,所以就不需要去改configur...

  • Linux下fortran编译链接

    动态库*.so的编译及使用 编译原理 so文件是动态库的集合,由f90文件编译而成,此时f90程序中一般不包含pr...

  • FFmpeg安卓平台编译注意点

    修改ffmpeg-2.2/configure文件 如果直接按照未修改的配置进行编译,结果编译出来的so文件类似li...

  • Android开发中so库文件的存放位置

    在自己编译so库文件,或者引用第三方的so库文件时,库文件存放目录不正确经常会引起很多问题。这里总结一下。 so文...

网友评论

    本文标题:编译so文件

    本文链接:https://www.haomeiwen.com/subject/rwhlbftx.html