android 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值