Android NDK开发初记
2015-11-07 10:14
375 查看
为什么要用到NDK
NDK的弊端
c程序调用java代码简单示例
2.驱动等底层开发。java代码是一次编译,到处运行,这些都是java虚拟机的功劳。不同平台的java虚拟机都封装了底层相关的操作,因此java应用层根本就接触不到底层的东西,而c/c++可以。例如WiFihost,WiFi热点的开发,将手机网络共享,供其他设备使用。
3.音频图像等处理。一些开源的音频图像处理库基本都是c/c++编写的,例如opencv、lame等。
4.嵌入式开发。车载系统的开发等。
2.c/c++开发对于错误与内存控制较高,对于开发者的要求也就较高,并且易出错。
2.打开HelloWorld.c 文件。(示例使用的是Dev-C++开源工具)。
3.编写c代码
4.运行
![](http://img.blog.csdn.net/20151107095738383)
5.在HelloWorld.c 相同目录下编写HelloWorld.java文件。代码如下
6.打开cmd,进入java文件目录编译java文件(首先装jdk,并配置环境变量)
![](http://img.blog.csdn.net/20151107100444029)
7.此时该目录下面有HelloWorld.c 和 HelloWorld.class文件了。这时候需要使用c代码调用java代码,将HelloWorld.c 修改如下:
8.运行HelloWorld.c
![](http://img.blog.csdn.net/20151107101016700)
9.大功告成!若是HelloWorld.class 文件与 HelloWorld.c 文件不在同一个目录,则将HelloWorld.c 代码改动一下:
NDK的弊端
c程序调用java代码简单示例
为什么要用到NDK
1.核心代码的保护。由于apk 的java层代码容易被反编译,而c/c++反编译的难度较大,所以一些核心代码可以使用NDK开发。2.驱动等底层开发。java代码是一次编译,到处运行,这些都是java虚拟机的功劳。不同平台的java虚拟机都封装了底层相关的操作,因此java应用层根本就接触不到底层的东西,而c/c++可以。例如WiFihost,WiFi热点的开发,将手机网络共享,供其他设备使用。
3.音频图像等处理。一些开源的音频图像处理库基本都是c/c++编写的,例如opencv、lame等。
4.嵌入式开发。车载系统的开发等。
NDK的弊端
1.可能影响常规软件的开发周期。一般软件仅仅使用SDK开发就够了,若是强行使用NDK,只是白白增加项目的难度与时长。2.c/c++开发对于错误与内存控制较高,对于开发者的要求也就较高,并且易出错。
c程序调用java代码简单示例
1.创建HelloWorld.c 文件。(示例文件目录D:\Dev-Cpp_gr\Dev-Cpp\workspace\HelloWorld.c)。2.打开HelloWorld.c 文件。(示例使用的是Dev-C++开源工具)。
3.编写c代码
#include "stdio.h" void main() { printf("C Hello World!\n"); return; }
4.运行
5.在HelloWorld.c 相同目录下编写HelloWorld.java文件。代码如下
public class HelloWorld{ public static void main(String[] args){ System.out.println("Java Hello World!"); } }
6.打开cmd,进入java文件目录编译java文件(首先装jdk,并配置环境变量)
7.此时该目录下面有HelloWorld.c 和 HelloWorld.class文件了。这时候需要使用c代码调用java代码,将HelloWorld.c 修改如下:
#include "stdio.h" void main() { printf("C Hello World!\n"); system("java HelloWorld"); // 命令与运行java文件一致 return; }
8.运行HelloWorld.c
9.大功告成!若是HelloWorld.class 文件与 HelloWorld.c 文件不在同一个目录,则将HelloWorld.c 代码改动一下:
system("java -classpath D:\\Dev-Cpp_gr\\Dev-Cpp\\workspace HelloWorld"); // 加上路径即可
相关文章推荐
- Android & iOS 第三方 Crash ANR 捕捉上传
- android的水波纹点击效果
- Android之系统Log输出日志的封装类LogUtil
- 【转】Android sdk content loader 0%的解决方案
- Android Studio Git Ignore File
- Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题
- Android下adb用法总结
- Android进阶之利用百度地图定位获取当前城市
- android-改变状态栏字体颜色
- Android Studio 将本地开源库导入到自己的项目中使用(小记)
- Android中的自定义Adapter(继承自BaseAdapter)——与系统Adapter的调用方法一致——含ViewHolder显示效率的优化
- android错误代码调试
- android sqlite插入与修改tips
- Android使用.9图片失效的问题
- 在Android studio中建立Java工程
- Android开发中异常的总结
- Android中简单的定时器类
- Android中的权限
- 彻底解决Android 拍照 内存溢出 Out of Memory的问题
- android 透明度计算