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开发的更多相关文章
- Android Studio JNI开发入门教程
Android Studio JNI开发入门教程 2016-08-29 14:38 3269人阅读 评论(0) 收藏 举报 分类: JNI(3) 目录(?)[+] 概述 在Andorid ...
- android下JNI开发
android下JNI开发 what 什么是JNI JNI java native interface native本地 java本地接口 通过JNI可以实现java和本地代码之间相互调用 jni可以 ...
- Android Studio JNI 开发简单案例
转载:http://www.androidchina.net/5744.html 进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C .C++ 写的,那么在 Android 中怎么调用底 ...
- 实现Android Studio JNI开发C/C++使用__android_log_print输出Log
相信很多人在刚开始学习Android JNI编程的时候,需要输出Log,在百度Google搜索的时候都是说需要在Android.mk中加入LOCAL_LDLIBS+= -L$(SYSROOT)/usr ...
- NDK工具开发Jni,Android studio jni开发
NDK工具开发JNI 对于JNI的作用,我这边就不详细说明了,百度google 有很多这样的介绍,这边着重详解AS使用NDK工具开发,调C的流程. 1,创建工程 2,创建native方法 //该类的路 ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- Android游戏开发实践(1)之NDK与JNI开发01
Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...
- Android游戏开发实践(1)之NDK与JNI开发02
Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...
- android JNI开发
1.NDK简介 NDK(Native Development Kit)NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.NDK集成了交叉 ...
随机推荐
- Codeforces 190E - Counter Attack
[题意]给一个无向图的反图(即给定的边实际上不存在,而未给的边是存在的),求连通块数.(点数n<=5*10^5,边数m<=10^6) 一开始我想的用DFS,枚举每一个点,跳过不存在的点,直 ...
- NYOJ2括号配对问题
括号配对是最基本的栈的问题,它是栈入门的经典题目,思路是,如果是左括号直接进栈,如果是右括号,这时就要比较栈顶的元素与他是否匹配,如果匹配则出栈,否则进栈,下面是代码的实现: #include < ...
- .net(全局文件,错误页,静态页,IIS配置及防黑)
添加全局应用程序类. <%@ Application Language="C#" %> <script runat="server"> ...
- C#学习第二天
在C#中数据类型大概有两类:值类型和引用类型,需要由定义类型的开发人员决定在什么地方分配一个实例. 值类型和引用类型在使用原理上也有所不同,值类型在使用时是传递或者得到一个值的副本,而引用类型在使用时 ...
- [Codeforces 501D] - Misha and Permutations Summation
题意是给你两个长度为$n$的排列,他们分别是$n$的第$a$个和第$b$个全排列.输出$n$的第$\left(a+b \right)\textrm{mod} \, n!$个全排列. 一种很容易的想法是 ...
- git 的记住用户名和密码和一些常用
git config --global core.autocrlf falsegit config --global color.ui truegit config --global credenti ...
- MYSQL :逗号分隔串表,分解成竖表
DROP TEMPORARY TABLE IF EXISTS Temp_Num ; CREATE TEMPORARY TABLE Temp_Num ( xh INT PRIMARY KEY ); -- ...
- 78 Subsets(求子集Medium)
题目意思:求解一个数组的所有子集,子集内的元素增序排列eg:[1,3,2] result:[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]思路:这是一个递推的过程 [] ...
- select options常用操作
1.判断select选项中 是否存在Value="value"的option元素 function jsSelectIsExitItem(objSelect,objItemValu ...
- Nginx源码研究五:NGINX的配置信息管理
配置信息是nginx系统重要的组成部分,配置信息的使用,实际上包含两层,一层是用户针对参数定义了值,例如下面nginx参数文件中的 keepalive_timeout 65,还有一部分是用户没有定义值 ...