美文网首页CollectionAndroid干货Android
Android Studio JNI 开发简单案例

Android Studio JNI 开发简单案例

作者: 文淑 | 来源:发表于2016-12-06 17:16 被阅读793次

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

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

配置环境

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

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

jni

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

jni

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

android.useDeprecatedNdk=true

如图:

jni

JNI实现

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

生成 .h 文件

新建TestJNI

public class TestJNI {

   public native String HelloWord(String str);

}
jni

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

jni

注意: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 __cplusplus
extern "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目录如图:

jni

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

jni

生成 .C 文件

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

jni

拷贝以下代码到 .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 如图:

jni

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

jni

Java中调用JNI

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

jni

接着在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 文件。

源码地址

相关文章

  • Android Studio JNI 开发简单案例

    进程保活,热修复,硬件接入等等都需要底层的支持,而底层代码是 C 、C++ 写的,那么在 Android 中怎么调...

  • JNI&NDK

    参考资料 Android Studio JNI开发入门教程android studio之jni(上)生成so文件编...

  • JNI 入门

    ref: Android Studio开发JNI示例Android NDK 开发(二)JNI 传递参数和返回值An...

  • JNI相关知识点

    1、Android NDK开发:JNI基础篇 2、Android Studio NDK环境配置及JNI使用方法 3...

  • Error:Execution failed for task

    Android studio3.0 开发jni时遇到的Error:Execution failed for tas...

  • 简单的As中NDK demo

    1.AS的NDK Android Studio1.4.x JNI开发基础-基本环境配置 NDK-JNI实战教程(一...

  • Android JNI NDK 开发

    Android 开发过程中必然会涉及 JNI 与 NDK 开发,简单梳理下 JNI 流程 开发环境:Android...

  • Android Studio使用jni、so库

    Android Studio使用jni、so库 在Android Studio1.1之后,AS就已经支持jni和s...

  • Android JNI 开发

    Android studio 开发JNI 现在主要有两个方式:1、自己写 Android.mk / Applic...

  • Android studio下JNI与NDK开发

    Android studio下JNI与NDK开发:(转载) 原文作者:justreadygo 1.下载Ndk并配置...

网友评论

  • cabb5f0b9d2c:关于jni ,大部分人都停留在hello world!
    文淑:@小可飞侠 主学是java,有需求,肯定也会学习c
  • ImmortalZ:我这边在输入javah前需要
    set classpath=D:\***\LearnJNI\app\src\main\java
    这样的命令才行,不然会提示找不到类
    文淑:@ImmortalZ cd到当前的java文件
  • DerserveIt:然后么,没栗子?
    文淑: @DerserveIt 提供了源码下载。。在结尾处
  • Exception_Cui:可以很强势。感谢。
  • 30c413b81fe7:正好有用,感谢

本文标题:Android Studio JNI 开发简单案例

本文链接:https://www.haomeiwen.com/subject/cxprmttx.html