在android studio 2.1 实现简单的ndk

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

1, 在Settings->中先下载android ndk
在android studio 2.1 实现简单的ndk_第1张图片
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
在android studio 2.1 实现简单的ndk_第2张图片

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 __cplusplusextern "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路径一样,我的添加后如下:

在android studio 2.1 实现简单的ndk_第3张图片

6,接下来在app module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下
在android studio 2.1 实现简单的ndk_第4张图片

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, 编译运行
在android studio 2.1 实现简单的ndk_第5张图片

更多相关文章

  1. 【转】善用Android预定义样式来为我们的布局设置效果,大大节约代
  2. 布局文件中的笔记
  3. Android 下的图片选择与裁剪开源库
  4. android图片压缩的3种方法实例
  5. 自定义图片点击效果
  6. Android如何代码混淆
  7. android 实用代码片段整理
  8. 【Android 开发】:UI控件之显示图片控件 ImageView 的使用方法

随机推荐

  1. 【转】android常用组件
  2. Android上传图片裁剪功能
  3. Android(安卓)文件打开方式
  4. 如何查看Android设备的CPU架构信息
  5. android 选择图片(从手机照相机或手机图
  6. 转:android 实现 流媒体 播放远程mp3文件
  7. Android源码下载
  8. 阅读《Android(安卓)从入门到精通》(13)—
  9. Android(安卓)动画监听器
  10. DecimalFormat 实现保留小数点位数及四舍