Android studio配置NDK

本文详细介绍了一个从零开始的Android JNI开发流程,包括NDK安装、环境配置、JNI接口定义及实现、so库编译和加载等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android开发在对接一些三方功能或者算法时,常常涉及JNI的开发,一般只需要把so文件放入指定目录,然后写好对接接口,load入so库,就可以使用了。但在AS自己搞的时候,发现对JNI开发的步骤还是有点生疏,以此文记录下整个配置过程。

1.NDK的安装,NDK是JNI开发的工具,可以上Google官网下载,也可以直接在AS里下载,如下图,在SDK tools里勾选后直接apply,就开始下载了,过程比较久,耐心等待,下载完成后在SDK路径下会有个NDK的文件。


2.下载完NDK,需要在AS里配置NDK的路径,这个跟配置SDK路径一样:


3.配置NDK环境变量。为了方便使用,将NDK的路径配置到环境变量中,然后启动命令行,输入ndk-build,如下显示,则NDK安装成功且环境变量已经配置好了。

4.新建一个demo项目jnidemo来记录JNI开发流程,项目创建完毕,打开gradle.properties文件,输入android.useDeprecatedDdk=true,否者后面编译时会提示相关错误。

5.在包名下新建一个JniUtil.java文件,

package com.example.mr5.jnidemo;

public class JniUtil {
    static {
        System.loadLibrary("jnidemo");//名字必须和build.gradle中的moduleName一致
    }
    public static native String sayHello();
}

用AS自带的命令行,进入到项目文件夹目录,输入命令 javac JniUtil.java,将java文件编译成.class文件:


6.输入命令javah -jni com.example.mr5.jnidemo.JniUtil    (包名+类名)

如果报找不到该类的错误,用javah -classpath . -jni com.example.mr5.jnidemo.JniUtil。

此命令将生成与JniUtil类对应的.h文件。成功后将在包目录下生成一个com_example_mr5_jnidemo_JniUtil.h文件。



7.新建一个jni文件夹,将刚刚生产的.h文件剪切到jni文件夹下面,并创建一个C/C++文件hello.c。


hello.c的方法名必须跟.h文件中的方法名一致。这里的方法内容返回“HelloWorld!”


8.配置gradle,打开app的gradle,在defaultConfig下面加入NDK的编译配置,这里的moduleName跟loadLibrary的时候用的名字必须相同:


9.Build——>Make Project,运行完成后,文件目录切换成Project,可以看到生成了对应cpu类型的so库:


10.app中调用jni方法:

package com.example.mr5.jnidemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.text);
        textView.setText(JniUtil.sayHello());

    }
}
运行结果如下:


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值