JNI与NDK学习第二篇-----应用篇
2019独角兽企业重金招聘Python工程师标准>>>
1.安装配置NDK
1). 解压NDK的zip包到非中文目录(最好英文目录不要带空格)
2). 配置path : 解压后NDK的根目录----->ndk-build
2.给AS关联NDK
1). local.properties中添加配置
ndk.dir=E\:\\Android\\sdk\\android-ndk
或者去项目工程中配置ndk的路径
2). gradle.properties中添加配置
android.useDeprecatedNdk=true(作用:兼容老版本的NDK)
3.编写native方法
public class JniTest {static {System.loadLibrary("Hello");}/*** 定义native方法* 调用C中对应的方法* @return*/public native String sayHello();
}
4.编写Android.mk文件
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := Hello
LOCAL_SRC_FILES := Hello.c include $(BUILD_SHARED_LIBRARY)
1. LOCAL_PATH:设置工作目录,而 my-dir 则会返回 Android.mk 文件所在的目录。
2. CLEAR——VARS:清除几乎所有以 LOCAL——PATH 开头的变量(不包括 LOCAL_PATH)。
3. LOCAL_MODULE:用来设置模块的名称。
4. LOCAL_SRC_FILES:用来指定参与模块编译的 C/C++ 源文件名。
5. BUILD_SHARED_LIBRARY:作用是指定生成的静态库或者共享库在运行时依赖的共享库模块列表。
5.编写C文件
6.在你的Build.gradle中
buildTypes下
添加如下代码:
sourceSets {main {jni.srcDirs = ['src/main/jni', 'src/main/jni/']} }externalNativeBuild {ndkBuild {path file("src\\main\\jni\\Android.mk")} }
然后重新reBuilde工程
会在你的app\build\intermediates\ndkbuild下面会生成so文件
使用:
转载于:https://my.oschina.net/quguangle/blog/914944
JNI与NDK学习第二篇-----应用篇相关推荐
- invader的java学习第二天基础篇
invader的java学习第二天基础篇 一.深入了解第一个Hello World程序 public class Hello World{ public static void main(String ...
- git命令学习第二站——高级篇
在高级篇,我们就可以在整个图上自由的游走了.本章主要介绍3个部分:绝对引用,相对引用和撤销更改. 绝对引用 2.1关 这里介绍了一个重要的概念就是HEAD,其实HEAD指向的就是当前的执行的节点,我们 ...
- JavaScript 设计模式学习第二十五篇-中介者模式
中介者模式(Mediator Pattern)又称调停模式,使得各对象不用显式地相互引用,将对象与对象之间紧密的耦合关系变得松散,从而可以独立地改变他们.核心是多个对象之间复杂交互的封装. 根据最少知 ...
- Android JNI和NDK学习(5)--JNI分析API
Java类型和本地类型对应 在如下情况下,需要在本地方法中应用java对象的引用,就会用到类型之间的转换: java方法里面将参数传入本地方法: 在本地方法里面创建java对象: 在本地方法里面ret ...
- OSG for Android新手教程系列(四)——JNI与NDK的使用
上一篇教程中,我针对一个最简单的HelloWorld示例进行了详细讲解,从宏观上讲明了OSG for Android项目的开发方法.这里给出链接:http://blog.csdn.net/dongzh ...
- Elasticsearch学习第二篇--常用的几种搜索方式
Elasticsearch学习第二篇--常用的几种搜索方式 一.Query String Search 查询全部 条件查询 二.Query DSL 查询全部 条件查询 三.Query Filter 四 ...
- TLS协议学习-第二篇-握手协议
TLS协议学习第二篇,内容来自:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-200 ...
- 深度学习的150多篇文章和10多个专栏推荐
文章首发于微信公众号<有三AI> 创业第一天,有三AI扔出了深度学习的150多篇文章和10多个专栏 文/编辑 | 言有三 在这篇文章中,有三跟大家来聊一下有三AI和如何学习深度学习这件事儿 ...
- 学习javascript这一篇就够了超详细笔记(建议收藏)上
学习javascript这一篇就够了超详细笔记(建议收藏)上 1.初识 计算机基础导读 编程语言 计算机基础 初识js 浏览器执行 js组成 js初体验-三种书写位置 js注释 js输入输出语句 2. ...
最新文章
- 怎样的财报让百度市值一夜暴涨400亿?净利逆势大涨219%;李彦宏:将在中国经济的复苏中受益...
- Hyperledger Fabric VS Ethereum
- 通过docker的方式进行RocketMQ的安装
- Nand Flash Yaffs系统大量写入数据失败问题的解决方法。
- 【JS 逆向百例】Ether Rock 空投接口 AES256 加密分析
- 窄带语谱图c语言算法,MELP语音编码算法实现及算法改进
- 手机照片局部放大镜_手机摄影,竟然有3种对焦方式,想拍出专业水准,你必须了解...
- 分隔符有哪些_Python有哪些常用的标准库?Python基础教程,常用标准库(一)
- 【干货】李航老师《统计学习方法》(第2版)清华PPT课件分享
- 人大金仓数据库(kingbase7d)操作入门指南
- 3.PS 缩小放大、移动、选区工具
- p-mos,n-mos的导通条件
- Office、excel、word卡死(或卡顿后自动恢复)的解决方案
- Altera的单时钟同步FIFO,带almost_empty和almost_full端口
- 「LOJ#10015」「一本通 1.2 练习 2」扩散(并查集
- 大型团队合作的八条法则
- qq离线linux,QQ For Linux 我哭了,官方版
- ISIS—ISIS中LSP(数据库)同步如何保证LSDB可靠性—04
- 实战篇:手动编译安装微软 Linux 开源版 CBL-Mariner
- TemplateView , ListView ,DetailView三种常用类视图用法
热门文章
- linux 安装输入法
- 非递归一次性加载分类数据到TreeViw
- 物联网11种通信协议
- 为什么TCP的TIME_WAIT状态要保持2MSL?
- CUDA Samples: Calculate Histogram(atomicAdd)
- 一维码ITF 25简介及其解码实现(zxing-cpp)
- python高级数据结构_Python高级数据结构(二)
- mysql 执行计划extra_MySQL执行计划extra中的using index 和 using where using index 的区别...
- mysql intersects_mysql gis 空间数据库 根据 经纬度查找附近 (INTERSECTS,within)
- 动力电池检测电压c语言编程,动力电池PACK EOL测试系统