Android Studio环境下ndk开发实例

来源:互联网 发布:adobe prelude什么软件 编辑:程序博客网 时间:2024/05/16 07:30

最近发现在博客上看大牛们的文章,跟着去学习理解是一种不错的学习方式。于是乎,自己也尝试着把会用的一些小功能做成Demo发文,可以增强梳理自己编写过程中的逻辑,很方便快捷的记录下来思考的过程,还能和大家互相交流共同进步。
今天把Android Studio如何进行ndk开发的过程记录下来,大家一起学习,写的不好,希望诸位不要介怀。

1、确认本机已配置好Android Studio上面的ndk开发环境。
查看方式File-Settings-Plugins如下图:
这里写图片描述
如果你的Android Studio还没有配置ndk环境,但是Android Studio版本高于2.2,那么可以直接通过android studio下载。如果你还没有配置ndk环境,那也不要紧通过以下链接就可以下载到官方的ndk。

https://dl.google.com/android/repository/android-ndk-r13b-windows-x86.zip
https://dl.google.com/android/repository/android-ndk-r13b-windows-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r13b-darwin-x86_64.zip
https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip

下载后按照下图配置ndk路径即可。
这里写图片描述

2、新建一个普通的Android项目,这里我新建的项目名称为“JniNdkProject”;

3、创建JniUtils类,并在类中写一个native方法,如下图:
这里写图片描述

4、通过build ——clean —— rebuild project编译现有程序,如图

这里写图片描述

确认..\JniNdkProject\app\build\intermediates\classes目录下生成了“classes”文件夹,没有生成则重新chean——rebuild一遍。
这里写图片描述

5、打开Terminal,并输入如下指令

指令:

a. cd E:\projects\JniNdkProject\app\build\intermediates\classes\debug
b. javah -jni com.record2text.vitospc.jnindkproject.ndk.JniUtils

这里写图片描述

指令成功执行后会在E:\projects\JniNdkProject\app\build\intermediates\classes\debug目录下生成一个.h文件com_record2text_vitospc_jnindkproject_ndk_JniUtils.h
这里写图片描述

6、新建jni文件夹将com_record2text_vitospc_jnindkproject_ndk_JniUtils.h移动到jni文件夹下
这里写图片描述

7、在jni目录下新建一个c类“JniNdkTest.c”,并编写代码

// * @author 马文涛 技术群:317922608#include "com_record2text_vitospc_jnindkproject_ndk_JniUtils.h"/* * Class:     com_record2text_vitospc_jnindkproject_ndk_JniUtils * Method:    getValueFromC * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_record2text_vitospc_jnindkproject_ndk_JniUtils_getValueFromC        (JNIEnv *env, jobject obj){    return(*env)->NewStringUTF(env,"This Is Value From C ! \n 这是来自C的字符");}

如图

这里写图片描述

8、在gradle.properties文件末尾加上android.useDeprecatedNdk=true
9、在..app/build.gradle文件中,defaultConfig的括号内添加以下代码:

        ndk{            moduleName "JniNdkTest"  //c语言编辑后生成的so文件的名称            abiFilters "armeabi","armeabi-v7a","x86"  //输出指定三种abi体系结构下的so库,目前可有可无。        }

10、在JniUtils中添加以下代码

public class JniUtils {    static {        System.loadLibrary("JniNdkTest"); //必须与build.gradle中的so文件名称保持一直    }    public static native String getValueFromC();}

11、在MainActivity中调用JniUtils中的native方法,调用的代码如下:

        mNdkTextView = (TextView) findViewById(R.id.ndk_text_view);        mNdkTextView.setText(JniUtils.getValueFromC());

12、发现程序报出异常如图:
这里写图片描述
不用担心,只要删除..\projects\JniNdkProject\app\build\intermediates\classes目录下的debug文件夹即可。
13、build然后运行程序,运行结果如下:
这里写图片描述

源码链接http://download.csdn.net/detail/laker10070/9735935
* @author 马文涛 技术群:317922608 小弟初来乍到,希望大家多多帮助,共同进步。

0 0
原创粉丝点击