zoukankan      html  css  js  c++  java
  • android 调用c文件生成so库并调用

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

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

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

    二、为项目配置ndk环境:

      1、下载android ndk,并解压,我的存放目录为:D:slandroid-developandroid-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路径]platformsandroid-22android.jar;….uildintermediatesclassesdebug [你的包名+包含native方法的类]

         我的是:

    D:slandroidstudioprojectqrcodedemoQRCodeDemo>javah -d jni -classpath D:slandroid-developandroid-sdk-windowsplatformsandroid-25android.jar;appsrcmainjava 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:slandroidstudioprojectqrcodedemoQRCodeDemo>ndk-nuild

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

       

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

  • 相关阅读:
    如何做一个富文本编辑器
    chrome插件开发示例
    使用github Pages和Jekyll搭建一个Blog
    使用JavaScript制作简单的动画
    JQuery模拟七------利用extend包装ajax实现
    JQuery模拟六------jQuery处理事件简化版
    JQuery模拟五------实现属性set&get和CSS set&get
    JQuery模拟四------把用到Sizzle的地方先用CSS3选择器实现
    JQuery模拟三------利用extend函数扩展jQuery自身的方法和浏览器判断
    JQuery模拟二------添加extend函数和简单选择器
  • 原文地址:https://www.cnblogs.com/suliang-com/p/6866435.html
Copyright © 2011-2022 走看看