Android技术知识app开发

安装和简单使用NDK

2016-07-31  本文已影响73人  i冰点

1、什么是NDK?

JNI是为了方便Java调用C、C++等本地代码而封装的一层接口。NDK是一个工具集合,调用NDK可以很方便的使用JNI。

2、在Android Studio中配置

    1、下载NDK:https://developer.android.com/ndk/downloads/index.html

    2、配置PATH=F:\li_yi\tools\Android\android-ndk-r12b

    3、在AS中关联NDK,ndk.dir=F:\li_yi\tools\Android\android-ndk-r12b

3、NDK开发

1、新建一个类,增加native方法:

    public class NDKTest {

        public native String getTestStr();

    }

2、得到.h文件

    2.1、执行build---make project,会得到一个class文件

     (在XXX\app\build\intermediates\classes\debug\com\liyi\jnitest目录下)。

    2.2、点开AS的Terminal标签,

        进入到XXX\app\build\intermediates\classes\debug目录下(cd 命令),

        执行javah命令生成h文件:

            javah -jni com.liyi.jnitest.NDKTest

    2.3、在main目录下新建一个jni目录,剪切该文件到改目录下。

    .h文件:

    #include"com_liyi_jnitest_NDKTest.h"

    JNIEXPORT jstring JNICALL Java_com_liyi_jnitest_NDKTest_getTestStr

    (JNIEnv *env,jobject obj){

    return(*env)->NewStringUTF(env,

        "Java_com_liyi_jnitest_NDKTest_getTestStr!");

    }

3、新建一个c文件,实现在DNKTest中定义的native方法

    #include "com_liyi_jnitest_NDKTest.h"

    JNIEXPORT jstring JNICALL Java_com_liyi_jnitest_NDKTest_getTestStr

    (JNIEnv *env, jobject obj){

    return (*env)->NewStringUTF(env,

        "Java_com_liyi_jnitest_NDKTest_getTestStr!");

    }

4、在app module目录下的build.gradle中设置库文件名(生成的so文件名)

    defaultConfig {

    ......

    ndk{

    moduleName "NDKTest"        //生成的so名字

    //输出指定三种abi体系结构下的so库。目前可有可无。

    abiFilters "armeabi", "armeabi-v7a", "x86"  

    }

5、在NDKTest中,静态初始化load代码,

    static {

        System.loadLibrary("NativeExample"); 

    }

6、打开Project的gradle.properties文件,添加

        android.useDeprecatedNdk=true

7、同步操作:

    Tools->Android->Sync Project with Gradle Files

8、生成SO文件:Build->Rebuild Project

    在项目的app\build\intermediates\ndk\debug\lib路径下生成SO文件

9、使用生成SO文件:

    在jnitest\src\main下新建文件夹jniLibs,并将生成的SO文件拷贝到该文件夹下。

代码:

http://download.csdn.net/detail/le_shuo/9591352

参考:

http://blog.csdn.net/krubo1/article/details/50547681

http://blog.csdn.net/yanbober/article/details/45309049/

上一篇下一篇

猜你喜欢

热点阅读