NDK下载、安装

官网下载地址:https://developer.android.com/ndk/downloads/index.html
也可以去这里下载:http://www.androiddevtools.cn/
选择Linux版本即可。

解压缩下载得到的压缩包,移动到想要放置的位置。
我放在home/Android文件夹下

打开终端,输入gedit ~/.bashrc 打开配置文件,添加如下环境变量

export NDK_HOME=/home/sxy/Android/android-ndk-r13bexport PATH=$PATH:${NDK_HOME}

保存退出,输入source ~/.bashrc 使之生效。

在Android Studio中使用NDK

在android studio中新建工程NDKDemo,然后在工程下新建一个module作为ndk库文件。我这里取名ndklibrary

在ndklibrary的src/main/java下新建java文件JNIUtils,并添加代码

package com.sxy.ndklibrary;/** * Created by sxy on 17-3-4. */public class JNIUtils {    static {        System.loadLibrary("NDKLibrary");    }    public static native String getStringFromNative();}

点击Build –> Make Module ‘ndklibrary’
编译成功后会在ndklibrary/build/classes/debug/com/sxy/ndklibrary下生成JNIUtils.class文件。

点击View –> Tool Windows –> Terminal,打开Android Studio中的Terminal 命令行工具。
把路径跳转至ndklibrary/src/main目录下。使用javah命令生成.h头文件。

sxy@sxy-ThinkPad-E560:~/AndroidStudioProjects/NDKDemo$ cd ndklibrary/src/mainsxy@sxy-ThinkPad-E560:~/AndroidStudioProjects/NDKDemo/ndklibrary/src/main$  javah -d jni -classpath ../../build/intermediates/classes/debug com.sxy.ndklibrary.JNIUtils

命令执行成功后会在main文件夹下生产jni文件夹,里面有生成的头文件com_sxy_ndklibrary_JNIUtils.h

在jni文件夹下新建com_sxy_ndklibrary_JNIUtils.c文件,用来实现native方法

#include "com_sxy_ndklibrary_JNIUtils.h"/* * Class:     com_sxy_ndklibrary_JNIUtils * Method:    getStringFromNative * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_sxy_ndklibrary_JNIUtils_getStringFromNative  (JNIEnv *env, jclass jobj){        return (*env)->NewStringUTF(env,"this is my JNI!!!!");}

配置NDK

打开项目中的local.properties文件添加NDK路径

ndk.dir=/home/sxy/Android/android-ndk-r13b

打开ndklibrary中的build.gradle,在defaultConfig中添加

ndk {    moduleName "NDKLibrary"    abiFilters "armeabi", "armeabi-v7a", "x86"}

注意:这里的moduleName须跟JNIUtils中System.loadLibrary("NDKLibrary");里的名称相同。

此时编译项目遇到 Error: Your project contains C++ files but it is not using a supported native build system错误,参考http://blog.csdn.net/lanuage/article/details/53072303
在工程目录下的gradle.properties文件的末尾加上一句:Android.useDeprecatedNdk=true 。得以解决。

然后重新编译项目,得到.so文件

打开app的build.gradle文件,在dependencies中写入compile project(':ndklibrary')添加依赖关系。

最后即可在MainActivity中调用native方法。

运行项目即可看到效果

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 2-8 Android(安卓)简单介绍 (一)
  4. SE for Android(安卓)系列之整体概要(三)
  5. AndroidManifest.xml文件剖析 (二)
  6. Android(安卓)TensorFlow 智能语音识别
  7. Android(安卓)AndroidManifest.xml文件的android:supportsRtl属
  8. Android的多媒体框架OpenCore(PacketVideo)介绍
  9. android屏幕适配,自动生成不同的dimens.xml详解

随机推荐

  1. android摄像头获取图像——第三弹
  2. Android(安卓)打包之三配置文件
  3. LAYOUT SHOW
  4. Android库so文件及skia函数的调用
  5. Android(安卓)SDK文档离线打开慢问题
  6. .net程序员转战android第二篇---牛刀小试
  7. 解读新一代岗位要求(一) ----------------A
  8. Android(安卓)Animation学习笔记
  9. android TextView属性大全
  10. React-Native之android集成支付宝