生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解
学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择。
废话不多说,想要在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文件详解相关推荐
- android代码查找快捷键是什么,Android Studio搜索功能(查找功能)及快捷键图文详解(示例代码)...
1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关键字出现位置 2.在当前工程内查找文本[Ctrl+Shift+F] 先会弹出一个对话框,直接点击[fi ...
- android项目打包apk,Android Studio将程序打包成APK的步骤详解
第一步:先点击Build选择GenerateSigned APK 第二步:如果之前有编译成APK的话,就直接选择Choose existing已经存在的key:如果没有编译成APK那就选择Create ...
- Android build.gradle文件详解(转述自《Android第一行代码》第二版)
Android build.gradle文件详解 1. 最外层目录下的build.gradle文件 1.1 repostories 1.2 dependencies 2. app目录下的build.g ...
- Android.bp文件详解
本文文档在如下位置,如有需要可以下载: https://download.csdn.net/download/fanx9339/12542402 Android.bp文件是什么? Android.bp ...
- Android - Manifest 文件 详解
Manifest 文件 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20899281 Manifest可以定义应用程序及其 ...
- Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(二)
文章大纲 引言 一.DirectFragment 1.当选中DirectoryFragment中RecyclerView的Item时 2.选中DirectoryFragment中RecyclerVie ...
- android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)
前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...
- Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)
文章大纲 引言 一.Android Storage Access Framework 二.Storage Access Framework 的主要角色成员 1.Document Provider 文件 ...
- Android模拟器修改hosts文件详解
Android模拟器修改hosts文件详解 前言 在开发中遇到这样需求,需要在hosts文件中将某个网址域名与其对应的IP地址建立一个关联,比如关联这样一个ip: 123.45.67.89 www.u ...
最新文章
- ICCV 2021 | 简而优:用分类器变换器进行小样本语义分割
- RxSwift ViewModel定义
- 人工智能再下一城,在多人扑克中大胜人类
- redis rdb aof区别_理解Redis的持久化机制:RDB和AOF
- 数据库面试 - 分库分表之后,id 主键如何处理?
- tensorflow使用object detection实现目标检测超详细全流程(视频+图像集检测)
- php 降低视频分辨率,将低分辨率视频变成1920*1080高分辨视频,可自由调节分辨率宽高...
- 批量模糊匹配的三种方法
- 什么是数据地图、血缘分析和数据资产?
- moudbus报文解析
- 防止backspace键后退网页
- 通过redmon监控管理Redis服务器的安装配置教程
- 手指静脉图像采集终端的设计和实现
- 初学者怎么记‘A‘,‘a‘,空格的ascii码?
- java cancel_Future.cancel()疑难杂症
- URLRewrite地址重定向的实现
- 短信防火墙使用教程(短信防轰炸、防盗刷)
- 计算机视觉与图形学-神经渲染专题-StructNeRF室内重建
- 手机一连上Android Studio,Logcat不断输出信息
- 制作基于XKT-510和T3168芯片的无线供电模块
热门文章
- 在pycharm中使用docker安装的python3作为运行环境
- 大学计算机基础方案一,大学计算机基础案例教学与教学案例策划.doc
- 怎样让计算机快速开机,怎样设置可以让电脑快速启动开机.doc
- Linux服务器---xopps
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)
- [Swift]LeetCode478. 在圆内随机生成点 | Generate Random Point in a Circle
- python3 pygame 坦克自动移动
- 黑马程序员之SQL server基础学习笔记(三)
- java中邮箱发送_java实现邮箱发送(java mail)
- unas基于_flunas