IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Studio 下so文件的生成及利用jni调用 -> 正文阅读

[移动开发]Android Studio 下so文件的生成及利用jni调用

Android Studio 下利用c语言生成so文件并利用jni调用

**前言:**由于自己也是小白学习,网上这类教程比较杂乱无序,不太系统,踩了太多抗,由于最近忙于事情,仅记录下自己在Android Studio下生产so文件并成功调用的例子,过程多以图片显示,没时间码字,不足之处多见谅。

准备工作:
1、Android Studio 下载安装;
2、SDK、NDK、JRE安装与环境变量设置;
这是前期需要做的基本工作;以上教程很多,可自己寻优选择教程学习。

平台环境与工具版本:
1、ubuntu18.04LTS
2、Android Studio Arctic For | 2020.3.1

一、生成so

生成新工程:
在这里插入图片描述
定义工程名:
在这里插入图片描述
加NDK路径:
首先找到你“ndk-build"文件,右键属性,复制路径加在local.properties,如下图
在这里插入图片描述
新建java文件:
在图示目录下new->java class 并取名(留意此名,与后续一致)
在这里插入图片描述
加入代码:

package com.example.testjni3;

public class Jni3Test {
    static {
        System.loadLibrary("Jni3Test");
    }
    public static native String getJniTestString();
}

如下图
图5

生成class文件

打开Terminal,cd到新建Jni3Test目录下并生产class文件

cd app/src/main/java/com/example/testjni3 
javac Jni3Test.java 

如下图示
在这里插入图片描述
生成class对应的头文件.h
cd到main下,执行,这里不得不说很抗——之前Android版本用的是javah ****,现在javah 被javac “吃了”。如下代码片及图示。

javac -h jni java/com/example/testjni3/Jni3Test.java 

在这里插入图片描述
jni文件夹下新建c文件
在这里插入图片描述
c文件中加入方法的实现代码

#include "jni.h"
#include "com_example_testjni3_Jni3Test.h"
JNIEXPORT jstring JNICALL Java_com_example_testjni3_Jni3Test_getJniTestString
   (JNIEnv *env, jclass jz)
  {
     return (*env)->NewStringUTF(env,"ly miss family and study Android jni");
   }

在这里插入图片描述
新建Android.mk

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

在这里插入图片描述
新建Application.mk

APP_PLATFORM := android-16
APP_MODULES := Jni3Test
APP_ABI := all

在这里插入图片描述
执行ndk-build生成so
注意:先cd到jni目录下如图Terminal显示

ndk-build

在这里插入图片描述
二、第三方利用jni调用生成的so

新建proj如图
在这里插入图片描述
定义工程名
在这里插入图片描述
接下来将全部so加入到新建工程的libs下,结构目录如下图;并在app下的build.gradle下加入如下代码
sourceSets { main{ jniLibs.srcDirs=['libs'] }
注意加的位置如图

在这里插入图片描述
将生成so时所用到的java层声明布局进来
具体:cd到example目录下执行mkdir testjni3生成同层文件夹。
在新建与前述同名java class 如图
在这里插入图片描述
添加代码

package com.example.testjni;

public class JNITest {
        static {
            System.loadLibrary("JNITest");
        }
        public static native String getJniTestString();
}

注意:如下图报错,根据提示直接点击自动在native-lib中帮助我们生成对应的本地声明,native-lib可理解为桥梁链接作用吧?
在这里插入图片描述
在这里插入图片描述
在MainActivity中加入如下代码,查看是否调用成功,如图已经成功

import com.example.testjni.JNITest;```

```bash
tv.setText(JNITest.getJniTestString());

final success
END !

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:52:22  更:2021-08-16 11:53:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:23:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码