AndroidStudio下NDK环境设置以及简单示例

要实现JNI编程,首先需要下载NDK,并进行相关的环境配置。

环境配置参考:http://blog.csdn.net/tongseng/article/details/53005123

实例:

1> 新建本地方法

public class MainActivity extends AppCompatActivity {
    private TextView mTextView;

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

        mTextView = (TextView) findViewById(R.id.text);
        mTextView.setText(getStrFromJNI());
    }

    public native String getStrFromJNI();

    //调用生成的库,注意库的名字要和/jni/Android.mk一致
    static {
        System.loadLibrary("demo");
    }
}

2> 编译MainActivity得到头文件

切换到Terminal,进入到MainActivity所在目录下,然后输入命令 “javah -jni -encoding utf-8 包名.类名”。

刷新工程,就可以找到生成的头文件

得到的头文件:

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

#ifndef _Included_com_example_jnitest_MainActivity
#define _Included_com_example_jnitest_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_jnitest_MainActivity
 * Method:    getStrFromJNI
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_jnitest_MainActivity_getStrFromJNI
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

 

3> 编写c文件

切换到Project,然后在app目录下新建jni文件夹,并在里面建立一个demo.cpp的c文件

#include <jni.h>
#include<string.h>
#include"com_example_jnitest_MainActivity.h"
JNIEXPORT jstring JNICALL Java_com_example_jnitest_MainActivity_getStrFromJNI(JNIEnv *env,jobject obj) {
    //c语言写法
    //jstring jstr = (*env) -> NewStringUTF(env, cstr);

    //c++语言写法
    jstring jstr = env -> NewStringUTF("Hello form JNI,just a test!");
    return jstr;
}

3> 添加Android.mk文件

同样在jni目录下新建Android.mk,并编写语法

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# 要生成的so库的名称,但实际为libdemo.so
LOCAL_MODULE := demo
# 要使用的文件,刚才编写的demo.cpp文件
LOCAL_SRC_FILES := demo.cpp
include $(BUILD_SHARED_LIBRARY)

4> 编译生成so库

     将之前生成的头文件复制到/jni下

     切换到Terminal,进入/jni目录,输入命令ndk-build.cmd,编译器会生成对应的库放在/libs目录下

到目前为止,jni的编译就算完成了,在运行程序前,需要检查下面两个配置:

     > 在local.properties中加入(一般情况下已经制动添加):

ndk.dir=E\:\\AndroidStudio\\sdk\\ndk-bundle
sdk.dir=E\:\\AndroidStudio\\sdk

     > 在在app的build.gradle的android节点下添加:

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
}

这样,程序就可以正常运行了。

posted @ 2017-04-09 22:36  小猪阿正  阅读(878)  评论(0编辑  收藏  举报