Android JNI是什么,别说你不知道,不知道的自行百度或者谷歌,这里不解释。由于谷歌力推AndroidStudio,所以这里主要以AndroidStudio为主进行讲解。

1、新建Android工程

1.1 、在项目根目录中的 gradle.properties 文件中增加

android.useDeprecatedNdk=true

1.2 、打开APP module中的 build.gradle,
增加代码到defaultConfig中

defaultConfig {    applicationId “***********”    minSdkVersion 14    targetSdkVersion 23    versionCode 1    versionName "1.0"    ndk {        moduleName "hello-jni"   // 生成库的名称 默认前面会加 lib  ( libhello-jni.so )    }}
2、新建一个类

2.1、编写native方法

static {        System.loadLibrary("hello-jni");    }    public native String  stringFromJNI();

2.2、新建jni目录,如下图:

屏幕快照 2016-09-08 17.59.51.png

2.2、点击AndroidStudio中 build -> make project

2.3、在 app/build/intermediates/classes/debug/… 路径找到 类.class(…为包名+类名)

2.4、生成头文件
在 Terminal 窗口中执行

javah -d [output目录] -classpath ./app/build/intermediates/classes/debug/ [包+类]

-d 后面的目录是生成 文件目录(指定到新建的jni目录)
-classpath 后面的目录是编译class目录
生成的头文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class com_eson_hello_jni_JniUtil */#ifndef _Included_com_eson_hello_jni_JniUtil#define _Included_com_eson_hello_jni_JniUtil#ifdef __cplusplusextern "C" {#endif/* * Class:     com_eson_hello_jni_JniUtil * Method:    stringFromJNI * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_eson_hello_jni_JniUtil_stringFromJNI  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
3、在生成的jni目录中编写c文件代码

3.1、在jni目录,右键->New->C/C++ Source File
3.2 、编写代码:

#include "com_eson_hello_jni_JniUtil.h"JNIEXPORT jstring JNICALL Java_com_eson_hello_jni_JniUtil_stringFromJNI        (JNIEnv *env, jobject thiz) {#if defined(__arm__)#if defined(__ARM_ARCH_7A__)#if defined(__ARM_NEON__)#if defined(__ARM_PCS_VFP)#define ABI "armeabi-v7a/NEON (hard-float)"#else#define ABI "armeabi-v7a/NEON"#endif#else#if defined(__ARM_PCS_VFP)#define ABI "armeabi-v7a (hard-float)"#else#define ABI "armeabi-v7a"#endif#endif#else#define ABI "armeabi"#endif#elif defined(__i386__)#define ABI "x86"#elif defined(__x86_64__)#define ABI "x86_64"#elif defined(__mips64)  /* mips64el-* toolchain defines __mips__ too */#define ABI "mips64"#elif defined(__mips__)#define ABI "mips"#elif defined(__aarch64__)#define ABI "arm64-v8a"#else#define ABI "unknown"#endif    return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI " ABI ".");}

这里直接拷贝的ndk-samples里面hello-jni的源码。

4、调用
public class HelloJni extends AppCompatActivity {    /**     * Called when the activity is first created.     */    JniUtil jniUtil = new JniUtil();    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        /* Create a TextView and set its content.         * the text is retrieved by calling a nativecd         * function.         */        TextView tv = new TextView(this);        tv.setText(jniUtil.stringFromJNI());        setContentView(tv);    }}
5、运行代码

运行之后会在手机屏幕显示出“Hello from JNI ! Compiled with ABI armeabi”等。

到此,我们第一个jni项目完成了。

更多相关文章

  1. Android(安卓)知识体系学习目录
  2. android 6.0 权限崩溃分析:android.system.ErrnoException: statv
  3. Android代码混淆与加固技术一
  4. Android(安卓)Studio一些使用快捷键
  5. Android中存储目录
  6. Android(安卓)studio 为项目添加启动等待界面
  7. android 如何快速生成jar包
  8. android Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORD
  9. 利用 Android(安卓)Systrace 做performance 分析

随机推荐

  1. Android线程优先级规定及其设置的具体方
  2. Windows及Android倍速播放视频软件下载
  3. Android中pendingIntent的深入理解
  4. Android(安卓)NDK开发之旅38--FFmpeg视频
  5. Android(安卓)ContentProvider基础
  6. Android(安卓)利用 Webservice 获取手机
  7. Android(安卓)性能优化:多线程
  8. AndroidPN真机环境测试
  9. android 动画 ——视图动画(View Animati
  10. AndroidStudio快捷键整理--3