android studio下第一个ndk程序

1.安装ndk

               下载一个android-ndk-r10e-windows-x86.exe文件,运行后会在选定目录下产生一个文件夹,就是ndk所在目录了。

2.配置ndk

                 file>project structure>SDk location>Android ndk location>选择ndk目录即可。这样之后在local.properties文件中可以看到ndk目录,当然可以直接在这个文件下设置目录,效果是一样的。

 3.编写jni的java类

                 在src目录下新建jni目录,jni下新建文件MathKit.java

public class MathKit {
    public static native int square(int num);

    static {
        System.loadLibrary("JniDemo");
    }
}

这里有必要解释一下System.loadLibrary("JniDemo");,

需要在defaultConfig中添加如下代码:

ndk{
    moduleName "JniDemo"
}

目的是指定生成的so文件(C库)的名称,然后在java文件中加载这个so文件(C库)。

so文件位置如下:E:\Android\workSpace\ListenForUninstall\app\build\intermediates\ndk\debug\lib\arm64-v8a\libJniDemo.so

,切换到project视图查看。

同时记得在工程目录下的gradle.properties文件中写入下面这行: 

android.useDeprecatedNdk=true 

4.生成.h文件

cmd下运行如下命令 javah -jni (加上java类的目录)

 这样就会生成头文件。

5.在main目录新建jni目录,把产生的头文件拷贝进去

6.在main/jni目录下新建对应的cpp文件(文件名和头文件一样),实现java类中定义的square函数

#include <jni_Mathkit.h>
#include "../../../../../../../SdkandNdk/android-ndk-r10e/platforms/android-21/arch-arm/usr/include/jni.h"

JNIEXPORT jint JNICALL Java_jni_MathKit_square
        (JNIEnv *env, jclass cls, jint num)
{
    return num*num;
}

这个cpp文件有必要解释一下内容,这个函数返回类型是jint(整形类型),参数是num,计算num的平方并返回。方法名称格式如下:

Java_包_类_函数名(注意包的.号改成-下划线,比如本例中jni.MathKit要写成jni_MathKit)。

8.在activity中调用square函数。

Log.i("", ""+MathKit.square(2));

至此结束

猜你喜欢

转载自2723364262.iteye.com/blog/2299817