Android Studio下使用JNI编程备忘录
2016-04-05 17:42
561 查看
1、下载安装NDK的过程略过,网上资料很多。
JNI官网规范见 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html
2、修改local.properties
如图,增加ndk路径。
3、修改app/build.gradle
代码如下,defaultConfig中增加ndk,模块名为java类名,abiFilters为底层架构。增加sourceSet。
定义了一个native的函数Display,在C中实现。
5、新建native的.h文件和.cpp文件
h文件,注意文件名要严格按规范,与java类名一致。
6、在Android程序中调用native函数
编译,运行,完成。
JNI官网规范见 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html
2、修改local.properties
如图,增加ndk路径。
3、修改app/build.gradle
代码如下,defaultConfig中增加ndk,模块名为java类名,abiFilters为底层架构。增加sourceSet。
import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "21.1.2" defaultConfig { applicationId "cn.lxg.jniHello" minSdkVersion 12 targetSdkVersion 22 versionCode 1 versionName "1.0" ndk { moduleName "MyNativeMethod" stl "stlport_static" ldLibs "log" abiFilters "armeabi", "armeabi-v7a", "x86" } } buildTypes { debug { // 显示Log buildConfigField "boolean", "LOG_DEBUG", "true" minifyEnabled false shrinkResources true } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }4、新建java class,名字要与gradle中一致
定义了一个native的函数Display,在C中实现。
package cn.lxg.jniHello; /** * Created by 李晓光 on 2016/4/5. * */ public class MyNativeMethod { static { System.loadLibrary("MyNativeMethod"); } public native String DisplayHello(); }
5、新建native的.h文件和.cpp文件
h文件,注意文件名要严格按规范,与java类名一致。
#ifndef _Included_cn_lxg_jniHello_MyNativeMethod #define _Included_cn_lxg_jniHello_MyNativeMethod #ifdef __cplusplus extern "C" { #endif #include <jni.h> #include <android/log.h> #ifndef LOG_TAG #define LOG_TAG "MyNativeMethod" #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) #endif /* * Class: * Method: * Signature: */ JNIEXPORT jstring JNICALL Java_cn_lxg_jniHello_MyNativeMethod_DisplayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endifcpp文件,用了jni的函数生成一个jstring。
#include "cn_lxg_jniHello_MyNativeMethod.h" JNIEXPORT jstring JNICALL Java_cn_lxg_jniHello_MyNativeMethod_DisplayHello (JNIEnv *env, jobject){ LOGE("Hello! This is Lee!"); char cStr[] = "Hello! This is Lee!"; jstring str = env->NewStringUTF(cStr); return str; }
6、在Android程序中调用native函数
编译,运行,完成。
相关文章推荐
- Android触摸事件(一)-AbsTouchEventHandle
- Android源码-Volley
- android中的事件传递机制(1)
- Android语音聊天
- Android音视频录制类MediaRecorder用法举例
- 全面解析Android中对EditText输入实现监听的方法
- 在AndroidStudio中引入ZXing扫描二维码的简单实现
- Cordova android框架详解
- Android使用GridView实现简单的日历
- 如何安装Android Studio
- Android BitmapShader 实战 实现圆形、圆角图片
- Android开源项目分类汇总
- android获得北京时间的源码
- Fresco简介:一个新的Android图片加载库
- Android自定义View之圆形TextView
- Adb connection Error:远程主机强迫关闭了一个现有的连接
- Android Studio 简单串口操作
- Android动态加载—so文件
- android Android-PullToRefresh 下拉刷新
- 使用 CountDownTimer 实现验证码倒计时