学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择。

废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤

1、创建需要调用的Java类

在你某个指定的包下创建如下类package com.journey.org; public class JniHello{ static { System.loadLibrary("JniHello") } public static native String welcomeJniStudy();}

2、创建通用工具

首先选择File->Settings->Tools->External Tools 具体如下图

2.1、创建javah工具

其具体设置如下Program:$JDKPath$\bin\javah.exeArguments:-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$Working directory:$ModuleFileDir$\src\main\java

2.2、创建ndk-build工具

其具体设置如下Program:D:\workpalce\AndroidSDK\ndk-bundle\build\ndk-build.cmd // 安装ndk的路径Arguments:Working directory:$ModuleFileDir$\src\main

3、通过通用工具javah生成C代码

其步骤如下

就会在jni文件夹下生成相应的c文件

4、创建Android.mk和Application.mk

在生成的c文件下创建上述两个文件

Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_LDLIBS += -llogLOCAL_LDLIBS +=-lmLOCAL_MODULE := JniHelloLOCAL_SRC_FILES =: JniHello.cpp # 实现c代码文件的名字include $(BUILD_SHARED_LIBRARY)

Application.mkAPP_MODULES := JniHelloAPP_ABI := all

5、实现c中的方法

步骤如下:

具体代码如下:#include "com_journey_org_JniHello.h" JNIEXPORT jstring JNICALL Java_com_journey_org_JniHello_welcomeJniStudy(JNIEnv *env, jclass jclass){ return env->NewStringUTF("welcome to study jni")}

6、配置文件

需要在module下的build.gradle中配置ndk相关内容,具体如下ndk{ moduleName "JniHello" //abiFilters \"armeabi-v7a", "x86" //输出指定abi下的so库 }sourceSets.main { jni.srcDirs = [] jniLibs.srcDir "src/main/libs" }

7、生成so文件

按如下步骤选择

就会在libs文件夹下生成相应的so文件

8、测试调用

以上就是Android Studio 3.5版本JNI生成SO文件详解的详细内容,更多关于JNI生成SO的资料请关注其它相关文章!

生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解相关推荐

  1. android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...

    1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...

  2. android项目打包apk,Android Studio将程序打包成APK的步骤详解

    第一步:先点击Build选择GenerateSigned APK 第二步:如果之前有编译成APK的话,就直接选择Choose existing已经存在的key:如果没有编译成APK那就选择Create ...

  3. Android build.gradle文件详解(转述自《Android第一行代码》第二版)

    Android build.gradle文件详解 1. 最外层目录下的build.gradle文件 1.1 repostories 1.2 dependencies 2. app目录下的build.g ...

  4. Android.bp文件详解

    本文文档在如下位置,如有需要可以下载: https://download.csdn.net/download/fanx9339/12542402 Android.bp文件是什么? Android.bp ...

  5. Android - Manifest 文件 详解

    Manifest 文件 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20899281 Manifest可以定义应用程序及其 ...

  6. Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(二)

    文章大纲 引言 一.DirectFragment 1.当选中DirectoryFragment中RecyclerView的Item时 2.选中DirectoryFragment中RecyclerVie ...

  7. android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)

    前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...

  8. Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)

    文章大纲 引言 一.Android Storage Access Framework 二.Storage Access Framework 的主要角色成员 1.Document Provider 文件 ...

  9. Android模拟器修改hosts文件详解

    Android模拟器修改hosts文件详解 前言 在开发中遇到这样需求,需要在hosts文件中将某个网址域名与其对应的IP地址建立一个关联,比如关联这样一个ip: 123.45.67.89 www.u ...

最新文章

  1. ICCV 2021 | 简而优:用分类器变换器进行小样本语义分割
  2. RxSwift ViewModel定义
  3. 人工智能再下一城,在多人扑克中大胜人类
  4. redis rdb aof区别_理解Redis的持久化机制:RDB和AOF
  5. 数据库面试 - 分库分表之后,id 主键如何处理?
  6. tensorflow使用object detection实现目标检测超详细全流程(视频+图像集检测)
  7. php 降低视频分辨率,将低分辨率视频变成1920*1080高分辨视频,可自由调节分辨率宽高...
  8. 批量模糊匹配的三种方法
  9. 什么是数据地图、血缘分析和数据资产?
  10. moudbus报文解析
  11. 防止backspace键后退网页
  12. 通过redmon监控管理Redis服务器的安装配置教程
  13. 手指静脉图像采集终端的设计和实现
  14. 初学者怎么记‘A‘,‘a‘,空格的ascii码?
  15. java cancel_Future.cancel()疑难杂症
  16. URLRewrite地址重定向的实现
  17. 短信防火墙使用教程(短信防轰炸、防盗刷)
  18. 计算机视觉与图形学-神经渲染专题-StructNeRF室内重建
  19. 手机一连上Android Studio,Logcat不断输出信息
  20. 制作基于XKT-510和T3168芯片的无线供电模块

热门文章

  1. 在pycharm中使用docker安装的python3作为运行环境
  2. 大学计算机基础方案一,大学计算机基础案例教学与教学案例策划.doc
  3. 怎样让计算机快速开机,怎样设置可以让电脑快速启动开机.doc
  4. Linux服务器---xopps
  5. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)
  6. [Swift]LeetCode478. 在圆内随机生成点 | Generate Random Point in a Circle
  7. python3 pygame 坦克自动移动
  8. 黑马程序员之SQL server基础学习笔记(三)
  9. java中邮箱发送_java实现邮箱发送(java mail)
  10. unas基于_flunas