Android For JNI(一)——JNI的概念以及C语言开发工具dev-c++,编写你的第一个C语言程序,使用C启动JAVA程序
新知识,涨姿势嘛,总是要学的,各位看官老爷倾听我慢慢道来,要用JNI调用C的话,其实还有一个痛点,就是你必须会这门语言才吃到怎么去用他的方法,所以我们必须花上几天的时间把C的基本概念和知识点给学会,其实编程思想有点类似,JAVA和C有一些基本的东西还是类似的,主要是C的指针还是有点抽象,跟以前学面向对象一样一样的,哈哈,污污污污….工欲善其事必先利其器,我们先把学C所用到的开发环境给部署一下
这个工具也只是让我们更加的熟悉语法,随便搜索一下就能下,属于一个轻量级的开发工具,我们下载下来安装
当我们一切都准备好了的时候,我们就可以来编写程序了,也就是注明的“Hello World”,现在看到helloworld是不是有一种很怀念的感觉
我们点击左上角的文件-新建-源代码,写上这么一段代码(先不要管什么意思,照着敲就行)
我们要运行就得编译,用惯了Eclipse,Eclipse有自动编译的选项,而dev-c++是没有的,我们手动编译一下
出现Done说明编译完成,我们可以运行了,不过编译会一闪而过,因为是命令窗,具体的停留的我忘记了,和提前java有点类似
这里只要注意一点的是main。在C中,main函数也是程序的入口吗,C中的函数和java的方法是一个概念,只是叫法不一样
C是可以直接调用windows指令的,既然如此,我们可以仿照我们程序的快捷方式的例子去做一个软启动方式,说起来有点迷糊哈,我们举个例子,我们来到Eclipse的安装目录,你可以看到这样的一个目录
其中,我们的快捷方式只有只有314k,却能启动这个程序,这就是windows的特长了,而我们的C是可以直接使用windows的指令的,所以我们就可以间接的使用C去调用JAVA了
回到正题,我们刚才举的例子,其实从快捷方式的配置文件eclipse.ini中就可以详细的看到
--launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20150204-1316 -product org.eclipse.epp.package.java.product --launcher.defaultAction openFile --launcher.XXMaxPermSize -showsplash org.eclipse.platform --launcher.XXMaxPermSize --launcher.defaultAction openFile --launcher.appendVmargs -vmargs -Dosgi.requiredJavaVersion=1.6 -Xms40m -Xmx512m
我们不难发现,当我们启动的时候,他会执行plugins目录下的org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar架包,你双击他你会惊奇的发现,你竟然启动了eclipse,这就是windows启动的原理了,好了,既然逻辑通了,那我们就来写C代码吧!不过事先我们得准备一个java文件,我就把他放在C源码目录下好了
好了,初步的认识先OK到这里,我们要使用C的话,只要一点点入门就够了,当然你有兴趣深入也是可以的,我们学C和学JAVA一样,下一篇主要还是以数据类型,指针,函数的认识为主,对了,还要提及一下他对内存的操控,这篇先到这里!
相关文章
- java sortedset用法_Java SortedSet headSet()用法及代码示例[通俗易懂]
- Android 代码混淆规则
- android activity自动跳转,Android activity跳转之finish()方法的作用
- java map 二维数组_Java二维数组实现简单Map
- HijackActivity android activity界面劫持
- db4o java,db4o Java版性能测试评估
- java 构造器 构造方法_Java构造器(构造方法/constructor)
- java运行环境配置(jdk配置)Java博客 2 年前 桃李Taoli
- java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换
- Java 零拷贝_java clone 深拷贝
- Android 12 蓝牙适配 Java版
- android.support.v4.app.Fragment$InstantiationException问题解决
- 【Android NDK 开发】JNI 方法解析 ( C/C++ 设置 Java 对象字段 | 查找字段 | 设置字段 )
- 【Android FFMPEG 开发】C++ 回调 Java 方法 模板 ( JavaVM *vm | JNIEnv *env | jobject instance | 引用类型 | 模板代码示例 )
- 【Android 异步操作】手写 Handler ( 消息队列 MessageQueue | 消息保存到链表 | 从链表中获取消息 )
- 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 )
- 【Android 逆向】IDA 工具使用 ( 重命名函数 | 添加注释 | 添加标签 / 跳转标签 | 代码跳转前进 / 后退 )
- 【Android Gradle 插件】AdbOptions 配置 ② ( AdbOptions#installOptions 配置 | AdbOptions#timeOutInMs 配置 )
- 【错误记录】Android Studio 集成 ARoute 编译报错 ( 兼容 support 库和 androidx 库 | add ‘tools:replace=“android:appCo )
- 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ④ ( 使用路由实现组件间通信 | 引入 ARoute 框架 | Gradle 构建脚本优化问题 )
- Android剪裁图片简单的方法详解手机开发
- [android] 异步http框架与实现原理详解手机开发
- android dbutils的简化版详解编程语言
- Oracle与Java的连接:揭秘数据库开发技术之间的神奇联系(oracle连接java)
- 如何在Linux系统中安装Java(linux中安装java)
- 一起学习Java的Oracle包(java的oracle包)
- Java模拟Oracle实现稳定数据库性能(java模仿oracle)
- Android笔记之:App列表之下拉刷新的使用
- android操作XML的几种方法总结
- android自定义TabActivity的实例方法
- Android中自定义进度条详解