AS使用jni并且c++中使用第三方so库
来源:互联网 发布:java成员变量 默认 编辑:程序博客网 时间:2024/06/16 23:25
之前在eclipse中加载jni并且jni中使用到了第三方库的时候很简单只要在Android.mk文件中配置就可以了
例如:
对应的Android.mk文件:
LOCAL_PATH := $(call my-dir)local_c_includes := \ $(LOCAL_PATH) \ $(LOCAL_PATH)/include \local_src_files:= \ com_protocol_OpensslProxy.cpp \include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE :=cryptoLOCAL_SRC_FILES :=libcrypto.ainclude $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE :=sslLOCAL_SRC_FILES :=libssl.ainclude $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)LOCAL_SRC_FILES += $(local_src_files)LOCAL_C_INCLUDES += $(local_c_includes)LOCAL_LDLIBS +=-llog -lzLOCAL_STATIC_LIBRARIES += crypto sslLOCAL_MODULE_TAGS := optionalLOCAL_MODULE:= libprotohandlerinclude $(BUILD_SHARED_LIBRARY)
使用时倒入这三个生成的库文件就可以了,度娘那有很多 就不再过多的赘述了。
现在我用Android studio开发了,之前的代码自然要移植到studio上边来,这时候问题就来了。开始移植的时候以为studio兼容eclipse的使用方式,直接弄过来了,一运行果然没有成功。因为Android.mk文件根本没有被调用。
然后又度娘了不少studio的jni调用,然后发现网上的大多都是简单的调用,只是写几句c/c++代码。然后gradle中配置下系统依赖库和生成的名字,就完事儿了,并没有我想要的使用第三方的库,而且使用一下使用两个的方法。然后坑了不少时间。后来发现要使用gradle-experimental插件才能解决这个问题。现在记录一下以备不时之需
gradle文件配置:
项目:
app的gradle:
apply plugin: 'com.android.model.application'def lib_distribution_root = '../distribution'model { repositories { libs(PrebuiltLibraries) { gmath { headers.srcDir "${lib_distribution_root}/gmath/include" binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file("${lib_distribution_root}/gmath/lib/${targetPlatform.getName()}/libgmath.so") } } gperf { headers.srcDir "${lib_distribution_root}/gperf/include" binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file("${lib_distribution_root}/gperf/lib/${targetPlatform.getName()}/libgperf.so") } } } } android { compileSdkVersion = 23 buildToolsVersion = '23.0.0' defaultConfig { applicationId = 'com.example.hellolibs' minSdkVersion.apiLevel = 13 targetSdkVersion.apiLevel = 23 versionCode = 1 versionName = '1.0' } ndk { platformVersion = 21 moduleName = 'hello-libs' toolchain = 'clang' stl = 'gnustl_static' cppFlags.addAll(['-std=c++11']) ldLibs.addAll(['android', 'log']) } sources { main { jni { dependencies { library 'gmath' linkage 'shared' library 'gperf' linkage 'shared' } } jniLibs { source { srcDir "${lib_distribution_root}/gmath/lib" srcDir "${lib_distribution_root}/gperf/lib" } } } } buildTypes { release { minifyEnabled false proguardFiles.add(file('proguard-android.txt')) } } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.0'}
然后就运行成功了!
0 0
- AS使用jni并且c++中使用第三方so库
- Android Studio中使用JNI和第三方.so库
- JNI 如何使用dlopen,dlsym调用第三方自定义的 .so库( JNI->C,C++)
- 使用JNI调用第三方.so文件
- android JNI 使用的两种形式 --自己实现c和调用第三方so库
- JNI 如何使用dlopen,dlsym调用第三方自定义的 .so库(包括JNI->JNI)
- cocos2dx使用第三方.so库,并且.so库生成到libs/armeabi下面
- AS中使用.SO库
- 关于AS中使用第三方库vitamio的注意事项
- 使用最新版AndroidStudio2.0进行NDK开发并且链接第三方so库
- 在AS中添加第三方jar和.so库
- Cocos2d-x中使用第三方so库
- Cocos2d-x中使用第三方so库
- android中JNI利用第三方的so库
- 如何在JNI工程中使用第三方库文件
- 使用AS第三方库:ascb库
- JNI---在c中使用log 和生成so库
- JNI调用第三方so库
- 视音频编解码相关术语解释
- 【HD 1242】Rescue (BFS)
- VC中添加头文件以及库
- (NYoj 239)月老的难题--裸最大匹配
- VS2013下(MFC编程) 与 Omron PLC 串口通信,工控机案列
- AS使用jni并且c++中使用第三方so库
- 系统栈的工作原理
- mongodb 整合spring
- go语言学习笔记之并发编程
- Codeforces#363 (Div. 2) C.Vacations
- Android开发常用工具类之图像处理
- 趣味100道C语言编程题num thirteen
- iOS-javaScriptCore学习笔记
- 实验室电脑(公网ip)利用远程桌面连接宿舍电脑(一台路由器连接4台笔记本电脑)