zoukankan      html  css  js  c++  java
  • 通过cmake在Android中调用c语言,且三方应用通过so库调用c语言

    1、  新建JniUtils类实现native方法

    2、  在build中执行clean project 再rebuild project 生成class文件。

    注意:最新版本的AndroidStudio中classes文件的路径是在appuildintermediatesjavacdebugcompileDebugJavaWithJavacclasses。而原来的版本classes路径是在appuildintermediatesclasses

    3、  通过javah -jni 生成对应的.h文件

    注意:

    3.1、在执行该命令时要在classes路径下执行,否则会报找不到JniUtils的类文件,且执行时不带文件后缀

    3.2、生成的.h文件也是在classes路径下

    .h路径:

     

    成功时:

    失败时:

    4、  新建jni文件夹,把上述中的.h文件拷贝到jni文件夹下,且在jni路径下新建一个c语言文件,实现.h中的方法(注意方法名要保持一致)

     

    5、  接下来开始通过cmake生成so文件

    5.1、把CMakeList.txt文件拷贝到app路径下,注意CMakeList中的一些设置,在add_library中要设置需要编译的源文件,在target_link_libraries中要设置输出的so文件名,eg设置为serial_port则生成的so名为libserial_port。执行完之后,要右键app,选择Link C++ project with grade

    5.2、在app路径下的build.gradle中配置cmake,且在JniUtils.java中设置System.loadLibrary注意libname为在CMakeList中设置的保持一致

    5.3、点击sync工程之后,在clean Project时,如果报如下错误,则重启AndroidStudio试下,大概率的能成功clean

    5.4、通过上步的clean Project之后,再Rebuild Project会生成so文件,路径如下

    6、  把上述生成的so库拷贝到libs路径下,运行即可。

    7、三方应用如果也想调用上述的so文件方法如下

     7.1、需要把so拷贝到libs路径下,然后在app路径下的build.gradle中的android里设置

     7.2、也要创建对应的native方法,注意路径要和so库里的路径完全一样。然后就可以成功调用了

    参考demo:https://github.com/lelelongwang/TestApp

    我的GitHub:https://github.com/lelelongwang
  • 相关阅读:
    .net core 大型事务的处理办法
    .net Core把一个list集合里面的所有字段的数值汇总
    C#使用模板导出Excel
    JQuery滚动分页查询功能
    返回一个条件表达式树的拓展方法
    C++类的大小
    基数排序-八大排序汇总(8)
    归并排序-八大排序汇总(7)
    快速排序(交换排序)-八大排序汇总(6)
    希尔排序(插入排序)-八大排序汇总(5)
  • 原文地址:https://www.cnblogs.com/longjunhao/p/10220173.html
Copyright © 2011-2022 走看看