Android Studio NDK环境配置与JNI简单的例子

1 篇文章 0 订阅
1 篇文章 0 订阅

1.Android Studio 配置NDK非常简单,这里简单的介绍使用2.2.2版本配置NDK。

下载NDK,file->setting->Appearance->system Settings->Android SDK->SDK Tools中点击下载即可。如图下图所示:

这里写图片描述

2.新建工程项目,测试jni开发

3.设置支持jni

打开gradle.properties在里面添加android.useDeprecatedNdk=true
在local.properties在里面添加android里面添加
ndk.dir = NDK路径
sdk.dir = SDK路径

ndk.dir=D:\android-ndk-r10e
sdk.dir=E:\AndroidStudio\Android_Sdk

4.在那个module中的build.gradle中的android/defaultConfig下面添加ndk配置

ndk
{
    moduleName "So库的名字"
}

在build.gradle中的android下面添加
sourceSets{
        main{
            jniLibs.srcDirs = ['libs']
        }
    }

5.新建java访问C层的接口类,创建一个Jni的工具类,并定义接口函数,函数关键字使用native。

6.生成头文件,build project 可以在app的build/intermediates/classes/debug中看到编译好的.class源文件。

7.打开终端Terminal 在里面通过命令生成.h文件
cd app/build/intermediates/classes/debug/
javah com.qihancloud.jnidemo.JniUtils(工具类的名称)

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_qihancloud_jnidemo_JniUtils */

#ifndef _Included_com_qihancloud_jnidemo_JniUtils
#define _Included_com_qihancloud_jnidemo_JniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_qihancloud_jnidemo_JniUtils
 * Method:    getStringFromC
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_qihancloud_jnidemo_JniUtils_getStringFromC
  (JNIEnv *, jclass);

/*
 * Class:     com_qihancloud_jnidemo_JniUtils
 * Method:    getAdd
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_qihancloud_jnidemo_JniUtils_getAdd
  (JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

8.在module中的main目录下通过鼠标右键new->folder->jni folder
将编译生成的.h文件拷贝到jni文件下面,新建.c文件

#include "com_qihancloud_jnidemo_JniUtils.h"

JNIEXPORT jstring JNICALL Java_com_qihancloud_jnidemo_JniUtils_getStringFromC
        (JNIEnv *env, jclass) {
    return env->NewStringUTF("Welcome to from C++");
}

JNIEXPORT jint JNICALL Java_com_qihancloud_jnidemo_JniUtils_getAdd
        (JNIEnv *env, jclass obj, jint num1,jint num2) {

    return num1+num2;
}

9.如何生成so文件:
在jni文件夹中新建Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := JniDemo //so库的名字

LOCAL_SRC_FILES := com_qihancloud_jnidemo_JniUtils.cpp

include $(BUILD_SHARED_LIBRARY)

在jni文件家中新建Application.mk文件
APP_STL := gnustl_static

APP_CPPFLAGS := -frtti -fexceptions -std=c++0x

APP_ABI := armeabi-v7a x86 armeabi

APP_PLATFORM := android-18

在Terminal终端中,定位到module所在的目录,命令ndk-build编译会自动生成.so库文件,如下图所示:
这里写图片描述

10.相关的结构目录:
这里写图片描述
11.测试的时候,记得在工具类中添加

static
    {
        System.loadLibrary("JniDemo");
    }

整个工具类代码:

public class JniUtils
{
    public static native String getStringFromC();

    public static native int getAdd(int a,int b);


    static
    {
        System.loadLibrary("JniDemo");
    }
}

12.具体的调用,如下代码所示:

public class MainActivity extends AppCompatActivity
{
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Log.i("Jnidemo", JniUtils.getStringFromC());

        Log.i("Jnidemo", JniUtils.getAdd(3,4) + "");
        textView = (TextView) findViewById(R.id.textview);
        textView.setText(JniUtils.getStringFromC());
    }
}

13.喜欢的朋友欢迎点赞,请大家多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值