ubuntu搭建Android NDK环境与Android Studio简单使用NDK
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方法。
运行项目即可看到效果
更多相关文章
- AndroidManifest.xml文件剖析 (二)
- 在android中显示网络图片及查看页面源代码
- android之调用webservice实现图片上传
- android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M
- android学习笔记(1)---搭建开发环境
- Untity3D项目调用Android 图片错乱问题