Android JNI--基础篇(二)
编写一个可以与C代码交互的android工程需要如下步骤:
1、JAVA代码中写声明native 方法
2、 创建jni目录,编写c代码,方法名字要对应
3、编写Android.mk文件(交叉编译的规范)
4、Ndk编译生成动态库
5、Java代码load 动态库.调用native代码
具体实现如下:
1、JAVA代码中写声明native 方法:
public class MainActivity extends Activity {
//声明native本地方法,由c来实现
public native String helloFormJava();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
2、完成本地方法声明后,创建jni目录编写c代码
#include
#include
//实现java中定义的方法,jstring是jni中定义的字符串的类型。要返回一个java类型的字符串jstring
jstring Java_com_itheima12_ndk1_MainActivity_helloFormJava(JNIEnv* env, jobject obj){
char* cstr = "helloFormJava";
// jstring (*NewStringUTF)(JNIEnv*, const char*);
jni中生成一个字符串的方法
return (**env).NewStringUTF(env, cstr);
}
这里指针的指向结构图如下:

3、创建交叉编译的规则android.mk文件.
LOCAL_PATH := $(call my-dir)
//记录Android.mk 文件位置 (绝对目录)
call my-dir 得到当前文件夹路径
include $(CLEAR_VARS)
//初始化参数信息
CLEAR_VARS 清空参数信息
LOCAL_MODULE := hello-jni
//进行交叉编译后 生成可执行的2进制文件的名字
LOCAL_SRC_FILES := hello-jni.c
// 指定参与交叉编辑的c的源文件
//多个C文件 用空格分隔
include $(BUILD_SHARED_LIBRARY)
//指定编译后 生成的库文件的类型
BUILD_SHARED_LIBRARY 动态链接库
BUILD_STATIC_LIBRARY 静态链接库
4、进行交叉编译:
进入jni目录使用ndk-build交叉编译出动态链接库。
5、调用动态链接库
要在刚启动的时候进行加载,所以使用静态代码块
static{
//加载动态链接库
System.loadLibrary("Hello”);//加载库的名字
}
Android JNI--基础篇(二)的更多相关文章
- php基础篇-二维数组排序 array_multisort
原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...
- android滑动基础篇 - 触屏显示信息
效果图: 代码部分: activity类代码: package com.TouchView; /* * android滑动基础篇 * */ import android.app.Activity; i ...
- JavaScript笔记基础篇(二)
基础篇主要是总结一些工作中遇到的技术问题是如何解决的,应为本人属于刚入行阶段技术并非大神如果笔记中有哪些错误,或者自己的一些想法希望大家多多交流互相学习. 1.ToFixed()函数 今天在做Birt ...
- Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析
转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编 ...
- NIO相关基础篇二
转载请注明原创出处,谢谢! 上篇NIO相关基础篇一,主要介绍了一些基本的概念以及缓冲区(Buffer)和通道(Channel),本篇继续NIO相关话题内容,主要就是文件锁.以及比较关键的Selecto ...
- Hybrid APP基础篇(二)->Native、Hybrid、React Native、Web App方案的分析比较
说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid Ap ...
- docker+k8s基础篇二
Docker+K8s基础篇(二) docker的资源控制 A:docker的资源限制 Kubernetes的基础篇 A:DevOps的介绍 B:Kubernetes的架构概述 C:Kubernetes ...
- Python基础篇(二)_基本数据类型
Python基础篇——基本数据类型 数字类型:整数类型.浮点数类型.复数类型 整数类型:4种进制表示形式:十进制.二进制.八进制.十六进制,默认采用十进制,其他进制需要增加引导符号 进制种类 引导符号 ...
- node基础篇二:模块、路由、全局变量课堂(持续)
今天继续更新node基础篇,今天主要内容是模块.路由和全局变量. 模块这个概念,在很多语言中都有,现在模块开发已经成为了一种潮流,它能够帮助我们节省很多的时间,当然咱们的node自然也不能缺少,看下例 ...
- C语言----输入输出语句(基础篇二)
今天整理一下自己的基础篇输入和输出的理解,自己没有研究系统输入和输出函数,以后有时间在去深究,之前在别人的博客里面看到这么一句话分享给大家,“学习就是一个不断抄袭,模仿,练习和创新的一个过程”. 使用 ...
随机推荐
- 通过no-gui模式运行jmeter脚本与生成报告
说明:使用NO-GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源. 步骤:在GUI(图形化界面)模式调整好脚本,通过FTP工具将需要测试的.jmx文件传输到linux ...
- HTML基础第十二讲---链接标志
转自:https://i.cnblogs.com/posts?categoryid=1121494 没有链接,WWW将失去存在的意义!WWW之所以受欢迎,乃在于她除了有精美的图文之外,更有方便且多样化 ...
- solr/lucence和关系数据库的混合使用
我们知道solr提供了一个DIHandler,提供将关系数据库中的数据导成索引,然后使用solr查询. 对于一个大表中关联数个小表的查询,这非常耗费时间. 我的思路是: 1. 将一个大表做成索引,使用 ...
- PHP中 “ . ” 和 “ ,”的区别
在PHP中,“ . ”可以串接两个变量.而“ , ”却没什么用处.
- Flask项目之手机端租房网站的实战开发(六)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...
- 使用Spring Security3的四种方法概述
使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...
- 《社交红利》读书总结--如何从微信微博QQ空间等社交网络带走海量用户、流量与收入
<社交红利--如何从微信微博QQ空间等社交网络带走海量用户.流量与收入>--徐志斌 著 <社交红利>这本书2013年9月才上市,卖的非常火. 我最初是在公司内部的期刊上,看到有 ...
- 图解String类型的不可变性及其原因
1.String的不可变性 String s="abcd": 上面的语句定义了一个字符串变量s.该变量指向字符串"abcd",当初始化变量s时,会在堆中为s非配 ...
- 右键菜单添加带图标的Notepad++
给Notepad++ 加带图标右键菜单 方式一: 拷贝以下代码建立一个reg文件,替换相关路径,保存,双击运行加入注册表 Windows Registry Editor Version 5.00 [H ...
- [CSS] Target empty elements using the :empty pseudo-class
You can target an element that has no child elements by using the :empty pseudo-class. With browser ...