Android App中通过JNI调用C/C++代码
来源:互联网 发布:卫裤网站源码 编辑:程序博客网 时间:2024/06/06 00:04
1. Eclipse ADT创建android工程
2.编译java本地调用方法
package com.skymr.learn;public class HelloJni {public static native void sayHello();public native void sayHi();public static native String getName(String name);}
3.JNI部分
在android 工程 中创建目录jni, cmd进入到工程的src目录, 通过javah工具创建本地调用类对应的*.h,输出目录为jni
javah -d ../jni/jnispace com.skymr.learn.HelloJni
打开生成的*.h文件
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_skymr_learn_HelloJni */#ifndef _Included_com_skymr_learn_HelloJni#define _Included_com_skymr_learn_HelloJni#ifdef __cplusplusextern "C" {#endif/* * Class: com_skymr_learn_HelloJni * Method: sayHello * Signature: ()V */JNIEXPORT void JNICALL Java_com_skymr_learn_HelloJni_sayHello (JNIEnv *, jclass);/* * Class: com_skymr_learn_HelloJni * Method: sayHi * Signature: ()V */JNIEXPORT void JNICALL Java_com_skymr_learn_HelloJni_sayHi (JNIEnv *, jobject);/* * Class: com_skymr_learn_HelloJni * Method: getName * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_skymr_learn_HelloJni_getName (JNIEnv *, jclass, jstring);#ifdef __cplusplus}#endif#endif
#include <jni.h>#include "com_skymr_learn_helloJni.h"void Java_com_skymr_learn_HelloJni_sayHello (JNIEnv * env, jclass clazz){}void Java_com_skymr_learn_HelloJni_sayHi (JNIEnv * env, jobject jo){}jstring Java_com_skymr_learn_HelloJni_getName (JNIEnv * env, jclass, jstring){return env->NewStringUTF("Hello World!");}
在jni目录新建Android.mk文件,指定模块名和包含目录等配置
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := jnispace/helloJni.cppLOCAL_C_INCLUDES := jnispace #LOCAL_SHARED_LIBRARIES := libcutils LOCAL_MODULE:= helloJni include $(BUILD_SHARED_LIBRARY)
cmd进入到jni目录,生成*.so库文件
注:先前用的ndk版本为r9b,报出了 cannot find -latomic 错误,现在换成了r14b
so文件生成成功,放到了工程的libs/armeabi/目录下
4.java中调用
调用前需要加载库
package com.skymr.learn;public class HelloJni {public static native void sayHello();public native void sayHi();public static native String getName(String name);static{System.loadLibrary("helloJni");}}在Activity中调用
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("aaaa", "jni output: " + HelloJni.getName("a")); }}
5,测试
阅读全文
0 0
- Android App中通过JNI调用C/C++代码
- Android App中通过JNI调用C/C++代码(二)
- android中如何通过jni调用c,c++代码
- 通过JNI接口在Android中调用C/C++代码
- android实现app通过jni调用C/C++方法
- android实现app通过jni调用C/C++方法
- android通过jni调用C代码socket出错问题
- android 通过JNI调用C/C++代码(linux)
- android通过jni调用C代码socket出错问题
- Android Studio中通过jni实现对C/C++代码的调用,HelloJni,Ubuntu
- Android C 通过JNI 调用JAVA
- 用Android Studio通过Java代码调用C代码的JNI流程
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- Java 通过JNI调用C或者CPP代码
- Java 通过JNI调用C或者CPP代码
- JS点击导航菜单选中效果
- Apache2在ubuntu下多端口设置
- 融云添加百度地图导航
- sax,Dom4j的CURD,xpath
- matlab画图的一些方法
- Android App中通过JNI调用C/C++代码
- remove-duplicates-from-sorted-array-ii
- 我就要找不同
- Netty编解码框架:Java序列化、Protobuf、 Marshalling
- MainActivity
- 【python Django】django入门教程1
- [PAT]1017. Queueing at Bank (25)@Java
- 别磨叽,学完这篇你也是图像识别专家了
- 支持向量机通俗导论(理解SVM的三层境界)