使用NDK在Android中应用C/C++代码

本文详细介绍了如何在Android Studio中使用NDK集成C/C++代码,从环境配置到创建工程、编写JNI文件,再到生成动态库和运行结果,通过实例一步步解析NDK与JNI的关系及其应用。
摘要由CSDN通过智能技术生成

概念

原生开发工具包(英语:native development kit,简称NDK)是一种基于原生程序接口的软件开发工具。通过此工具开发的程序直接以本地语言运行,而非虚拟机。因此只有java等基于虚拟机运行的语言的程序才会有原生开发工具包。
NDK帮助开发者快速地开发C(或C++)的动态库,自动将so和java应用一起打包到Apk
NDK提供工具以便JNI调用C/C++,而且提供了交叉编译器(交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。)可以修改.mk文件生成特定CPU平台的动态库。

NDK和JNI的关系

简单说就是JNI负责Java与C/C++进行互相操作,NDK提供工具方便在Android平台使用JNI。

通过实例了解NDK的用法

环境要求

1.Android studio3.X(老版本操作不太一样)
2.AS里安装安卓虚拟机
3.jdk配置

正式开始

1.建立一个空的安卓工程

在这里插入图片描述

2.安装NDK

选择File->project Structure->SDK Location->Android NDK location
两种安装方式
1.官网下载,在这里填写路径
2.没安装的情况下这里会有一个蓝色的download点击自动安装最新版本
在这里插入图片描述
这里安装完local.properties里会自动加上路径
手动在gradle.properties里面加上:

android.useDeprecatedNdk=true

(新版本好像不用加,不过建议加一下,最多警告一下弃用)

3.新建jni类,依次点击app–>src–>main–>java–>com.example.myapplication新建一个java类

(创建出来是.class结尾的我这里是已经ndk-build后的)
在这里插入图片描述
代码如下:

package com.example.myapplication;
public class JNITest {
   
    JNITest(){
   
        System.loadLibrary("JniLib");
    }//加载动态链接库,名字要与后面建的一致
    public native String getString();
    //这个方法后面在C里面实现
}

4.在main下建一个jni文件夹来放.h头文件

在这里插入图片描述

5.建立头文件

alt+f12进入终端,直接是你的工程目录cd app/src/main
javac 命令生成.h头文件的格式为:

javac -encoding utf8 -h 目标文件夹  源文件夹

以我的为例

javac -encoding utf8 -h .\jni .\java\com\example\example\JNITest.java

然后就会发现生成了头文件
在这里插入图片描述
文件内容如下:(这个是自动生成的不用改)

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_myapplication_JNITest */

#ifndef _Included_com_example_myapplication_JNITest
#define _Included_com_example_myapplication_JNITest
#ifdef __cplusplus
extern "C" {
   
#endif
/*
 * Class:     com_example_myapplication_JNITest
 * Method:    getString
 * Si
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值