用NDK生成so给第三方用
参考了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 !
说明调用成功,写得有点乱方便自己回顾
最新文章
- undefined reference to `__android_log_print'
- PHP类的原理
- spring的多个PropertyPlaceholderConfigurer实例装配的问题
- h5 js 图片预览并判断 ajax上传
- poj 2245 水题
- subprocess使用
- [转]回答--python django学的很迷茫怎么办?
- 基于php下载文件的详解
- Careercup - Facebook面试题 - 5733320654585856
- codeblocks常用快捷键
- listView 分页加载数据
- R笔记(1):formula和Formula
- python3中报错:TypeError: 'range' object doesn't support item deletion
- Pseudo Registers
- 第21月第6天 zhihu如何用3个月零基础入门机器学习
- mysql数据库转成oracle踩过的坑
- android-------Android Studio使用MAT分析工具遇到的错误
- CentOS7为firewalld添加开放端口及相关操作
- mybatis查询缓存——(十三)
- 用Spark向HBase中插入数据
热门文章
- 【canvas系列】canvas实现“ 简单的Amaziograph效果”--画对称图【强迫症福利】
- chrome 浏览器调用 ocx 插件
- C# 实现水印
- 《SQL Server 2008从入门到精通》20180627
- C语言const与#define
- 使用SharpZipLib压缩与解压文件
- Ajax 请求下载 Execl 文件
- java并发之同步辅助类CyclicBarrier和CountDownLatch
- Falsk的模板分配和蓝图、定制错误信息、 和补充
- Ubunt16.04下安装PHP7+Nginx+MySQL