eclipse下第一个Android NDK应用
来源:互联网 发布:网络电视浏览器tv版 编辑:程序博客网 时间:2024/06/11 04:08
也说不上原创吧。因为最近要做一个视频播放的功能,需要用到FFmpeg,但这个的引用又不像搞个jar包引用一下就完事这么方便。通过逐步的学习与了解,才发现这属于我从未开发过的NDK应用。所以搞不懂,也还算正常。因此这些天就开始了NDK开发的初步学习,这篇文章借鉴了很多前辈的博文,在此深表感谢。
好了,开始正文。
主要参考:
①http://www.cnblogs.com/pplxlee/p/5559223.html
②http://blog.csdn.net/w815878564/article/details/49645839
一、Android NDK开发环境
NDK下载
完成下载后,在eclipse中配置NDK的路径。Window→Preferences,若Preferences→Android 中未找到NDK选项,请参考链接①。还有一种情况是无法选择你刚才下载好的NDK,这时在你安装的ndk的主目录下创建一个ndk-build空文件,然后重新打开对话框选择就可以了。参考:③http://blog.csdn.net/mynameishuangshuai/article/details/51673695
。。。。
二、编写一个NDK的应用
1.首先新建工程,取名为MyFirstJni,在工程的MainActivity中,编写代码如下:
import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = new TextView(this);tv.setText(getNum() + "");setContentView(tv);}private native int getNum(); // 声明Native方法getNumstatic {System.loadLibrary("MyFirstJni"); // 载入动态链接库libMyFirstJni.so}}
2.然后右键工程,Android Tools->Add Native Support,进入后注意框里面的名字要和MainActivity的程序中加载的动态链接库的名字相同,这里输入"MyFirstJni"直接点完成即可。
我们会看到产生了新的文件夹jni,并生成了文件MyFirstJni.cpp和Android.mk。MyFirstJni.cpp用于编写C++代码,去定义getNum()方法的具体实现过程,而Android.mk则描述了编译C++成库的方式。这时还缺少Application.mk,新建一个,文件内容为APP_ABI := all,这个文件使得编译器生成其支持的全平台的so文件,如果针对某一平台开发,可以具体设置。
3. 接着是配置JAVAH工具,这个实际原理还是和网上说的命令行操作一样。这里只是将命令行操作改成了可视化操作,可以极大的提高效率。
第一步,打开eclipse的外部工具配置,点击后选择External Tools Configurations…
第二步,添加一个工具:
第三步,配置Javah命令:
命令为:
-v -classpath "${project_loc}/src"
-d "${project_loc}/jni"
-jni ${java_type_name}
完成上述操作后,选择应用。然后,在光标在MainActivity.java内的情况下,运行此工具。会看到在jni文件夹内生成了com_example_myfirstjni_MainActivity.h的文件。
打开后可以看到代码如下:
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_myfirstjni_MainActivity */#ifndef _Included_com_example_myfirstjni_MainActivity#define _Included_com_example_myfirstjni_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class: com_example_myfirstjni_MainActivity * Method: getNum * Signature: ()I */JNIEXPORT jint JNICALL Java_com_example_myfirstjni_MainActivity_getNum (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
实际上就是声明了JNIEXPORT jint JNICALL Java_com_example_myfirstjni_MainActivity_getNum函数,对应与java代码中的getNum函数,剩下的事情就是编码实现getNum的功能了。
接下来编写MyFirstJni.cpp文件如下:
#include <jni.h>#include "com_example_myfirstjni_MainActivity.h"jint Java_com_example_myfirstjni_MainActivity_getNum (JNIEnv *,jobject) { return 5000;}
如果顺利的话运行一下,你就能在你的手机上看到5000了。但我并未成功,出现了如下报错:
最后感谢以下博主:
④http://blog.csdn.net/songyuc/article/details/51339711
⑤http://blog.csdn.net/zhubin215130/article/details/39347873
(PS:请先参考链接④)
解决了Unresolved inclusion: <jni.h>的错误提示
再次编译运行APP,看到5000,成功
最终项目结构如下:
- eclipse下第一个Android NDK应用
- Eclipse下第一个NDK项目
- android studio下第一个ndk程序
- Eclipse下第一个Servet 创建过程
- NDK 下第一个boost asio 网络程序测试成功
- android下第一个程序,Hello World
- eclipse下第一个hadoop程序出现错误ClassCastException
- Linux下Eclipse使用NDK开发Android应用
- Android + NDK + Eclipse 调试
- Android Eclipse集成NDK
- android Eclipse NDk配置
- Android Eclipse NDK 配置
- Android+NDK+Eclipse调试
- Android Eclipse集成NDK
- Eclipse android ndk 开发
- Android NDK for Eclipse
- 将 Android* x86 NDK 用于 Eclipse* 并移植 NDK 示例应用
- 测试一下第一个
- 游戏付费点
- windows cmd命令设置成UTF-8
- ros学习的相关网站
- 《Windows核心编程》读书笔记十二 纤程
- Linux设备驱动模型
- eclipse下第一个Android NDK应用
- 欢迎使用CSDN-markdown编辑器
- ORA-65096 :公用用户名或角色名无效
- js的动静作用域
- poi上传excel
- img标签的onerror事件
- 命名空间的访问
- 更好的理解面向对象编程思想
- 解决mybatis 自动映射数据库_变为java大写,从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射