关于android中有关JNI无法生成.so文件的问题解决方法

news2025/2/28 18:25:47

问题:在配置NDK开发环境时,会发现无法正常生成so文件的情况,可能时AS本身的bug,这时候提供一种方法手动生成so文件

一 配置NDK

1.1 在File | Settings | Appearance & Behavior | System Settings | Android SDK | SDK Tools 选择NDK,点击下载 如图:

在这里插入图片描述

1.2 然后导入下载NDK的路径 如下图:

在这里插入图片描述
这里会无法点击,不过在后续会有配置NDK路径的介绍,配置之后这里就会同步了

2 代码部分

2.1 新建一个JNI.java类

public class JNI {
    static {//固定写法,表示我们要加载的资源文件为libhello.so
        System.loadLibrary("hello");
    }
    //声明一个本地方法,用native关键字修饰
    public native String getStringFromNative();

}

2.2 点击Buile->Make Module 会在\app\build\intermediates\javac\debug\classes\com\生成JNI.class文件

在这里插入图片描述

在这里插入图片描述

2.3 下一步生成**.h头文件

直接按住文件拖到命令行,自动生成classes所在路径输入以下命令 javah -jni com.luojie.application.JNI //根据自己项目的包名+类名修改

在这里插入图片描述

2.4 在main目录下 新建jni文件夹 将生成的.h头文件 拷贝到jni下 (直接新建package命名jni也可) 如图

在这里插入图片描述

2.5 然后在jni文件下新建hello.c文件 并将com_luojie_application_JNI.h文件下的在方法拷贝到创建好的hello.c文件下

在hello.c中将方法补充完整,注意标注的部分 根据自己的包名+ 类名 + 方法名设置;
在这里插入图片描述

2.7 在jni文件下新建file文件 命名为Android.mk 内容

LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=hello
LOCAL_SRC_FILES :=hello.c
include $(BUILD_SHARED_LIBRARY)

2.8 在jni文件下新建file文件 命名为Application.mk;内容

App_ABI:=all
APP_PLATFORM := android-14 

2.9 在buile.gradle 的Android目录下 添加如下代码

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

2.10 在gradle.properties添加代码android.useDeprecatedNdk=true

在这里插入图片描述

三 生成so文件

把当前module的main路径拷贝到控制台(AS内部的控制台) 通过 ndk-build 生成.so文件 如下图。

在这里插入图片描述
我这里之前已经安装过了,首次安装需要等一下

在这里插入图片描述

注意:虽然生成了so文件,但是在运行的时候会闪退,原因是找不到so,解决方法是把jnilibs目录下的so移动到libs去即可

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】常用命令大全(二)

目录 4. Linux常用命令 4.1 Linux命令初体验 4.2 文件目录操作命令 4.3 拷贝移动命令 4.4 打包压缩命令 4.5 文本编辑命令 4.6 查找命令 4. Linux常用命令 4.1 Linux命令初体验 4.1.1 常用命令演示 在这一部分中,我们主要介绍几个常用的命令&#xff0c…

深度学习基础训练流程

深度学习基础训练流程 前言 本文只是本人学习笔记记录,文中部分图片来源网络,如有侵权请联系我进行删除 1、深度学习基础 1.1 深度学习 深度学习是机器学习的一个分支,目的是找到一组良好的参数θ,使得θ表示的数学模型能够很…

K8S多节点二进制部署

目录 一、多 Maser 集群架构的了解 二、master2 节点部署 1、从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 2、修改配置文件kube-apiserver中的IP 3、在 master02 节点上启动各服务并设置开机自启 4、查看node节点状态 三、负…

1-MATLAB APP Design-图像的输入与输出

一、APP 界面设计展示 新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、 按钮、坐标区和面板,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:图形的输入与输出,调整背景颜色,字体的颜色为黑色,字体的大小调为25.

开通腾讯位置服务

文章目录一、开通腾讯位置服务步骤二、腾讯位置服务SDK三、小程序项目中,创建 lib 目录,把SDK文件放入其中一、开通腾讯位置服务步骤 因为签到流程中要获取用户当前所在地址的信息,所以需要把定位坐标缓存成地址,恰好腾讯位置服务…

【 java 8】Lambda 表达式

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

MySQL 性能优化思路和工具

MySQL 性能优化思路和工具 一、优化思路 作为架构师或者开发人员,说到数据库性能优化,你的思路是什么样的? 或者具体一点,如果在面试的时候遇到这个问题:你会从哪些维度来优化数据库,你会怎么回答&#x…

Hive内部表与外部表的区别具体说明

目录 1.在/opt/atguigu/目录下,新建两个txt文件 2.在hadoop的web端递归创建一个目录,存储这两个文件 3.查看web端的文件 一、内部表: 1.创建一个内部表,并指定内部表的存储位置 2.查看内部表,内部表中没有数据 …

技术学习-消息队列

什么是消息队列 可以简单理解为存放消息的队列,数据结构模型和队列一样,都是先进先出。主要用不同线程(Thread)/进程(Process) 为什么需要消息队列 (1)不同进程之间传递消息是,因为进程的耦合度高,改动一个进程,引发…

基于SVPWM改进的永磁同步电机直接转矩控制二更

导读:本期对基于SVPWM的永磁同步电机直接转矩控制进行全面的分析和仿真搭建。之后与传统的DTC进行比较,凸显基于SVPWM改进的DTC方法的有效性。如果需要文中的仿真模型,关注微信公众号:浅谈电机控制,留言获取。一、 传统…

Long型数据后端查询结果为null,返回前端显示-1,使用@JsonSerialize注解

使用场景 在开发中,我们将对象序列化为JSON传输给前端,有时候我们的某个或者某些字段需要特殊处理,比如我们有一个日期字段,我们希望当日期为NULL时给前端不返回NULL而返回为未完成等信息,或者我们有一些状态字段&…

达梦数据库(DM8)集成使用 Geoserver(2.22.2) 以及其他对应版本详解

达梦数据库(DM8)集成使用 Geoserver(2.22.2) 以及其他对应版本详解系统环境版本Geoserver 驱动对应版本达梦 8 集成 Geoserver 过程试错过程问题总结项目需要国产化,选择使用达梦数据库,在技术测试阶段&…

K-近邻算法(KNN)

K-近邻算法(KNN) K nearest neighbour 0、导引 如何进行电影分类 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影…

美创科技荣获“PostgreSQL中国最佳运维服务商”

近日,由中国开源软件推进联盟PostgreSQL分会&中科院软件所&CSDN联合举办主办的“中国PostgreSQL数据库生态大会”在北京中科院软件所隆重召开。美创科技受邀参加,三位顶级数据库技术专家亮相,分享美创科技在数据库内核技术、PostgreS…

IMX6ULL学习笔记(17)——工程管理

一、简介 之前我们把所有源码文件放在一个文件夹下。 这样做存在两个主要问题,第一,代码存放混乱不易阅读。第二,程序可移植性差。如果工程源文件达到几十、甚至数百个的时候,这样一股脑全部放到根目录下就会使工程显得混乱不堪。…

STM32开发(13)----获取唯一设备标识符UID

获取唯一设备标识符UID前言一、什么事UID二、实验过程1.CubeMx配置2.代码实现3.实验结果总结前言 这一章节介绍如何获取STM32芯片中的唯一的ID号的两种方法。 一、什么事UID 在许多项目中,识别设备是必要的。从简单的设备描述到更复杂的设备,如 USB 串…

Open3d入门

目录 点云数据 1 主成分分析 1.1 Method 1.2 Results 2 表面法线估计 2.1 Method 2.2 Results 3 体素网格下采样 3.1 Method 3.2 Results 点云数据 常用数据下载(免积分) 1 主成分分析 1.1 Method 对点云进行主成分分析(PCA&…

[5/101] 101次面试之经典面试题

目录 01、什么是黑盒测试? 02、为什么要做黑盒测试? 03、你在软件生命周期中的哪些测试阶段用到过黑盒测试? 04、什么是白盒测试? 05、白盒测试与黑盒测试有什么区别? 06、为什么要对程序进行单元测试? 07、由谁来做单元测试&#…

RK3566添加湿度传感器以及浅析hal层

RK3566添加一款温湿度传感器gxht3x.挂在i2c总线下。驱动部分就不多做解析。大致流程硬件接好i2c线以及vcc gnd。后看数据手册。初始化寄存器,然后要读数据的话读那个寄存器,读出来的数据要做一个转化,然后实现open read write ioctl函数就行了。本文主要…

【LeetCode】剑指 Offer 10- Ⅲ. 矩形覆盖 p79 -- Java Version

题目链接:无 1. 题目介绍(10- Ⅲ. 矩形覆盖 ) 我们可以用2x1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2x1的小矩形无重叠地覆盖一个2xn的大矩形,总共有多少种方法? 【测试用例】: 示例 1&#xff…