用NDK生成so给第三方用
Posted _我头大
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用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 !
说明调用成功,写得有点乱方便自己回顾
以上是关于用NDK生成so给第三方用的主要内容,如果未能解决你的问题,请参考以下文章
eclipse里配置Android ndk环境,用eclipse编译.so文件
Android NDK系列- AS导入so三方库,使用C/C+方法