android 调用c文件生成so库并调用

Posted 奋斗吧,少年!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 调用c文件生成so库并调用相关的知识,希望对你有一定的参考价值。

公司需要做一个sdk,里面需要用到别人写的c文件,第一次做,各种百度,各种学习,现在做一个小总结:

借鉴:http://blog.csdn.net/u013210543/article/details/52103015

一、新建一个project:例 ExampleDemo, 包名为:com.demo.example;

二、为项目配置ndk环境:

  1、下载android ndk,并解压,我的存放目录为:D:\\sl\\android-develop\\android-ndk-r14b;

  2、点击进入Project Structure

     

  3、在弹出框中选中 SDK Location 标签,在 Android NDK Location中选中ndk路径:

    

  4、查看local.properties

     

  5、gradle.properties项目的末尾添加这行代码:android.useDeprecatedNdk=true

 三、开始创建操作;

  1、新建一个class,添加native方法:

    

  2、执行Build --》Make Project:

    

    完成后可以看到,我们生成了他的class文件

     

四、命令行生成.h文件

  1、打开Terminal

    

  2、在命令行输入,进入main文件: cd app/src/main 

    执行编译命令: javah -d jni -classpath [你的sdk路径]\\platforms\\android-22\\android.jar;….\\build\\intermediates\\classes\\debug [你的包名+包含native方法的类]

     我的是:

D:\\sl\\androidstudioproject\\qrcodedemo\\QRCodeDemo>javah -d jni -classpath D:\\sl\\android-develop\\android-sdk-windows\\platforms\\android-25\\android.jar;app\\src\\main\\java com.cirein.qrcod
e.QRCodeManager

  

  完成后会在项目中生成一个jni文件夹,下面就是我们生成的.h文件:

    

 

    文件中的内容为:

      

  现在开始实现.h文件里面的方法:将.h文件复制拷贝到jni,并重命名为:cirein.c(自己随便定义名称)

  注:将其他的c文件也可以拷贝到jni文件夹下,在打so库的时候会一并打入;

  对cirein.c文件进行编辑:我的项目中使用了其他的c文件,所以就不贴详细代码了

    

  打开app Module的build.gradle文件,在defaultConfig节点里添加以下代码,并执行同步操作

    

  我认为重要的是建Android.mk和Application.mk文件:

    我的Android.mk文件:

LOCAL_PATH := $(call my-dir)    //固定写
include $(CLEAR_VARS)      //固定写
LOCAL_MODULE    := CIRein    //生成的so名称
LOCAL_SRC_FILES := cirein.c \\ CIRein_Base64.c \\ CIRein_XXTea.c      //用到的c文件
include $(BUILD_SHARED_LIBRARY)      //生成动态库

    我的Applicationmk文件:

APP_ABI := all  //也可以指定格式

  

五、生成SO文件

  执行:ndk-build

D:\\sl\\androidstudioproject\\qrcodedemo\\QRCodeDemo>ndk-nuild

  完成后就可以看见生成的so文件了:

   

现在就可以使用.so文件了

 

以上是关于android 调用c文件生成so库并调用的主要内容,如果未能解决你的问题,请参考以下文章

Android NDK系列-AS生成jar包导入so库并使用方法

备忘:gcc在linux下打包so库并调用

Android怎么调用第三方SO动态链接库

Android NDK系列- 文件拆分与合并

Android NDK系列- 文件拆分与合并

Android 开发--CMakeList调用本地so文件