Android的JNI开发

变量的定义
	int i;
	typedef int x;//定义一个int x数据类型
	x a=10;
	printf("size=%d",sizeof(i));//获取int类型长度(4个字节)

	system("pause");//不让窗体立即消失

循环
在c语言中,循环的变量必须在外面生命
	int i
	for(i=0;i<10;i++){
		printf("i=%d",i);
	}	

指针变量
	int i=10;
	int* p;//声明一个指针变量
	p=&i;//取出i的地址值,赋值给指针变量
	*p取出指针指向的值

多级指针
	int i=10;
	int* p;
	p=&i;

	int** s;
	s=&p;

	int*** x;
	x=&s;

	//取出i的值,这里有一个规律,前面有多少个*,取得时候就在签名加几个*
	printf("i=%d",***x);

数组
	数组的定义
	int arr[3]或者int arr[]={1,2,3};

	遍历数组:
	//1.普通方式
	int i;
	for(i=0;i<3;i++){
	     printf("arr[%d]=%d\n",i,arr[i]);
	}
	//2.通过指针方式获取 <*(arr+j)>
	int j;
	for(j=0;j<3;j++){
	   printf("arr[%d]=%d\n",j,*(arr+j));
	} 

结构的定义与使用
	//1.定义结构体
	struct person{
		int age;
	}
	//2.结构体的使用
	struct person p;
	p.age=10;
	printf("p.age=%d",p.age);

结构体指针变量的定义与使用
	struct person{
		int age;
	} *p;//声明一个结构体指针变量 

	//动态申请内存空间
	p=(struct person*)malloc(sizof(struct person));
	p->age=18;
	printf("p->age=%d",p->age);

函数的定义与使用
	#include<stdio.h>
	int sum(int x,int y);//声明一个函数
	main(){
	       int x=10;
	       int y=10;
	       int z=sum(x,y);//调用函数进行求和运算
	       printf("z=%d",z);
	       system("pause");
	}
	//真实的函数
	int sum(int x,int y){
	    return x+y;
	}

函数的还可以直接定义
	int sum(int x,int y){
	    return x+y;
	}
	main(){
	       int x=10;
	       int y=10;
	       int z=sum(x,y);//调用函数进行求和运算
	       printf("z=%d",z);
	       system("pause");
	}

两个变量的交换
	change2(int* x,int* y){
	       int z=*x;
	       *x=*y;
	       *y=z;
	}
	main(){
	       int x=1;
	       int y=2;
	       change2(&x,&y);
	       printf("x=%d\n",x);
	       printf("y=%d\n",y);
	       system("pause");
	}
指针函数
	#include<stdio.h>
	int sum(int x,int y){
	    return x+y;
	}
	main(){
	       int (*s)(int,int); //定义一个函数指针
	       s=sum; //给函数指针赋值
	       int x=s(2,3);
	       printf("x=%d",x);
	       system("paud");
	}

在结构体中使用函数指针
	1.定义一个函数
	2.顶一个结构体,并在结构体中 定义一个函数指针
	3.在main函数中,定义一个结构体指针
	4.通过结构体指针给函数指针赋值,以及成员赋值
	#include<stdio.h>
	//1.定义一个函数
	int sum(int x,int y){
	    return x+y;
	}
	//2.顶一个结构体,并在结构体中 定义一个函数指针
	struct stu{
	       int age;
	       //函数指针
	       int (*score)(int,int);
	}
	main(){
	       //3.定义一个结构体指针
	      struct stu* s=(struct stu*)malloc(sizeof(struct stu*));

	      //4.给函数指针赋值
	      s->score=sum;
	      //给结构体中成员属性赋值
	      s->age=s->score(1,2);

	      printf("age=%d",s->age);
	      system("pause");
	}

联合的定义与使用
	//定义一个联合
	union un{
	      int age;
	      char x;
	}
	main(){
	       union un  abc;//定义一个联合变量
	       abc.age=10;
	       printf("age=%d\n",abc.age);
	       printf("x=%d\n",abc.x);
	       system("pause");
	}

枚举的使用
//定义一个枚举,枚举中的成员都是一个整型常量值
enum mode{
     a=100,//如果不赋值,默认从0开始,如果赋值则后面的一次加1
     b
}
main(){
       //定义一个枚举变量
       enum mode m=a;
       printf("m=%d",m);
       system("pause");
}

类型说明
	typedef int xx ;
	xx a=100;

define指令,定义全局内容;在c中1代表真,0代表假
	#define TRUE 1;
	#define FALSE 0;
	if(TRUE){
	....
	}else{....}

	定义一个全局方法
	#define Max(x,y) (x>y)?x:y

动态数组
	int* arr=(int*)malloc(4*10);
文件读取
	int main(){
	   FILE* fp;
	   char ch;
	   if((fp=fopen("mm.txt","rt"))== NULL){
		   printf("文件不存在or读取失败\n");
	   }else{
	       //怎么读取文件的内容?
		ch=fgetc(fp);//从流里面获取字符
		while (ch!=EOF)
		{
		putchar(ch);//在stdout上输出字符
		ch=fgetc(fp);
		}
		fclose(fp);//关闭一个流
	   }
	   system("pause");//暂停   让cmd窗口不消失
	}

jni开发流程:
1 新建一个android工程
2 add native support  生成jni文件夹   Android.mk文件  +  xx.cpp文件
3 修改文件  Android.mk  .cpp 改为.c       xx.cpp文件 改为.c
----------------------------------------------------------------------------
该工程可以进行ndk开发

4 在MainActivity.java里面添加一个native方法   public native String  getString();
5 生成头文件
  cmd
  cd /d 工程的src目录
  javah  com.itcast.jni1.MainActivity   在src生成一个 com_itcast_jni1_MainActivity.h
----------------------------------------------------------------------------
生成了头文件

6 把com_itcast_jni1_MainActivity.h 复制到jni下面,拷贝里面的方法到.c文件
7 完成.c文件内容的编写
----------------------------------------------------------------------------
c代码编写完成

8 编译c代码
  右键工程 --》 Build configuration --> buill all  生成.so文件

9 加载动态链接库文件
  static{
     System.loadLibrary("hello");
   }

10 调用native方法

Android的JNI开发

时间: 2024-10-13 08:48:41

Android的JNI开发的相关文章

android下jni开发总结

对于开发Android来说jni是一个相对应用得比较少的玩意(相对于Android系统来说),正好最近这一阵子公司的项目比较轻松有一定的空闲时间,就利用起来整理了一下android下jni开发常用到的知识点和一些比较重要的用法,发话不多说直接进入主题. 在这里,对于jni的一些基本的介绍我就不多说了感兴趣的可以去问度娘或者谷歌,我在这里主要是以代码为主讲解关于jni的主要用法,如果有什么遗漏或者错误的地方希望大家勿喷额.直接上代码来看看我定义的本地方法,域和方法名: <pre name="

实现Android Studio JNI开发C/C++使用__android_log_print输出Log

相信很多人在刚开始学习Android JNI编程的时候,需要输出Log,在百度Google搜索的时候都是说需要在Android.mk中加入LOCAL_LDLIBS+= -L$(SYSROOT)/usr/lib -llog ,其实这是在eclipse开发上的方式,Android Studio并不是这么使用. Android Studio的Android.mk是自动生成的,就算修改也是没用了,实际Android Studio的Android.mk是根据gradle文件生成的,那么就需要修改gradl

android之JNI开发环境搭建

研究了很久怎么编译.so动态库,感觉在linux的安卓源码下编译太麻烦了,所以就找网上找找有没有方便的办法. 现在终于实现了,现在一起总结下. 1.在windows环境下开发jni需要c/c++编译器的支持,使用GNUStep,下载地址http://www.gnustep.org/windows/installer.html. 2.下载安装后,验证是否成功.打开GNUstep->Shell,输入make -v 和 gcc -v命令,如图所示. 3.下载NDK,地址http://developer

Android jni开发有哪些常见的错误

我们在Android jni开发中,特别是对于刚入门学习Android jni开发的同学来说,往往会遇到很多错误,这里总结了我们经常遇见的错误.这些错误,你是否经常遇到. 错误1:java.lang.UnsatisfiedLinkError: Native method not found: 本地方法没有找到 1.本地函数名写错 2.忘记加载.so文件 没有调用System.loadlibrary 错误2:findLibrary returned null 1.System.loadLibrar

Android JNI开发

概述 在开发framework的时候有时会遇到需要自己开发JNI,以便使Java能够调用自己底层开发的库.网上的文章一般都是介绍如何通过命名规则及javah,使jni层函数与java层函数自动建立链接(Java虚拟机通过命名规则建立),本文将讲解如何动态注册jni函数. 依赖库及头文件 先贴出Android.mk的代码 1 LOCAL_PATH :=$(call my-dir) 2 include $(CLEAR_VARS) 3 4 LOCAL_SRC_FILES := kiki_jni.cpp

Android Studio上面使用Ndk JNI 开发工程

     Ps:最近比较闲,so.多更新几篇博客算是总结一下.顺便鄙视一下有的programmer照搬网上面文章,并没有自己去进行相关的实践验证.导致网上面的博客千篇一律,只要最初写博客的人踩坑后面的人全都踩坑.对这类不经过实际检验就大抄特抄的人深深的鄙视一下 ok  接下来我们进入今天的正题,也就是在Android studio里面如何正确的使用和配置ndk.如果有对jni不了解的童鞋建议先去学习下JNI技术再来看本篇博客. 转载请标明出处:http://blog.csdn.net/unrel

Android Studio 下进行jni开发及打包方法

最近几天查找了好多关于Android Studio开发JNI资料的资料,但是一直编译不成功!原因可能是和Android Studio的最新版本有关,或者多数都是使用Eclipse进行Android JNI 开发的,不适用Android Studio 吧! 首先介绍我的开发环境: 操作系统:Ubuntu Kylin15.04 32位 开发工具:Android Studio JDK版本: java version "1.7.0_79" OpenJDK Runtime Environment

Android JNI开发提高篇

有关JNI的开发技术,我们继续围绕Android平台进行,JNI可以支持C或C++,从目前为止我们写过的JNI代码均为C实现的,即文件名为.C而C++的和这些有什么不同呢? Android平台上的JNI一般使用C还是C++编写呢? Android平台在中间层和大部分的类库的底层使用了C++的开发方式,后缀为.cpp,比如Android Framework.OpenCore.Webkit.SQLite等等.使用C++好处就是可以使用很多库但目前Android不支持STL,我们知道C表示字符串都是字

【Android开发】NDK开发(3)-jni开发技巧

一.      jni打印调试信息 1.    在Android.mk文件中添加: LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog 2.     在 .c文件中添加: #include <android/log.h> 3.      打印log信息: __android_log_print(ANDROID_LOG_INFO, "INIT_GETGPSINFO", "get_gps_info"); //或者 __and