Android JNI的第一步——从HelloWorld开始
来源:互联网 发布:淘宝店铺招牌素材 编辑:程序博客网 时间:2024/05/20 02:25
第一步:配置NDK运行环境
两个工具包:
com.android.ide.eclipse.ndk_23.0.2.1259578.jar
android-ndk-r10(当然也可以是一些其他类似的工具包,如android-ndk-r8)
前者为搭建NDK环境时,必需的工具包。需要将其置于eclipse的plugins文件夹中。然后重启eclipse即可。
前者工具包下载连接
后者为eclipse运行JNI程序所需要的工具包,将其置于一个你习惯的路径下。放置好之后,进行环境变量的配置,如下图:
添加NDK路径:
在window工具栏中选择preferences选项进入Preferences对话框,如下:
上面所说的第一个工具包就是为产生上图中的3“NDK”的,如果不出意外,添加完第一个工具包后就会有这个选项了。然后上图中的第4步就是去添加我们的第二个工具包。
经过上面的步骤,我们的开发环境已经搭建完成了。
第二步:创建Android工程
新建Android工程:
新建项目和普通Android工程没什么不同。
添加本地支持:
新建好工程之后,我们就需要对其进行添加本地支持
此步操作完成之后,会自动生成Android.mk配置文件和相应的cpp文件,mk文件内容:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := William_Hello_JNILOCAL_SRC_FILES := William_Hello_JNI.cppinclude $(BUILD_SHARED_LIBRARY)而对于那个LOCAL_MODULE := William_Hello_JNI中的William_Hello_JNI则是在Java代码中需要去调用的Library,后面会有说明。
当然,这两步的前提还是你已经添加了第一个工具包。
编写C++代码:
接下来,就可以试着去写你的C++代码了(就在刚刚生成的那个William_Hello_JNI.cpp中去编写)。我的示例是这样的:
#include <jni.h>#include <string.h>extern "C" {JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj);}JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj) {return env->NewStringUTF("Hello From cpp.");}
对于上面的C++代码可以看到有一个方法:JNIEXPORT jstring JNICALL Java_com_demo_jni_MainActivity_sayhello(JNIEnv * env, jobject obj);
其中的组成部分说明如下:
JNIEXPORT 固定部分,表示JNI外部引入
jstring 表示返回类型
JNICALL 固定部分,顾名思义,是表示此方法提供给JNI层去调用
Java 固定部分,表示后面的部分是Java代码的内容
com_demo_jni 是Java代码中的程序包名
MainActivity 表示相应方法所在的类名
sayhello 就是这里与Java代码中一一对应的方法名
编写Java代码:
对于Java代码第一步要做的事件就是引入C/C++中的库,这里的库就是我们在添加本地支持的时候生成的Android.mk文件中的LOCAL_MODULE的值。
例如我的工程中就是:
static {System.loadLibrary("William_Hello_JNI");}完整主函数,如下:
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);EditText showJNI = (EditText) findViewById(R.id.activity_main_jni_show);showJNI.setText(sayhello());}public native String sayhello();static {System.loadLibrary("William_Hello_JNI");}}
运行效果图:
源码下载:
工程源码:http://download.csdn.net/detail/u013761665/8369031
参考
参考博文:http://blog.csdn.net/yf210yf/article/details/9264587
- Android JNI的第一步——从HelloWorld开始
- Android+JNI 的编写步骤 从HelloWorld开始
- android jni——helloworld
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- 学习SpringMVC——从HelloWorld开始
- LeetCode Construct Binary Tree from Inorder and Postorder Traversal
- Appium 服务器端从启动到case完成的活动分析
- Linux RHEL4下安装SNMP并配置
- nyoj 915 +-字符串
- DedeCMS-ajax无刷新会员登录修改方法
- Android JNI的第一步——从HelloWorld开始
- 新手如何学好PHP
- 著名黑客雷蒙评价最重要的几种编程语言
- IOS支付宝集成一系列问题
- Java读写Properties文件
- Java中自动递增和递减
- 日经春秋 20150108
- 设计模式分类
- 游戏引擎物理碰撞(非正碰)