Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int SumArray2D(int [][]ar2d);//传一个二维数组,返回一个长度 private native int [][] ModifyArray2d(int [][]ar2d);//传入一个二维数组,更改后返回一个二维数组 C语言实现 对于类型一: /** * 要点:演示对传入二维数组的访问 *…
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型,函数之内的 我们先来看一张传播久远的图片' 一.各种数据类型介绍 整型 整形包括短整型.整形和长整形. 短整形 short a=1; 整形 一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值范围是-2147483648~2147483647,在内存中的存储顺序是地位在前.高位在…
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法的中文API Android JNI学习(五)——Demo演示 本地内容主要简介如下: 1.环境展示 2.传统方式的具体流程 3.传统方式的相关问题 4.传统方式的so文件 5.通过CMake工具demo演示流程 6.CMake工具d…
package com.test.androidjni; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class MainActivity extends Activity { private static final String DEBUGTAG = "NATIVE"; private St…
原文网址:http://www.jianshu.com/p/aba734d5b5cd 最近看到了很多关于热补的开源项目——Depoxed(阿里).AnFix(阿里).DynamicAPK(携程)等,它们都用到了JNI编程,并且JNI编程也贯穿了Android系统,学会JNI编程对于我们学习研究Android源码.Android安全以及Android安全加固等都是有所帮助的.但是对于我们这些写Android应用的,大部分时间都是在使用Java编程,很少使用C/C++编程,对于JNI编程也了解的比较…
原文网址:http://blog.csdn.net/linweig/article/details/5203716 本篇将介绍在JNI编程中如何传递参数和返回值. 首先要强调的是,native方法不但可以传递Java的基本类型做参数,还可以传递更复杂的类型,比如String,数组,甚至自定义的类.这一切都可以在jni.h中找到答案. 1. Java基本类型的传递 用过Java的人都知道,Java中的基本类型包括boolean,byte,char,short,int,long,float,doub…
主要学习资料:黑马程序员的NDK方法使用(生产类库so)              jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.cnblogs.com/activity-life/p/3643047.html //0.传入一维整型数组,无返回值(但已对数组进行了修改) public native void arrayEncode(int[] arr); //1.传入一维整型数组,数组长度(因为c不容易获取而Java方便),返回…
本文将介绍如何使用eclipse和ndk-build来编写一个基于Android4.4版本的包含有.so动态库的安卓程序. 前提是已经安装和配置好了诸如SDK,NDK等编译环境.下面开始编程! 1 程序逻辑 我们要编写的程序包含两部分:java部分——负责界面和调用JNI native函数:JNI native 部分——负责native函数的具体实现(本文使用C语言). native 函数伪代码如下: /* funtion: 传入两个整形变量,计算他们之和 return : 返回字符串“The…
3.getRamdomOrder() 这个方法会从backend得到一个随机的Order对象(抱歉这里“Random”拼错了),然后再调用java中相应的通知方法来通知foreground.getRamdomOrder方法没有参数,但是所对应的C++方法里却有两个参数,一定有人会不解.其实细心的朋友一定会发现,JNI里所有对应Java方法的C++ 方法都会比Java方法多两个参数,第一个参数是我们很熟悉的JNIEnv*指针,第二个参数有时是jobject有时是个jclass.针对这第二个参数在这…
自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例子在实际的开发中没有太大的价值,实际开发中所需要的JNI程序要远远比那个复杂.所以这一篇就来介绍下如何通过JNI实现java和C++的相互通信,来满足实际开发的需要. 所谓”通信“,其实说白了无非也就是我们所说的方法调用,在上一篇的例子里介绍了如何在Java中调用本地的DLL,其实在Java代码中,…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 在学习C语言数据类型之前,我们先来回顾一下Java中的基本数据类型和其特点 一:基本数据类型 1.在Java中有八大基本数据类型和一个引用数据(String)类型如下: byte 1字节 char 2字节 short 2字节 int 4字节 float 4字节 long 8字节 double 8字节 boolean 2.那在C语言中又有哪些类型呢?我们可以来看一下 int…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指针并没有很大的区别我们看如下代码就很清楚的知道了 #include<stdio.h> #include<stdlib.h> //定义一个函数 int add(int a,int b) { return a + b; } main() { //定义函数指针 //返回值类型,变量名可以随便…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:JNI是什么呢? JNI:JNI是JavaNative Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++) ,简单来说就是Java调C,C调Java. 二:开始搭建我们的开发环境,也是非常的简单的 Dev-C++工具下载,安装一路默认到Finish就ok了. 工欲善其事,必先利其器. 调整字体大小:菜单栏下 Tools–>…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:前面我们介绍了一级指针的相关概念和用发,今天我们就来说一说多级指针. 1.定义多级指针 #include<stdio.h> #include<stdlib.h> /** 多级指针 指针指向的还是是内存地址 */ main(){ //定义一个int类型的变量,并且赋值为100 int i = 100; //定义一个int类型的一级指针变量p1,并且把i的地址…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址      内存地址就是指针.来看个小案例 #include<stdio.h> #include<stdlib.h> /** 指针就是内存地址 内存地址就是指针 */ main() { //定义一个int类型的变量i,并且赋值为10 int i=10; //定义一个int类型的一级指针变量p int* p; //把…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源.程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用完毕时,系统会自动释放所占用的内存空间所以变量的分配与释放,都无须程序员自行考虑. 动态内存:指在程序执行的过程中动态地分配或者回收存储空间的分配内存的…
本章我们重点说明以下JNI设计的问题,本章中提到的大多数设计问题都与native方法有关.至于调用相关的API的设计,我们会在后面进行介绍. 一.JNI接口函数和指针 native 代码通过调用JNI函数来访问Java VM功能.JNI函数可通过接口指针获得.接口指针是指向指针的指针.该指针指向一个指针数组,每个指针指向一个接口函数.每个接口函数都在数组内的预定义偏移处.下图说明了接口指针的组织. 接口指针 JNI接口的组织方式类似于C ++虚函数表或COM接口.使用接口表而不是硬连接函数条目的…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 不得不说在AS2.2以上的版本进行开发就一个字——爽,在2.0上使用jni出现各种问题现在果断使用新版本开发了. 使用AS2.0创建Jni项目: 使用AndroidStudio编写第一个JNI程序 一:编写Jni程序 1. 我们创建一个项目,将Include C++ Support勾选一路Next直到Finish 这样就可以全自动为我们创建好一个带有Jni的项目了 编译过程…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 1.简单介绍一下NDK和JNI NDK:NDK是Native Development Kit的缩写,是Google提供的一套工具集,可以让你其他语言(C.C++或汇编)开发 Android的 JNI.NDK可以编译多平台的so,开发人员只需要简单修改 mk 文件说明需要的平台,不需要改动任何代码,NDK就可以帮你编译出所需的so库. JNI:JNI是Java Native…
下载NDK 后 它自带有 sample,初学者 可以导入Eclipse 运行 这里 我是自己创建的一个新工程 第一步: 新建一个Android工程 jni_test(名字自取) 第二步:为工程添加 本地支持 右击工程,选择 android tools -- Add Native support  后,会弹出一个对话框 让你输入 库的名称 这个名字 你可以做修改,也可以使用默认,点击finish 之后,你会发现 该工程里多了几个文件夹,其中有一个叫 jni,这里 就是我们写c代码的地方,jni文件…
最近一直在学安卓的jni,主要参考的是黑马程序员的视频教程,讲的确实不错. 那就自己总结一下吧,算是对学习的复习. 这篇博客也主要参考了这位博主:http://www.cnblogs.com/activity-life/p/3643047.html,在这里谢谢了 通过他的博客和视频教程,我结合了两者的方法,把功能实现了,毕竟这个是应用为主,自己学艺不精,这里积累下: 第一篇博客的总结所有Java调取jni是关于字符串的操作,主要包括以下三种类型: //对基本数据类型字符串的访问 //0.无输入,…
  Message(消息):       一. Message的字段:    在Android中,Message作为线程之间(主要是子线程和UI主线程之间)数据交换的载体,通过Handler去传递.它包含几个常用的字段:     1.arg1和arg2两个int类型的字段:主要在线程之间需要传递简单的int类型的数据时使用.     2.what字段:int类型,主要用于标识一个Message.当在子线程中定义一个Message时,通常指定what的值为一个int常量,该Message传递到主线…
参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组长度 private native int SumArray(int [] ar, int length); //传一个一维数组和不传数组长度 private native int SumArrayA(int [] ar);//不传长度 对应三种类型的jni代码: //0.传入一维数组,无返回值:…
二进制:以0b开头,只有0和1两种数字.如0101 十进制:0~9十个数字表示.如25 十六进制:以0~9,A~F表示,以0X开头.如0X2B 十进制转换为X进制:连除倒取余 X进制转换为十进制:按权求和. 一个八进制可以由3个二进制表示 一个十六进制可以有4个二进制表示 基本数据类型:大体上分为整型和浮点型 字节:计算机中最小的储存单位   1 Byte=8  bit 整型:   int  4字节           short  2字节           long    4字节或者8字节…
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C.C++ 和汇编语言)编写的应用程序和库进行交互操作. 1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)…
原文网址:http://jinguo.iteye.com/blog/696185 Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C.C++ 和汇编语言)编写的应用程序和库进行交互操作. 1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Byt…
本文全文转载自:http://www.cnblogs.com/shuqingstudy/p/4909089.html,非常感谢 package com.test.androidjni; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class MainActivity extends Activity {…
JNI 即 Java Native Interface 是 native 编程接口,它允许在Java虚拟机(VM)内运行Java代码与其他编程语言(主要是C和C++)编写的应用程序和库进行交互操作. JNI最重要的好处是它对底层Java VM的实现没有任何限制.因此,Java VM供应商可以添加对JNI的支持,而不会影响VM的其他部分.程序员可以编写一个native应用程序或库的版本,并期望它可以与支持JNI的所有Java VM一起使用. 本文主要将从以下几点讲述JNI相关的内容,用于我们了解J…
Android JNI(一)——NDK与JNI基础 隔壁老李头 关注  4.4 2018.05.09 17:15* 字数 5481 阅读 11468评论 8喜欢 140 本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法的中文API Android JNI学习(五)——Demo演示…
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法的中文API Android JNI学习(五)——Demo演示 本片文章大纲如下: 1.导读 2.什么是NDK 3.为什么使用NDK 4.NDK到SO 5.JNI 大纲.png 一.导读 在Android OS上开发应用程序,Goog…