用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调用第三方库的更多相关文章

  1. Android JNI如何调用第三方库

    http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的 ...

  2. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  3. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

  4. [置顶] android调用第三方库——第四篇——调用多个第三方库

    0:前言: 在前面三篇中我们介绍了android调用第三方库的形式,在这一篇中我们介绍调用多个第三方库的Android.mk的写法,由于其他三篇介绍的很详细,这里只给出Android.mk的内容. [ ...

  5. android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)

    转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...

  6. android调用第三方库——第一篇 (转载)

    转自:http://blog.csdn.net/jiuyueguang/article/details/9447245 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言: 这两天一直在研 ...

  7. Veins(车载通信仿真框架)入门教程(二)——调用第三方库

    Veins(车载通信仿真框架)入门教程(二)——调用第三方库 在借助Veins进行自己的研究时我们经常需要实现一些比较复杂的功能,有时就需要借助第三方库的帮助. 博主的研究需要使用神经网络,但是自己编 ...

  8. 【C++】将调用第三方库的代码封装成动态库供上层调用

    需求分析 Java应用中需要调用C++的程序,而这个C++的程序中需要引入一个第三方静态库.所以需要将该程序编译成一个动态库文件(.so)供Java调用. 步骤 使用CLion创建一个动态库的项目,会 ...

  9. 调用第三方库时需注意MD/MT的链接编译方式(遇到的坑记录)

    MD与/MT编译 1./MD是动态库链接方式编译 (DEBUG版本是/MDd) 2./MT是静态库链接方式编译 (DEBUG版本是/MTd) 编译器不会检查到的问题 我今天遇到的记录下来 当你调用第三 ...

随机推荐

  1. Jquery 行选中背景色

    直接上代码: 懒得以后网上在查了,拷贝直接可用 Style: .tbSelectCss { background-color:#d5f4fe; } Html: <table name=" ...

  2. 详解基于朴素贝叶斯的情感分析及 Python 实现

    相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) ╮(╯-╰ ...

  3. Python数据类型(字典和集合)

    1.5 Dictionary(字典) 在Python中,字典用放在花括号{}中一系列键-值对表示.键和值之间用冒号分隔,键-值对之间用逗号分隔. 在字典中,你想存储多少个键-值对都可以.每个键都与一个 ...

  4. Logstash 解析Json字符串,删除json嵌套字段

    一.场景:此文以一个简单的json字符串文件为例,描述如何用logstash解析嵌套的json,并删除其中的某些字段 我们在linux中test.json的内容如下: {"timestamp ...

  5. FinalHttp的简要介绍与使用

    http://blog.csdn.net/zhaokaiqiang1992/article/details/30291259?utm_source=tuicool 在之前的一篇文章中,我们简单的介绍了 ...

  6. 2018 省选 D1T2 IIIDX

    题目大意: 给出k.n个数选择一种字典序最大的排列,使得对于任意的i,di>=d[i/k](下取整 下同) 分析: 很容易想到的是建树,将i的父亲设为[i/k],之后建有向边. 60分贪心: 将 ...

  7. win+R快捷启动程序

    win10: Win+R cmd:命令行程序 notepad:记事本 winword:word文档 calc:记事本 mspaint:画图 wordpad:写字板

  8. spring对事务的配置

    接下来我将给大家介绍spring事务配置的两种方式: 1.基于XML的事务配置.2.基于注解方式的事务配置. 前言:在我们详细介绍spring的两种声明式事务管理之前,我们需要先理解这些概念 1)sp ...

  9. property getitem setitem

    ..... >>> class Foo(object): def __init__(self,name): self._name = name @property def get_n ...

  10. jenkins master-slave配置

    如果要想自动化构建,需要slave主机能够从源码库上拉代码,并打包构建 选取指定的slave进行构建 jenkins + docker 实现slave的动态构建和销毁 https://www.cnbl ...