用NDK调用第三方库
用NDK调用第三方库遇到不少坑,总结一下。
1、添加JNI目录
参考:
http://www.cnblogs.com/lanqie/p/7442668.html
2、文件介绍:
其中:JniFactory 是包含native函数的类
libc4jniTest.a是第三方的库文件,非JNI规范
libc4jniTest.h 是对应的头文件
myjni-lib.c 是JNI规范的源文件,用于封装第三方库
上代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(activity_main);
// Example of a call to a native method
TextView tv = (TextView) findViewById(sample_text);
tv.setText(JniFactory.cpp4jni("VBVBBVVBB")+"<<");
}
}
public class JniFactory {
public static native String cpp4jni(String str);
static {
System.loadLibrary("lmyjni-lib");
}
}
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
LOCAL_MODULE := libc4jniTest
LOCAL_SRC_FILES := libc4jniTest.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS)
LOCAL_MODULE := lmyjni-lib
LOCAL_SRC_FILES := myjni-lib.c
LOCAL_STATIC_LIBRARIES := libc4jniTest
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := armeabi armeabi-v7a
c4jniTest.h
#ifndef C4JNI_C4JNITEST_H
#define C4JNI_C4JNITEST_H #include <string.h> char* c4jni_hello(char* string); #endif //C4JNI_C4JNITEST_H
myjni-lib.c
#include <jni.h>
#include "c4jniTest.h" jstring Java_com_xh_jni_JniFactory_cpp4jni
( JNIEnv* env, jobject jobject,jstring x )
{
return c4jni_hello(x);
}
值得注意的有:
libc4jniTest.a 应该是交叉编译,应用于arm平台
步骤:
1.进入ndk目录 cd /opt/Java/android-ndk-r14b/build/tools
2. 安装工具到指定目录 ./make-standalone-toolchain.sh --platform=android-14 --install-dir=/opt/Java/arm-linux-androideabi/
3.编译c /opt/Java/arm-linux-androideabi/bin/arm-linux-androideabi-gcc -c c4jniTest.c
/opt/Java/arm-linux-androideabi/bin/arm-linux-androideabi-ar -cvr libc4jniTest.a c4jniTest.o
参考资料:http://blog.csdn.net/jiangxuchen/article/details/22883575
用NDK调用第三方库的更多相关文章
- Android JNI如何调用第三方库
http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的 ...
- [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...
- [置顶] android调用第三方库——第四篇——调用多个第三方库
0:前言: 在前面三篇中我们介绍了android调用第三方库的形式,在这一篇中我们介绍调用多个第三方库的Android.mk的写法,由于其他三篇介绍的很详细,这里只给出Android.mk的内容. [ ...
- android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)
转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...
- android调用第三方库——第一篇 (转载)
转自:http://blog.csdn.net/jiuyueguang/article/details/9447245 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言: 这两天一直在研 ...
- Veins(车载通信仿真框架)入门教程(二)——调用第三方库
Veins(车载通信仿真框架)入门教程(二)——调用第三方库 在借助Veins进行自己的研究时我们经常需要实现一些比较复杂的功能,有时就需要借助第三方库的帮助. 博主的研究需要使用神经网络,但是自己编 ...
- 【C++】将调用第三方库的代码封装成动态库供上层调用
需求分析 Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库.所以需要将该程序编译成一个动态库文件(.so)供Java调用. 步骤 使用CLion创建一个动态库的项目,会 ...
- 调用第三方库时需注意MD/MT的链接编译方式(遇到的坑记录)
MD与/MT编译 1./MD是动态库链接方式编译 (DEBUG版本是/MDd) 2./MT是静态库链接方式编译 (DEBUG版本是/MTd) 编译器不会检查到的问题 我今天遇到的记录下来 当你调用第三 ...
随机推荐
- Jquery 行选中背景色
直接上代码: 懒得以后网上在查了,拷贝直接可用 Style: .tbSelectCss { background-color:#d5f4fe; } Html: <table name=" ...
- 详解基于朴素贝叶斯的情感分析及 Python 实现
相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) ╮(╯-╰ ...
- Python数据类型(字典和集合)
1.5 Dictionary(字典) 在Python中,字典用放在花括号{}中一系列键-值对表示.键和值之间用冒号分隔,键-值对之间用逗号分隔. 在字典中,你想存储多少个键-值对都可以.每个键都与一个 ...
- Logstash 解析Json字符串,删除json嵌套字段
一.场景:此文以一个简单的json字符串文件为例,描述如何用logstash解析嵌套的json,并删除其中的某些字段 我们在linux中test.json的内容如下: {"timestamp ...
- FinalHttp的简要介绍与使用
http://blog.csdn.net/zhaokaiqiang1992/article/details/30291259?utm_source=tuicool 在之前的一篇文章中,我们简单的介绍了 ...
- 2018 省选 D1T2 IIIDX
题目大意: 给出k.n个数选择一种字典序最大的排列,使得对于任意的i,di>=d[i/k](下取整 下同) 分析: 很容易想到的是建树,将i的父亲设为[i/k],之后建有向边. 60分贪心: 将 ...
- win+R快捷启动程序
win10: Win+R cmd:命令行程序 notepad:记事本 winword:word文档 calc:记事本 mspaint:画图 wordpad:写字板
- spring对事务的配置
接下来我将给大家介绍spring事务配置的两种方式: 1.基于XML的事务配置.2.基于注解方式的事务配置. 前言:在我们详细介绍spring的两种声明式事务管理之前,我们需要先理解这些概念 1)sp ...
- property getitem setitem
..... >>> class Foo(object): def __init__(self,name): self._name = name @property def get_n ...
- jenkins master-slave配置
如果要想自动化构建,需要slave主机能够从源码库上拉代码,并打包构建 选取指定的slave进行构建 jenkins + docker 实现slave的动态构建和销毁 https://www.cnbl ...