在android studio 2.1 实现简单的ndk

在android studio 2.1 实现简单的ndk

我从这里参考的,然后自己琢磨好久才自己实现了。第一次玩这个!!!
http://blog.csdn.net/yanbober/article/details/45309049

1, 在Settings->中先下载android ndk
这里写图片描述
2,创建NdkJniUtils类

package com.example.edu.ndktest;

/**
 * Created by Administrator on 2016/4/27.
 */
public class NdkJniUtils {

    public native String getCLanguageString();

}

3.然后build project得到其中中间文件,我们关注的是.class文件。编译OK以后生成的class文件在AS工程的如下目录:
NdkTEST\app\build\intermediates\classes\debug
这里写图片描述

4,点开AS的Terminal标签,(view->tool windows->Terminal) 输入命令:

cd app\build\intermediates\classes\debug

然后执行如下javah命令生成h文件。

javah -jni com.example.edu.ndktest.NdkJniUtils

执行完之后你可以在文件夹NdkTest\app\build\intermediates\classes\debug下看见生成的 .h头文件为:
其内容为:

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

#ifndef _Included_com_example_edu_ndktest_NdkJniUtils
#define _Included_com_example_edu_ndktest_NdkJniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_edu_ndktest_NdkJniUtils
 * Method:    getCLanguageString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_edu_ndktest_NdkJniUtils_getCLanguageString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

在工程的main目录下新建一个名字为jni的目录,然后将刚才的 .h文件剪切过来。在jni目录下新建一个c文件,随意取名,我的叫jnitest.c 。然后编辑代码如下

//
// Created by Administrator on 2016/4/27.
//

#include "com_example_edu_ndktest_NdkJniUtils.h"
/*
 * Class:     com_example_edu_ndktest_NdkJniUtils
 * Method:    getCLanguageString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_edu_ndktest_NdkJniUtils_getCLanguageString
  (JNIEnv *env, jobject obj){
     return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!");
  }

5.接下来在工程的local.properties文件中添加NDK路径(上面下载好的那个NDK),类似其中的SDK路径一样,我的添加后如下:

这里写图片描述

6,接下来在app module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下
这里写图片描述

7,现在生成的so库名字也有了,那就去代码的NdkJniUtils Java文件添加静态初始化load代码,添加如下:

static {
        System.loadLibrary("YanboberJniLibName");   //defaultConfig.ndk.moduleName
    }

8,编写MainActivity类

package com.example.edu.ndktest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView mTextView;

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

        mTextView = (TextView) this.findViewById(R.id.text);

        NdkJniUtils jni = new NdkJniUtils();

        mTextView.setText(jni.getCLanguageString());
    }
}

9, 编译运行
这里写图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值