NDK入门demo

1、配置NDK路径,右击Module->Open Module Setting->SDK Location->Android NDK Location(ndk根目录)

2.local.properties中配置
ndk.dir=E:\android-ndk64-r10-windows-x86_64\android-ndk-r10

3.创建一个AndroidLibrary

4.在这个module中的build.gradle 里面的defaultConfig中添加:

 ndk{
            moduleName "ndklib"         //生成的so名字,实际为 libndklib.so
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86"  //输出指定三种abi体系结构下的so库
        }

3.创建一个java类

public class MathAdd 
{
    public static native int add(int num1,int num2);
}

4.创建jni目录,默认为src/main/jni

5.在Terminal中,执行javah命令生成.h文件

javah -d ndklib/src/main/jni/ 
-classpath \Users\Mrxingkong\studio\ViewPagerTab1510\Android5_x\ndklib\build\intermediates\classes\debug
 -jni com.zxk.mrxingkong.ndklib.MathAdd

-d . 表示将在当前目录下生成一个当前命令行文件夹,产生的头文件就在这里面了;

-classpath 指明class文件所在的位置(目录)

-jni com.ndkdemo.MathKit 指定类名(包名+指定的类名)

6.在jni中会生成.h文件,该文件文件名可以更改,里面生成内容。

JNIEXPORT jint JNICALL Java_com_zxk_mrxingkong_ndklib_MathAdd_add
  (JNIEnv *, jclass, jint, jint);

7.在jni中创建与.h文件名相同的cpp文件。(最好相同),实现相加。

#include "MathAdd.h"
JNIEXPORT jint JNICALL Java_com_zxk_mrxingkong_ndklib_MathAdd_add
        (JNIEnv *env, jclass jcls, jint num1, jint num2)
{
    return num1 + num2;
}

10.make项目,若是报错。
gradle.properties 中添加:android.useDeprecatedNdk = true

在jni包下面创建util.c的空文件。
再make一遍。

11.Make成功后在/build/intermediates/ndk/debug/lib/下生成4个so文件。
至此,so库创建完成。

以下是对这个库进行引用。
1.copy以上make生成的再lib下的4个文件夹,到新建module的libs下。

2.在新建module的build.grade中添加路径进行libs

 sourceSets.main {
        jniLibs.srcDir 'libs' // <-- 你的.so库的实际路径
    }

3.在module的java包下面创建之前lib创建的类,必须是包名+ 类名(com.zxk.mrxingkong.ndklib.MathAdd)

package com.zxk.mrxingkong.ndklib;

/**
 * Created by Mr.xingkong on 2016/1/20.
 */
public class MathAdd
{
    static {
        System.loadLibrary("ndklib");
    }

    public static native int add(int num1,int num2);
}

至此,工作基本完成,现在可以在MainActivity中调用,点击按钮,toast出结果:

    public void add(View view)
    {
       int result =  MathAdd.add(100, 200);
        Toast.makeText(MainActivity.this,result+ "", Toast.LENGTH_SHORT).show();
    }

描述的有点乱,有空我会再缕缕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值