欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

用NDK生成so给第三方用

程序员文章站 2022-06-30 15:07:14
参考了https://blog.csdn.net/zi413293813/article/details/50074239 然后自己重新整理补充 我用的ndk-r10d ndk下载地址http://developer.android.com/sdk/ndk/index.html eclipse 开发 ......

 参考了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生成so给第三方用

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

用NDK生成so给第三方用

打勾

用NDK生成so给第三方用

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 目录(项目根目录下 没有就自己创建)

用NDK生成so给第三方用

在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目录下

 

用NDK生成so给第三方用

在这个新项目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里面添加如下代码

用NDK生成so给第三方用

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

用NDK生成so给第三方用

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

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

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