Android.mk开发模板

这篇具有很好参考价值的文章主要介绍了Android.mk开发模板。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天简单写了一个 Android.mk 的示例模板,供初学者参考。
本模板主要给大家示例 Android NDK 开发中的如下几个问题:

  1. 如何自动添加需要编译的源文件列表
  2. 如何添加第三方静态库、动态库的依赖
  3. 如何构造一个完整的NDK工程框架

假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这几个第三方库文件,项目包含如下几个模块:algorithm,core,network,utils,tests,每个模块都有若干个.c/.h文件,我们要把整个工程编译为动态库,并通过 native_sdk.c 中的函数向Java层提供调用接口。
那么,我们可以对 Android 工程的 jni 目录,做如下划分:

Android.mk开发模板,android

对应的 Android.mk 文件的写法示例如下:

LOCAL_PATH := $(call my-dir)
3RD_INC_DIR = $(LOCAL_PATH)/3rd/inc
3RD_LIB_DIR = $(LOCAL_PATH)/3rd/libs
 
# Prebuild the 3rd libraries 
 
include $(CLEAR_VARS)
LOCAL_MODULE := math
LOCAL_SRC_FILES := $(3RD_LIB_DIR)/libmath.a
include $(PREBUILT_STATIC_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE := json
LOCAL_SRC_FILES := $(3RD_LIB_DIR)/libjson.a
include $(PREBUILT_STATIC_LIBRARY)
 
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg
LOCAL_SRC_FILES := $(3RD_LIB_DIR)/libffmpeg.so
include $(PREBUILT_SHARED_LIBRARY)
 
# Build native sdk 
 
include $(CLEAR_VARS)    
 
LOCAL_MODULE := native_sdk
 
LOCAL_SRC_FILES := \
    $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/src/algorithm/*.c))  \
    $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/src/core/*.c))  \
    $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/src/network/*.c)) \
    $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/src/utils/*.c)) \
    $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/src/*.c))  
    
LOCAL_C_INCLUDES := $(3RD_INC_DIR)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/src 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/src/algorithm
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/core
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/network
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/utils
 
LOCAL_CFLAGS := -DANDROID                                      
LOCAL_LDLIBS := -llog 
 
LOCAL_STATIC_LIBRARIES := math json
LOCAL_SHARED_LIBRARIES := ffmpeg
 
include $(BUILD_SHARED_LIBRARY)
 
 
# Build tests
 
include $(CLEAR_VARS)    
LOCAL_MODULE := test.out
LOCAL_SRC_FILES := $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/tests/*.c)) 
LOCAL_CFLAGS := -DANDROID 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/src 
LOCAL_LDLIBS := -llog -fPIE -pie
LOCAL_SHARED_LIBRARIES:= native_sdk
include $(BUILD_EXECUTABLE)

对于 Android.mk 而言,如果要依赖第三方库文件,则必须添加 PREBUILT_XXXX_LIBRARY 进行预编译,LOCAL_SRC_FILES 宏给出了需要编译的源文件列表,这里我通过 subst和wildcard 这两个函数,实现了自动扫描指定目录下的源文件,最后,通过 BUILD_EXECUTABLE 编译出可以运行于adb shell命令行的可执行程序,用于做代码的单元测试。文章来源地址https://www.toymoban.com/news/detail-682403.html

到了这里,关于Android.mk开发模板的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android.mk文件解析

    1、LOCAL_PATH 当前模块位置 my_dir 系统提供的宏函数,返回当前文件所在的路径 $(call my_dir) 调用该函数 2、include $(CLEAR_VARS) 清除除了 LOCAL_PATH 变量外的LOCAL_XXX变量 所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局

    2023年04月22日
    浏览(30)
  • AOSP——Android.mk解析

    Android.mk是用于控制Android代码的编译流程,用shell编写 除带#的注释, Android.mk第一句话都是 即将 my-dir方法的返回值赋值给LOCAL_PATH,让其等于当前目录 ,其中的my-dir方法在build/core/defintions.mk中定义,源码如下 接下来是 CLEAR_VARS的值在/build/core/config.mk,源码如下: BUILD_SYSTEM在

    2024年02月09日
    浏览(37)
  • Android.mk 文件使用解析

    和你一起终身学 习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Android.mk 简介 二、Android.mk 的基本格式 三、Android.mk 深入学习一 四、 Android.mk 深入学习二 五、 Android.mk 深入学习三 六、 Android.mk 判断语句 七、参考文献 Android.mk 是Android 提供的

    2024年02月09日
    浏览(38)
  • Android.mk 常用模块类型

    生成的是动态库(.so 文件) 生成的是静态库(.a 文件) 用于编译 Java 代码并生成可执行的 Java 程序(.jar 文件) 用于编译 C/C++ 代码并生成可执行的 C/C++ 程序

    2024年02月02日
    浏览(28)
  • Android.mk和Android.bp的区别和转换详解

    简单的说: Android.mk和Android.bp都是用来编译出类库.jar,应用文件.apk,动态库.so,静态库.a等等作用。 Android.mk就是一个GNU make语法的脚本文件。 Android.bp文件是Android 7.0及更高版本中引入的一种构建脚本文件,是使用Starlark语法编写的,它是一种基于Python的轻量级脚本语言。 他们

    2024年04月28日
    浏览(44)
  • 编写Android.mk / Android.bp 引用三方 jar 包,aar包,so 库

            在Android10之后,所有项目工程中,官方推荐使用Android.bp去编译构建,以前使用Android.mk构建的项目随着版本迭代升级,慢慢需要变更为Android.bp, 两者的语法都需要去了解并熟练使用。 笔者之前写过Android.mk的语句介绍,里面有介绍每句代码的含义编写Android.mk把Andro

    2024年02月06日
    浏览(41)
  • android mk 和 bp 引入三方jar ,aar

    网上有很多关于这方面的介绍,我这边直接上完整的文件,供参考,想用的,直接修改模块名字,就可以使用了,避免踩坑. 1,LOCAL_PATH := $(call my-dir)         这个是固定的一般不需要改.my-dir 返回 Android.mk  文件本身所在的目录 2,LOCAL_MODULE_TAGS := user eng tests optional 这四

    2024年02月20日
    浏览(48)
  • Android.mk中的LOCAL_OVERRIDES_PACKAGES用法

    Android.mk中的LOCAL_OVERRIDES_PACKAGES用法_mk local_over_觅风者的博客-CSDN博客 Android.mk中的LOCAL_OVERRIDES_PACKAGES的用法说明可以参考以下文章: Android.mk覆盖替换LOCAL_OVERRIDES_PACKAGES 此变量可以使其他的模块不加入编译 项目中遇到的问题:修改了devicemstaralmonddevice-common.mk文件,将原生

    2024年02月15日
    浏览(54)
  • (NDK编译)详解使用Android.mk编译的C/C++程序过程

    想要在 Android设备 上运行 C/C++程序 可执行文件,可采用一个方法就是使用 NDK编译 ,很多时候要比 gcc编译 更适合,这里我采用的是 imx6q开发板 上面装载了自己编写的Android6.0.1镜像,在 Ubuntu64位 系统上采用NDK编译。 目录 1.准备文件 2.编写Android.mk 注意 完整Android.mk代码 3.NDK编

    2024年02月05日
    浏览(35)
  • Android 浅度解析:mk预置AAR、SO文件、APP包和签名

    在Android开发中,经常需要使用到第三方库,这些库通常以AAR或JAR的形式提供。在本文中,将详细介绍如何在Android.mk文件中引用AAR文件。 AAR(Android Archive)文件是Android库项目的打包格式,它包含了Java类、资源文件、清单文件和可选的本地库文件。AAR文件是一种方便的方式来

    2024年02月13日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包