前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >★ Android基础篇 初步NDK开发 .SO文件生成与JIN调用

★ Android基础篇 初步NDK开发 .SO文件生成与JIN调用

作者头像
全栈程序员站长
发布2021-04-07 15:16:00
发布2021-04-07 15:16:00
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

就是生产个so文件,并且可以调用C里面的方法。但为什么要写一篇满论坛多的是的文章呢,就是因为我踩了N多个坑,希望可以帮助大家,让大家少走弯路。 要加上这句代码:android.useDeprecatedNdk=true 很重要!很重要!

【2 java类编写的代码】

代码语言:javascript
代码运行次数:0
运行
复制
public class JniTest {
    static {
        System.loadLibrary("jary");
    }
    public native String getString();
}

然后接着

之后你会发现生成了一个JniTest .class文件

【3 Terminal 命令】 cd 到mian 文件下 然后 输入命令:javah -d jni -classpath 自己编译后的 class 文件的绝对路径

debug 后面是空格!debug 后面是空格!debug 后面是空格!

之后就会生成一个.h的文件 创建一个.c的文件,include后面的是生成.h文件的名字 里面的(JNIEXPORT jstring JNICALL Java_com_example_lxndk_JniTest_getString) 是.h文件中方法(重写一下)

代码语言:javascript
代码运行次数:0
运行
复制
#include"com_example_lxndk_JniTest.h"
JNIEXPORT jstring JNICALL Java_com_example_lxndk_JniTest_getString
    (JNIEnv *env, jobject jobject1){
    return (*env)->NewStringUTF(env,"Hello Jin =_=!");
    }

然后–在 build.gradle defaultConfig 中添加如下代码

代码语言:javascript
代码运行次数:0
运行
复制
  ndk {
            moduleName "jary" //生成的so名字
            abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。

        }

到这里的jni 调 C 就完成了,但是我想说的是!为什么会报这个错???

然后我发现我貌似缺少了东西,Android.mk… 创建Android.mk文件

代码语言:javascript
代码运行次数:0
运行
复制
# 构建系统提供的宏函数 my-dir 将返回当前目录(包含 Android.mk 文件本身的目录)的路径,基本上是固定的,不需要去动
LOCAL_PATH := $(call my-dir)

# 会清除很多 LOCAL_XXX 变量,不会清除 LOCAL_PATH,基本上是固定的,不需要去动
include $(CLEAR_VARS)

# 需要构建模块的名称,会自动生成相应的 libNDKSample.so 文件,每个模块名称必须唯一,且不含任何空格
LOCAL_MODULE := jary

# 包含要构建到模块中的 C 或 C++ 源文件列表
LOCAL_SRC_FILES := jary.c

# 指定这个模块里会用到哪些原生 API,详见:https://developer.android.google.cn/ndk/guides/stable_apis.html
LOCAL_LDLIBS := -llog

# 帮助系统将所有内容连接到一起,固定的,不需要去动
include $(BUILD_SHARED_LIBRARY)

要改成自己对应的.c 还有构建模块的名称

Application.mk

代码语言:javascript
代码运行次数:0
运行
复制
# 选择不同的 ABI,多个使用空格作为分隔符,全部是all
# APP_ABI := armeabi armeabi-v7a
APP_ABI := all

# 指定要使用的运行时
APP_STL := gnustl_static

最后在 build.gradle android 下 指定目录!

到这里才基本结束!

源码地址:https://download.csdn.net/download/macaopark/10340231

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年3月12日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档