参考了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. h5新属性

    <!DOCTYPE html> <html lang="en"> <head> <meta id="viewport" ...

  2. 【小程序】返回顶部wx.pageScrollTo和scroll-view的对比

    一.wx.pageScrollTo(https://mp.weixin.qq.com/debug/wxadoc/dev/api/scroll.html) 1. 小程序中双击顶部的textbar.会默认 ...

  3. git远程仓库问题

    1:下载下来的仓库,可能变更远程仓库 git remote rm origin (origin默认的远程仓库名) 可以在.git文件夹下的config文件查看remote的信息. 同时也可以查看bra ...

  4. 【个人经历】记自己的第一次GitHub开源代码共享经历

    题记: 自己做程序员快三年有余了,感觉自己和刚入职相比确实有了不少进步,当然三年要是不进步那不就傻了吗,有时候我也在想,我在这三年里留下了什么,当然也不是说有多么高尚的想法,就是以后对别人介绍自己的时 ...

  5. 记录一次mybatis查询返回为空数据库却能查询到数据的经历

    昨晚上测试人员给发了一条测试数据,说是根据这条数据接口返回信息为空.之后根据给的信息去数据库查询了下,明明是有数据的.但是用mybatis就是查询不出来.奇了怪了,自己测试的数据都能查询出来,为何这条 ...

  6. 2.Spring——maven依赖

    1.spring-core 2.spring-context 3.spring-orm 4.spring-web spring-webmvc others pmo demo1 pmo demo2 1. ...

  7. java笔记--关于多线程如何查看JVM中运行的线程

    查看JVM中的线程 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890280.html "谢谢-- ThreadGrou ...

  8. MYSQL 5.7 sqlmode 行为

    最近碰到了sql_mode 的一些问题,故进行了研究,根据实际情况研究其行为. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ER ...

  9. 设计多选按钮ListChooseView

    设计多选按钮ListChooseView 答应某位女屌丝而写的控件,效果还不错,开源给大家^_^! 效果图: 源码: // // ListChooseView.h // ScrollChooseBut ...

  10. Request URL参数

    登录跳转完整参考: http://www.cnblogs.com/dreamer-fish/p/5435274.html request.META.get('HTTP_REFERER', '/') # ...