Android NDK

为保密或提高速度,可使用C/C++实现功能,通过NDK构建代码生成库供Android使用。NDK使用脚本编译,需两个配置文件。例程包含目录结构和编译步骤,成功后生成动态库。还介绍了相关配置文件及JNI接口生成方式,并给出NDK下载等参考链接。

为了保密或者提高运行速度, 我们可以使用c/c++实现功能然后使用NDK构建代码生成库提供给Android使用

首先来看看NDK到底是什么?

Android NDK
Android NDK 是一个工具集    
可让您使用 C 和 C++ 等语言以原生代码实现应用的各个部分    
对于特定类型的应用,这可以帮助您重复使用以这些语言编写的代码库    

NDK在实际使用时是使用ndk-build脚本来进行编译的
ndk-build脚本需要两个配置文件Android.mkApplication.mk
将源码和配置文件放入一个名称为jni的文件夹内,执行ndk-build命令即可

例程

目录结构

demo/
└── jni
    ├── Android.mk            /* ndk-build 配置文件     */
    ├── Application.mk        /* ndk-build 配置文件     */
    ├── com_demo_sumJNI.c     /* 供java调用的接口文件   */
    ├── com_demo_sumJNI.h
    ├── sum.c                 /* 功能函数文件           */
    └── sum.h

执行编译

  1. cd demo
  2. ndk-build
    执行成功后会生成动态库 libsum.so (动态库名字可自己定义)

说明

将功能模块打包成库提供给Android使用,需要使用ndk-build脚本来构建项目

  • ndk-build需要 Android.mkApplication.mk 配置文件
  • c/c++库文件需要提供jni接口给java层调用

sum.c

功能函数

int sum(int a, int b){
    return (a+b);
}

com_demo_sumJNI.c

此文件为jni层,java层必须通过jni才能调用c/c++库
jni接口是通过 javac 生成(jdk10以前的老版本用javah命令)

#include <jni.h>
#include "sum.h"
JNIEXPORT jint JNICALL Java_com_demo_sumJNI_sum
  (JNIEnv *env, jobject thiz, jint a, jint b)
  {
      return sum(a,b);
  }

Android.mk

include $(CLEAR_VARS)		                # 清除LOCAL_PATH以外的变量
LOCAL_MODULE := sum                         # 动态库名称
LOCAL_SRC_FILES := sum.c                    # 源文件
LOCAL_SRC_FILES += com_demo_sumJNI.c
include $(BUILD_SHARED_LIBRARY)             # 生成动态库

Application.mk

APP_ABI := armeabi-v7a arm64-v8a            # 待生成的目标平台
APP_PLATFORM := android-16                  # Android API 级别, 最低支持的级别

参考
NDK下载 https://developer.android.google.cn/ndk/downloads
NDK官方手册 https://developer.android.google.cn/ndk/guides
NDK官方Demo https://github.com/android/ndk-samples/tree/master
JNI官方说明https://docs.oracle.com/en/java/javase/14/docs/specs/jni/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值