参考了https://blog.csdn.net/zi413293813/article/details/50074239 然后自己重新整理补充

我用的ndk-r10d

ndk下载地址http://developer.android.com/sdk/ndk/index.html

eclipse 开发环境

1、用eclipse创建一个android项目

2、选中项目右键->Properties->Builders->New->选中Program 点击OK->各种配置文字太难描述直接上图

配置了ndk-build 的路径还有刚刚创建的那个android项目

打勾

Specify Resources 浏览找到刚刚创建的android项目就可以了,项目配置就这些

在src目录先创建一个class文件,内容如下

public class JniClient {
static public native String AddStr(String strA, String strB);
static public native int AddInt(int a, int b);
}

找到JniClient.java(刚刚创建的那个类)所在位置,右键打开cmd或者powershell 执行命令javac JniClient.java

在项进入到src磁盘目录右键打开cmd或者powershell 执行命令 javah com.example.mtest.JniClient (这个需要根据自己项目实际路径而定)

这样就生成了com_example_mtest_JniClient.h 头文件内容就不展示了,最前面连接地址里面有

然后手动创建一个com_example_mtest_JniClient.c 最前面连接地址里面有 ,编辑器有问题贴不出来

把这个头文件和源文件剪切到 jni 目录(项目根目录下 没有就自己创建)

在jni目录里面添加一个Android.m

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=_SRC_FILES := com_example_mtest_JniClient.c
include $(BUILD_SHARED_LIBRARY)

以及Application.mk

#使用STL库
APP_STL := gnustl_static
#兼容老的语法,使一些错误降为警告
APP_CPPFLAGS += -fpermissive
#选择平台,如果都需要生成用空格隔开
APP_ABI := armeabi armeabi-v7a

刷新项目就会在lib目录生成对应的 so 文件

下面写一下如何使用刚刚生成的so库

重新新建一个android 项目 我这里用的是cocos2d-x的一个游戏项目

把生成的so放到新的android项目的jni目录下

在这个新项目Android.mk里面添加如下内容

include $(CLEAR_VARS)
LOCAL_MODULE := libTestNdk
LOCAL_SRC_FILES := TestNdk/$(TARGET_ARCH_ABI)/libTestNdk.so
include $(PREBUILT_SHARED_LIBRARY)

LOCAL_STATIC_LIBRARIES += libTestNdk

还不能直接使用,回到第一个创建的android项目 把JniClient.java这个文件打成一个jar包

我是在src目录下powershell里面执行jar -cvf mtest.jar com\example\mtest\JniClient.class

生成mtest.jar包 ,不过bin目录里面好像有自动生成

把这个jar包放入第二个项目lib里面,在appactivity里面添加如下代码

然后在onCreate()方法里面调用

在手机上运行项目可以看到如下输出

.748: I/System.out(5703): ...abelmou...HelloWorld from JNI !

说明调用成功,写得有点乱方便自己回顾

用NDK生成so给第三方用的更多相关文章

  1. Linux Ubuntu下用Android NDK 生成独立交叉编译链

    本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...

  2. Android NDK编程,引入第三方.so库

    android自带的编译工具NDK进行编译时(非单纯的调用第三方.so而是进行ndk编程),armeabi以及armeabi-v7a文件夹下的第三方so文件将会被删除,只会产生编译后的so文件,其他的 ...

  3. 【Android Studio安装部署系列】二十五、Android studio使用NDK生成so文件和arr文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio使用ndk的简单步骤. NDK环境搭建 下载NDK 下载链接:https://developer.and ...

  4. Android NDK生成及连接静态库与动态库

    对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用.但是在某些情况下,我们需要借助C/C++来写JNI本地代码.比如,在使用跨平台的第三方库的时候:为了提升密集计算性能的时 ...

  5. android NDK 生成so 文件流程-ecplice

    1:生成jni目录 首先说一句网上,大部分博客这么写的:打开控制台,进入项目目录,运行javah -classpath bin/classes -d jni com.example.hellojni. ...

  6. 【转】使用NDK生成native C/C++的可执行程序

    原文网址:http://www.linuxidc.com/Linux/2011-08/40901.htm 众所周知, NDK可以生成lib,让java程序通过jni来调用,其实,NDK也可以生成C/C ...

  7. iOS 静态库生成(引用第三方SDK、开源库、资源包)

    一.静态库创建 打开Xcode, 选择File ----> New ---> Project  选择iOS ----> Framework & Library ---> ...

  8. Android NDK生成共享库和静态库

    Date: 2014-03-14 Title: Compile Android Native Binary And Library Published: true Type: post Tags: A ...

  9. GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造

    go build 和 go install 都需要使用源码来进行编译.但是有时候我们只有.a或者.so文件.并不能获取到第三方库的源码,这时我们需要静态链接库编译的技巧: 上图是实验前的文件分布. 使 ...

随机推荐

  1. ES6-Function

    Function 箭头函数 ES6中对于函数的扩展最吸引人的莫过于箭头函数啦,不多说,先学会再说. 函数体内的this对象,是定义时所在的对象,而不是使用时所在的对象,这个特性与正常函数不同. // ...

  2. 聊一聊数组的map、reduce、foreach等方法

    聊聊数组遍历方法 JS 数组的遍历方法有好几个: every some filter foreach map reduce 接下来我们来一个个地交流下. every() arr.every(callb ...

  3. Oracle EBS 获取完全的值集信息

    SELECT fvs1.flex_value_set_name, fvs1.description, decode(upper(fvs1.longlist_flag), 'N', '值列表', 'Y' ...

  4. java vector的多线程安全是否有用

    在网上搜了不少文章,发现有不少没讲清楚的,也有不少好文,本文希望更易懂地描述该问题.如有不对的地方,请多多指正~~ vector的使用主要有如下两种场景:(1)vector所谓的多线程安全,只是针对单 ...

  5. MySQL:关于 unauthenticated user

    一.现象 在生产环境中我们偶尔会遇到show processlist:显示host为 unauthenticated user 这样的连接,同时伴有数据库服务器层面的load,sys cpu较高,或者 ...

  6. JavaScript数组方法的兼容性写法 汇总:indexOf()、forEach()、map()、filter()、some()、every()

    ECMA Script5中数组方法如indexOf().forEach().map().filter().some()并不支持IE6-8,但是国内依然有一大部分用户使用IE6-8,而以上数组方法又确实 ...

  7. <Lord don’t move that mountain>

    <Lord don’t move that mountain> Lord, don't move that mountain(主,不要移走高山) Give me strength to c ...

  8. ZT 链表逆序

    链表逆序 原帖地址http://blog.csdn.net/niuer09/article/details/5961004 分类: C/C++2010-10-23 17:23 18425人阅读 评论( ...

  9. Spring MVC Interceptor

    1 在spring-servlet.xml中进行如下配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path=& ...

  10. Weblogic web应用中获取文件的绝对路径

    注意点: 1. file必须在/下,或者/WEB-INF/,不能在classes下 2. weblogic中进行如下配置,以获取绝对路径: <wls:container-descriptor&g ...