android调用so封装jni,GitHub - Michelle0716/AndroidJniDemo1: 安卓对c进行so文件打包,并以jni的形式进行调用...

AndroidJniDemo1

安卓对c进行so文件打包,并以jni的形式进行调用

项目中的部分

app : 编译so文件

jniDemo: 添加运行so文件

开发环境:

android studio 3.0.1

(As3.0以上创建项目,选择支持c/c++,项目会自动生成需要的配置,不需要在编写cMakeList文件,创建后,直接运行,即可调用cpp里面c文件的内容)

配置ndk

谷歌官方下载 https://developer.android.google.cn/ndk/downloads/

android studio的sdk manager里下载

(直接在file——project structure——sdk——ndk 点击download,有可能存在文件缺失,建议官方下载,在ndk里面配置)

打包so

把Native方法提取出来,在一个类里面专门处理,如jniUtil.java

运行app,点击工具栏 build-make"app",在app/build/intermediates/cmake/debug下可以看到生成的so文件,把他们拷贝出来,给JniDemo使用。

注意:

jniUtil里面的包名要和cpp里面c文件的方法名的包名一致,一般我们现在jniUtil里面写好方法后,点击alt+enter生成c方法,这样不易出错

调用jni

在jniDemo里面新建文件夹jnilibs,把so文件的几个文件放在里面,在gradle配置

配置gradle

sourceSets.main{

jni.srcDirs = []

jniLibs.srcDir "src/main/jniLibs"

}

创建方法类(包名类名要和so里面的一致)

在java中创建与上面jniUtil.java相同的包,并把jniUtil.java拷到次目录。

##备注

3.配置动态连接库的名称,在mode的gradle->defaultConfig下增加以下代码

ndk {

moduleName "JNITest" //输出的SO文件名称

abiFilters "armeabi", "armeabi-v7a", "x86"//指定cpu的类型

}

4.加载动态连接库,在编写native方法类中新增:

static

{

System.loadLibrary("native-lib");//名字注意,需要跟你的build.gradle ndk节点下面的名字一样

}

gradle设置so库名

defaultConfig {

applicationId "com.ndk.****"

minSdkVersion 19

targetSdkVersion 26

versionCode 1

versionName "1.0"

ndk {

moduleName "LJPriject" //输出的SO文件名称

abiFilters "armeabi-v7a","x86"//指定cpu的类型

}

}

so库名Library

System.loadLibrary导入,如果build.gradle ndk没有配置,那么要和CMakeLists里面一样,Sets the name of the library后面的名字,否则出现导入库失败,查找不到该库

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

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

相关文章

ADF任务流:页面片段的托管bean范围

介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与该流相关的信息时,我们通常使用pageFlowScope托管bean。 而且,当我们需要为流的活动(页面或页面片段)提供服务时,我们将较短的作用域用于此类托…

Linux平台下:块设备、裸设备、ASMlib、Udev相关关系

对磁盘设备(裸分区)的访问方式分为两种:1.字符方式访问(裸设备);2.块方式访问 Solaris平台 : 在Solaris平台下,系统同时提供对磁盘设备的字符、块方式访问。每个磁盘有两个设备文件名: 一个在/d…

Error0---local variable S is accessed from within inner class; needs to be declared final

local variable S is accessed from within inner class; needs to be declared final在内部类当中不能引用本地变量s,需要被声明为常量转载于:https://www.cnblogs.com/Cherrylalala/p/6636642.html

android版本如何修改时间,如何修改Android系统默认时间

相信很多人看到过Android手机或平板显示XXXX-01-01这个奇怪的日期,没错,这就是Android设备的默认日期。当Android设备没有联网,无法获取当前真实时间的时候,就会使用系统默认时间。大部分时候,系统默认时间是Epoch时间…

Java Web应用程序的反跨站点脚本(XSS)过滤器

这是为Java Web应用程序编写的一个好简单的反跨站点脚本(XSS)过滤器。 它的主要作用是从请求参数中删除所有可疑字符串,然后将其返回给应用程序。 这是我以前关于该主题的帖子的改进。 您应该将其配置为链(web.xml)中的…

生成建表脚本up_CreateTable

已经很久没用使用这个脚本了,今天用到,并做修改,增加了生成扩展属性功能。 Go if object_ID([up_CreateTable]) is not nullDrop Procedure [up_CreateTable] Go /* 生成建表脚本(V4.0) Andy 2017-3-28 */ Create Proc up_CreateTable (obje…

android程序员周记,程序员实习周记100篇

程序员实习周记100篇有效防止雷同!简单修改即可使用!姓名:XXX学号:20190920008专业:M]指导老师:实习时间:20XX-XX-XX—20XX-XX-XX2019年XX月XX日t8in6Ay8Cw7c HuktN6ttTE12V7A eZu9g e7W1Y Dxqx…

Python之装饰器

装饰器功能有两点:1.首先自动执行装饰器后面跟的这个函数,并将装饰器修饰的那个函数名作为参数带入装饰器后面函数;2.将装饰器后面函数的返回值,赋值给装饰器所修饰的那个函数。举个例子说明: 1 def outer(func):2 …

在独立Java应用程序中使用Tomcat JDBC连接池

这是从我们的客人文章W4G伙伴克拉伦斯豪的作者临春3从A按。 您可能会在文章结尾找到本书的折扣券代码,仅适用于Java Code Geeks的读者! 请享用! 在需要数据访问权限的独立Java应用程序中使用JDBC连接池时,大多数开发人员将使用com…

Python之路【目录】 2

http://www.cnblogs.com/wupeiqi/articles/4938499.html转载于:https://www.cnblogs.com/cp-miao/p/5750211.html

vs2019 缺android sdk,VS2019由于缺少NuGet Microsoft.NET.Sdk.Functions程序包而无法加载项目,但也无法添加此程序包(示例代码)...

我在解决方案中拥有的一个项目未在VSE2019中加载。它将引发此错误:C:MyProgramsrcMyProgram.Functions.csproj : error : The project file cannot be opened by the project system, because it is missing some critical imports or the referenced SDK cannot be…

数据库事物操作

事务 什么是事务?转账:1. 给wc账户减1000元2. 给wcxf账户加1000元 当给wc账户减1000元后,抛出了异常!这会怎么样呢?我相信从此之后,wc再也不敢转账了。 使用事务就可以处理这一问题:把多个对数据库的操作绑…

通过OpenShift超越云技术

您是否厌倦了为您的应用程序请求新的开发机器? 您是否为应用程序设置新的测试环境感到烦恼? 您是否只想专注于和平开发应用程序而不会一直“沉迷于堆栈”? 我们听到你的声音。 我们也去过那里。 不用担心,OpenShift就在这里&#…

android+4.4+稳定性,新系统新UI!台电A10h四核安卓4.4.2性能测试

国内著名商标,数码用户首选品牌的台电科技在12月20日全国首发了安卓4.4.2系统,并且运行台电全新tUI同时,支持从安卓4.2系统OTA一键升级至安卓4.4.2系统!作为国内首款升级到目前全球最新的Android4.4.2系统之后,整体性能…

网络知识点小结

VMware虚拟机三种联网方法及原理一、Brigde——桥接:默认使用VMnet0 1、原理: Bridge 桥"就是一个主机,这个机器拥有两块网卡,分别处于两个局域网中,同时在"桥"上,运行着程序,让…

在JUnit中超越核心Hamcrest

在通过JUnit和Hamcrest改进对assertEquals的文章中,我介绍了将Hamcrest与JUnit一起使用 。 然后,我查看了JUnit的内置Hamcrest Core Matcher支持 。 在本文中,我将介绍如何将Hamcrest的非核心匹配器与JUnit一起应用。 这些非核心匹配器默认情…

4pics1word android,4 Pics 1 Word

4 Pics 1 Word是一款非常有意思的看图猜词游戏,这款游戏中会给我们四张图片,玩家需要通过图片给出的信息来猜出是哪个词,看西西的介绍你可能以为这是一款千篇一律的看图猜词游戏,不过这里猜的不是中文而是英语单词。4 Pics 1 Word…

页面内锚点定位及跳转方法总结

接着上一篇&#xff0c;其实是一个功能&#xff0c;本来感觉挺简单的一个问题&#xff0c;没想到遇到两个坎儿&#xff0c;无语。。。 上一篇是关于scroll事件绑定的问题&#xff0c;这一篇的问题是&#xff1a;点击锚点跳转到相应DIV的问题。 最简单的方法是锚点用<a>标…

基于android的水稻叶片特征测量系统,基于Android的水稻叶片特征参数测量系统

基于Android的水稻叶片特征参数测量系统路艳1&#xff0c;肖志勇2&#xff0c;3&#xff0c;杨红云2&#xff0c;3*&#xff0c;周琼1&#xff0c;孙玉婷1【摘要】摘要&#xff1a;【目的】提供基于Android的水稻叶片特征参数测量系统&#xff0c;为农学研究提供精准数据。【方…

JAVA学习绘图颜色及其笔画属性设置字体显示文字

package com.graphics;import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date;import javax.swing.*;/*** * author biexiansheng**/ public class DrawString extends JFrame{private Shape rect;//矩形对象private Font font;//字体对象private Date …