NDK开发之Application.mk文件详解

做过NDK开发的同学应该都知道有个Application.mk文件,这是android NDK构建系统使用的一个可选构建文件。它的目的是描述应用程序需要哪些模块,也定义了所有模块的一些通用变量。主要有以下几个变量。



APP_MODULES,默认情况下,ndk会构建在android.xk文件中声明的所有模块。但是这个变量可是覆盖上述行为。

假如我们的android.mk文件是这样的:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := jni1
LOCAL_SRC_FILES := jni1.c

include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)

LOCAL_MODULE    := jni2
LOCAL_SRC_FILES := jni2.c

include $(BUILD_SHARED_LIBRARY)

application.mk文件是这样的:

APP_MODULES := jni1

那么系统只会生成libjni1.so文件,而不会生成libjni2.so文件。如果要生成libjni2.so,那么我们可以这样:

APP_MODULES := jni1 jni2


APP_OPTIM:该变量可以被设置为release或者debug,这样可以改变生成的二进制文件的优化级别。默认情况下是release模式。此时生成的二进制文件被高度优化。如果需要调试的话我们最好还是设置为debug模式。



APP_CLAGS:该变量列出了一些编译器标志,在编译任何模块的C或者C++代码时这些标志都会被传给编译器。



APP_CPPFLAGS:该变量列出了一些编译器标志,在编译任何模块的C++代码时这些标志都会被传给编译器。



APP_ABI:默认情况下,ndk构建系统为armeabi,ABI生成二进制文件,该变量可以改变上述行为:

APP_ABI := armeabi armeabi-v7a x86

如果要为所有支持的ABI生成二进制文件:

APP_ABI := all


APP_STL:默认情况下,ndk构建系统使用最小的stl运行库,也被称为system库,该变量可以改变上述行为。



APP_GUNSTL_FORCE_CPP_FEATURES:表明所有的模块都依赖于具体的C++特性,与LOCAL_CPP_EXTENSIONS类似。



APP_SHORT_COMMANDS:该变量使得构建系统在有大量源文件的情况下可以在项目中使用更短的命令。与LOCAL_SHORT_COMMANDS类似。


版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

时间: 2024-10-15 15:33:57

NDK开发之Application.mk文件详解的相关文章

Android.mk文件详解(转)

源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真正的Makefile包装起来,做成了一个对使用者来说很简单的东西.使用它来编译程序时,不管是动态库.可执行的二进制文件,还是Jar库.APK包,只要沿着一个简单的思路来做三大步就可以了:清除旧变量,设置新变量,调用编译函数. 明白了以后,发现Makefile语法不是问题,有很多教程和高手.编译模块时

Android NDK开发指南---Application.mk文件和android.mk文件

https://android.googlesource.com/platform/development/+/donut-release/ndk/docs/OVERVIEW.TXT https://android.googlesource.com/platform/ndk/+/4e159d95ebf23b5f72bb707b0cb1518ef96b3d03/docs/ANDROID-MK.TXT https://android.googlesource.com/platform/ndk/+/4

Android.mk文件详解

Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 因为所有的编译文件都在同一个 GNU MAKE 执行环境中进行执行,而Android.mk中所有的变量都是全局的.因此,您应尽量少声明变量,不要认为某些变量在解析过程中不会被定义. 一个Android.mk文件可以编译多个模块,每个模块属下列类型之一: 1)APK程序 一般的Android程序,编译打包生成apk文件 2)JAVA库 java类库,编译打包生成jar文件 3)C\C++应用程序 可

macOS开发之NSTableView的应用详解 - 转

传送门:https://my.oschina.net/u/2340880/blog/886861 摘要: NSTableView是AppKit中的表视图控件,是macOS开发中非常重要的一种视图控件.熟练应用NSTableView控件对mac软件开发十分重要. NSTableView的应用详解 一.引言 和iOS开发中的UITableView有很大差别,NSTableView并非是一个可滚动的列表视图,其是一个不可滚动.支持多列多行的原始列表视图.若要使NSTableView支持滚动,通常会将其

JAVAWEB开发之Maven的入门详解——Maven的安装以及项目的结构和Maven的使用以及私服的搭建与配置

什么是Maven? 翻译为专家,内行.Maven是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,项目管理和项目信息管理.那么怎么样才算是理想的项目构建呢?理想的项目构建就是必须具备高度自动化,跨平台,可重用的组件,标准化这些特性. 什么是依赖?为什么要进行依赖管理? - 所谓的依赖就是自动下载.进行依赖管理主要是为了统一的对这些依赖进行管理. 都有哪些项目信息? -项目名称描述,开发者信息,开发人员信息,项目的版本号等等. 什么项目构建? - 所谓的项目构建就是对项目进行清理.编译

JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)

HttpServletRequest获取请求头信息 (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHeaders(String name) Enumeration<String> getHeaderNames() (2)获取具体类型客户机请求头 int  getIntHead(String name) long getDateHead(String name) 日期对应毫秒 (3)常见的请求头 re

Python开发之virtualenv和virtualenvwrapper详解

在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁. 这里,就要隆重介绍 virtualenv,一个可以帮助我们管理不同 Python 环境的绝好工具. virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境. Linux下安装.配置virtualenv #指定清华源下载pip的包 pi

Android开发之 android:windowSoftInputMode属性详解

android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一]当有焦点产生时,软键盘是隐藏还是显示 [二]是否减少活动主窗口大小以便腾出空间放软键盘 它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合.在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果.各个值之间用|分开.例如:<

jni.h头文件详解(二)

一:struct JNINativeInterface_{} 结构体的作用:它有点像我们char字符驱动的 file_ops结构体,它定义各种函数对在(jni.h头文件详解一)中定义的各种数据的操作函数集体. 二:它包含那些针对Java中类和对象的相关操作呢如下图. 三:下面我们讲详细介绍14个部分方法的用法和解析 3.1.版本信息操作函数. 一.GetVersion jint (JNICALL *GetVersion)(JNIEnv *env) --模块信息:该模块主要针对的JNI接口的版本信