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方法

 

posted on 2014-08-02 14:30  I love Android  阅读(250)  评论(0编辑  收藏  举报