Android开发之Android.mk模板的实例详解

 更新时间:2017年10月16日 15:48:40   作者:Jhuster  
这篇文章主要介绍了Android开发之Android.mk模板的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

Android开发之Android.mk模板的实例详解

关于Android NDK开发的文章已经比较多了,我的博客中也分享了很多NDK开发相关经验和技巧,今天简单写了一个 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 文件的写法示例如下(注:工程文件可以到我的Github(@Jhuster/Android)中在线查看,也可以在本博文最后的附件中下载):

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命令行的可执行程序,用于做代码的单元测试。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • android通过代码的形式来实现应用程序的方法

    android通过代码的形式来实现应用程序的方法

    因为应用程序的安装与卸载模块在android系统中已经写好了,所以我们只需要激活就行了
    2013-10-10
  • Android 重写ViewGroup 分析onMeasure()和onLayout()方法

    Android 重写ViewGroup 分析onMeasure()和onLayout()方法

    这篇文章主要介绍了Android 重写ViewGroup 分析onMeasure()和onLayout()方法的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android实现消息提醒小红点效果

    Android实现消息提醒小红点效果

    这篇文章主要为大家详细介绍了Android实现消息提醒小红点效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Flutter TV Android端开发技巧详细教程

    Flutter TV Android端开发技巧详细教程

    这篇文章主要为大家介绍了Flutter TV Android端开发技巧详细教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 让Android中RadioGroup不显示在输入法上面的办法

    让Android中RadioGroup不显示在输入法上面的办法

    在Android开发中,发现一个问题,打开输入法导致下面的radioGroup的位置发生了变化,被顶到了输入法的上面,那么该如何解决呢?下面来看看。
    2016-08-08
  • 分享Android中Toast的自定义使用

    分享Android中Toast的自定义使用

    Android中的Toast是一种简易的消息提示框,toast提示框不能被用户点击,toast会根据用户设置的显示时间后自动消失。本文将介绍Toast的自定义使用,下面一起来看看吧。
    2016-08-08
  • Android指纹识别功能

    Android指纹识别功能

    这篇文章主要为大家详细介绍了Android指纹识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • android实现背景音乐播放功能

    android实现背景音乐播放功能

    这篇文章主要为大家详细介绍了android实现背景音乐播放功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Flutter如何保证数据操作原子性详解

    Flutter如何保证数据操作原子性详解

    这篇文章主要给大家介绍了关于Flutter如何保证数据操作原子性的相关资料,文章通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Android返回键功能的实现方法

    Android返回键功能的实现方法

    这篇文章主要介绍了Android返回键功能的实现方法,实例分析了Android返回键的原理与具体的功能实现代码,非常具有实用价值,需要的朋友可以参考下
    2015-02-02

最新评论