JNI学习(一)

来源:互联网 发布:免费空间域名 编辑:程序博客网 时间:2024/04/30 06:04

Android使用C语言的场景

1,android下的极品飞车等游戏,要求碰撞效果等实时处理,需要调用c代码;
2,开源的c的代码库:
opencv:intel开发,图形和视频实时处理的方法库;
3,rmvb 视频 avi
视频和音频编解码的代码库(ffmpeg)
4,opengl(c代码库)

C语言基础

1,system(“pause”)用getchar()代替,有了scanf再用getchar()就无效了;
2,C语言中没有boolean类型; 3,C语言中没有byte类型; 4,signed,unsigned只修饰整数;
3,int* p,int p,int p写法不同而已;
*的含义:

  1. 放在数据类型的前面,代表就是该数据类型的指针,例如float*;
  2. 放在指针变量的前面,代表指针变量存放的值; 特注:指针就是地址,地址就是指针。

4,方法执行结束后,其方法内部变量就被回收了;
5,指针中的常见错误:

  1. 指针没赋值,千万别用哈;
  2. 类型不同指针给给我转换;
  3. 指针不允许访问被回收掉的数据(子函数执行完毕后,子函数所有局部变量都会被系统回收);

6,指针的重要性:

  1. 直接访问硬件 (opengl 显卡绘图)
  2. 快速传递数据(指针表示地址)
  3. 返回一个以上的值(返回一个数组或者结构体的指针)
  4. 表示复杂的数据结构(结构体)
  5. 方便处理字符串
  6. 指针有助于理解面向对象

7,指针和数组的关系:数组名是数组第一个元素的地址;
8,动态内存分配的好处:

  1. 动态分配的内存不会在子函数执行后回收,可以继续使用;
  2. 不要使用已经回收掉的内存中的内容;
  3. 静态内存是在栈内存中分配的,堆空间是在堆空间中分配的;

9,要注意堆内存和栈内存的区别;
10,游戏外挂原理:找到某个方法的首地址,并进行调用;
11,结构体struct的size会根据编译器而不同;
12,typedef和#define

  1. typedef用于给数据类型取别名;
  2. #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查;

13,void*没有明确数据类型的指针;
14,typedef const struct JNINativeInterface* JNIEnv;

JNI的使用

  1. 安装CDT;
  2. 安装cygwin;
  3. 安装NDK;
  4. 在cygwin的etc中的profiles文件中添加path:/cygdrive/d/cygwin/android-ndk-r7b;
  5. 生成头文件的步骤:
    javac -d . HelloWorld.java;
    javah com.example.firstndk.HelloWorld;
    对于android项目,应该在classes目录下执行javah命令;
0 0
原创粉丝点击