zoukankan      html  css  js  c++  java
  • Android Studio使用c++静态库的方法总结(hello-libs为例)

    gmath为静态库,库文件(.a文件)。

    app的CmakeLists.txt文件需要包含下列代码:

    1) whether to import libraries as static or shared (using `add_library`)
    2) where the library binaries are stored (using `set_target_properties`)
    *3)where the library headers are stored (using `target_include_directories`)

    java中声明native方法。这些native方法由c++实现。为了让java找到对应的本地实现方法,就需要建立一个对应关系。使用javah工具,自动生成本地头文件。

    javah    包名+类名

      hello-jni的参考博文(对java类进行javah的步骤):http://lib.csdn.net/article/android/49952

    hello-jni的方法1(使用gradle中的ndk):

    1、新建JAVA类,声明native函数

    2、javah对JAVA类进行编译,生成jni所需的头文件       

        细化步骤:生成.h.c的cpp类,然后make module,会在build下生成一个路径。

        注意:javah之前,要先新建jni文件夹,否者找不到文件。

    3、module下新建jni文件夹,存放2生成的头文件,并新建实现文件.c

    4、module下的build.gradle中添加ndk的配置,指定生成so动态库的文件名

    5、make  module

    6、在mainavtivity中调用native方法

         在java类中声明static library名

    hello-jni的方法2(使用cmakelist.txt):

    前几个步骤和上面的一样,只有第四步不同。

    4、在jni文件夹下新建cmakelist.txt文件,

    cmake_minimum_required(VERSION 3.4.1)
    add_library(newhellojni SHARED newhellojni.c)
    target_link_libraries(newhellojni
    android
    log)
    在module下的build.gradle中添加
    externalNativeBuild{
    cmake{
    arguments '-DANDROID_TOOLCHAIN=clang'
    //arguments '-DANDROID_PLATFORM=android-14',
    // '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
    }
    }
    externalNativeBuild{
    cmake{
    path "src/main/jni/CMakeLists.txt"
    }
    }

    真正调用第三方静态库的方法

    1、新建JAVA类,声明native函数

    2、javah对JAVA类进行编译,生成jni所需的头文件       

        细化步骤:生成.h.c的cpp类,然后make

        注意:javah之前,要先新建jni文件夹,否者找不到文件。

    3.将2生成的头文件拷贝到jni文件下,并在.c文件对声明的native函数进行实现。  也就是在这个.c文件,可以肆意地使用第三方库的方法,记得include

    4.在jni文件夹下新建CMakeLists.txt文件,在文件中设置第三方的静态库,设置本地的共享库

    cmake_minimum_required(VERSION 3.4.1)
    set(libs_DIR ${CMAKE_SOURCE_DIR}/../../../../libs)

    #设置第三方库
    add_library(lib_gmath STATIC IMPORTED)
    set_target_properties(lib_gmath PROPERTIES IMPORTED_LOCATION
    ${libs_DIR}/gmath-old/lib/${ANDROID_ABI}/libgmath.a)

    #设置本地库
    add_library(usestatic SHARED
    usestatic.c)

    target_include_directories(usestatic PRIVATE
    ${libs_DIR}/gmath-old/include)

    target_link_libraries(usestatic
    android
    lib_gmath
    log)

    5.在module的gradle.build文件中,增加:

    externalNativeBuild {
    cmake {
    arguments '-DANDROID_PLATFORM=android-14',
    '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
    }
    }
    externalNativeBuild {
    cmake {
    path 'src/main/jni/CMakeLists.txt'
    }
    }

    6.在工程的settings.gradle文件中,增加:   include ':testforstatic'  (module名)

    另外,CMake的一些命令可以参考博文:http://www.cnblogs.com/tt2015-sz/p/6027662.html

    
    
  • 相关阅读:
    分析函数之keep函数
    分析函数之开窗函数over
    分析函数之rollup、cube函数
    LEFT JOIN ON AND 和LEFT JOIN ON WHERE区别
    【greenplum】gp客户端
    【greenplum】greenplum的plpgsql:函数,存储过程,赋值语句,DML语句,静态语句与动态语句,流程控制语句
    【oracle】oracle 静态语句与动态语句
    【oracle】linux下卸载oracle11方法
    【DB2】DB2安装
    【oracle】查看字符占用字节数
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7775348.html
Copyright © 2011-2022 走看看