Android NDK 在Linux下使用mk文件生成SO库

背景

最近有一个Linux下的C语言实现的文件操作库需要移植到Android上,而嵌入式的同事直接扔了一堆源码给到我,我一脸懵逼的同时也只能硬着头皮上了

一般我们可以通过在项目中导入C/C++代码,使用AS中的cmake文件编译成so库,但是我这个库里的代码使用在ndk中的stdio库中的文件操作方法总是报错或者编译不通过,于是只能选择在Linux下直接使用ndk编译成so库了

啰嗦的前言说完,开始

一、配置环境
  1. 下载NDK

NDK下载地址:https://developer.android.google.cn/ndk/downloads/

  1. 解压
  2. 添加环境变量

命令行运行

#vim /etc/profile

在文件末尾添加如下内容:

export ANDROID_NDK=“解压的ndk路径”
export PATH=ANDROID_NDK:$PATH

保存退出,更新一下环境变量

source ~/.bashrc

命令行输入命令 ndk-build出现以下字符表示配置成功

Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
二、创建Android.mk、Application.mk,直接编译

此时找到你的C/C++项目下的源码位置,新建Android.mkApplication.mk两个文件

  • Android.mk:
//my-dir宏返回Android.mk所在位置 即将LOCAL_PATH赋值
LOCAL_PATH:=$(call my-dir)
//清理LOCAL_XXX变量的值
include $(CLEAR_VARS)
//模块名字
LOCAL_MODULE := nativeC
//打包给模块的C/C++源码 头文件不用列出 此源文件可以用具体路径表示 用\分隔
LOCAL_SRC_FILES:= xxxx.c \
aaaa.c \
bbbb.c
//编译输出 STATIC为静态库 SHARED为动态库 BUILD_EXECUTABLE为可执行程序
include $(BUILD_SHARED_LIBRARY)
  • Application.mk
//生成4个全部架构的库
APP_ABI := all
//适应Android版本,如果不对这里会报错,可以根据报错更改
APP_PLATFORM := android-16

一般来说,此时在当前目录下运行ndk-build,就会生成libsobj目录,其中libs目录里就是我们可以直接在Android里调用的so库了

如果过程中因为环境变量、JNI路径之类的有问题,我们也可以直接使用脚本文件指定目录

三、使用build.sh脚本编译

继续在当前目录创建build.sh文件,写入

#!/bin/bash
//代码目录,替换为你的目录
PATH=/home/andyxdz/project/lib
//ndk目录,替换为你解压后的ndk目录
NDK=/home/andyxdz/android-ndk-r18b
BUILDER=${NDK}/ndk-build
ABS=${PATH}/Android.mk
NAM=${PATH}/Application.mk

${BUILDER} NDK_PROJECT_PATH=${PATH} APP_BUILD_SCRIPT=${ABS} NDK_APPLICATION_MK=${NAM}

命令行运行./build.sh ,此时同样会生成libsobj目录,其中libs目录里就是我们可以直接在Android里调用的so库了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值