进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C 、C++ 写的,那么在 Android 中怎么调用底层的库呢?这里就需要了解 JNI 技术。

Android Studio 出来两年多了,网上针对 AS 开发 JNI 工程资源比较少,针对于此,我特意写下本篇博客,希望能对大家有所帮助。

配置环境

  • 下载NDK 请点击这里 ,并进行环境配置,如图:

  • 项目关联NDK ,具体操作如图:

右键你的工程项目,选择 【Open Module Settings】

在 【Android NDK location】配置 NDK 的按着目录:

Android Studio JNI 开发简单案例_第1张图片

最后在 项目根目录 【gradle.properties】 下加上:

android.useDeprecatedNdk=true

如图:

JNI实现

新建 JNI_DEMO 项目,完成以上的配置工作。我的项目路径为:D:\Android_Study_Demos\JNI_DEMO

生成 .h 文件

新建TestJNI

public class TestJNI {   public native String HelloWord(String str);}

Android Studio JNI 开发简单案例_第2张图片

cmd命令下面,cdjava目录,输入javah -jni com.github.jni_demo.TestJNI命令,生成 .h 文件:

注意:com.github.jni_demo.TestJNI 不能 cd com , cd github……否则编译不成功。

你会发现在你的java路劲下生成了com_github_jni_demo_TestJNI.h文件:

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_github_jni_demo_TestJNI */#ifndef _Included_com_github_jni_demo_TestJNI#define _Included_com_github_jni_demo_TestJNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_github_jni_demo_TestJNI * Method: HelloWord * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord  (JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif

然后右键 app >New> Folder > JNI Folder 生成jni目录如图:

Android Studio JNI 开发简单案例_第3张图片

然后拷贝com_github_jni_demo_TestJNI.hjni目录下面:

Android Studio JNI 开发简单案例_第4张图片

生成 .C 文件

右键jni,生成com_github_jni_demo_TestJNI.cpp文件:

Android Studio JNI 开发简单案例_第5张图片

拷贝以下代码到 .cpp 文件中:

#include <stdio.h>#include <stdlib.h>#include "com_github_jni_demo_TestJNI.h"JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord        (JNIEnv *env, jobject, jstring str) {    return str;}

build.gradle 配置 ndk

defaultConfig节点下加入如下代码:

        ndk {            moduleName "TestJNI"            abiFilters "armeabi", "armeabi-v7a", "x86"        }

点击 Build > Make Project 如图:

Android Studio JNI 开发简单案例_第6张图片

编译成功后,打开 build > intermediates > ndk > debug > lib 下查看生成的 .so 文件:

Java中调用JNI

记得把生成的 .so 文件拷贝到项目的 libs 目录下:

Android Studio JNI 开发简单案例_第7张图片

接着在Java中调用JNI

package com.github.jni_demo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class MainActivity extends AppCompatActivity {    static {        // 加载动态库        System.loadLibrary("TestJNI");    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TestJNI  testJNI=new TestJNI();        Log.e("---------------","************"+testJNI.HelloWord("恭喜你,调用成功!"));    }}

jni

这样你就生成了一个属于自己的 .so 文件。

更多相关文章

  1. android webview处理h5打开本地文件浏览器的功能
  2. 【Android 工具】Android 点9图片制作及讲解
  3. Android–多线程之Handler下载图片源码
  4. android系统文件的权限
  5. Android通知MediaScanner扫描指定的文件
  6. android中XML文件系列(一)—Drawable中的XML
  7. android XMLPullParser读取xml文件

随机推荐

  1. android 输入系统
  2. Android(安卓)shape使用
  3. 《第一行代码——Android》
  4. Android(安卓)开发环境安装 新版本Androi
  5. android 的权限
  6. Android获取其他包的Context实例
  7. Android中的线程
  8. android 背景圆角以及图片圆角处理
  9. android shape的使用
  10. android xml解析