Android.mk文件详解介绍

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

参考:

Android JNI入门第四篇——Android.mk文件分析

深入了解android平台的jni(二)

android编译系统makefile(Android.mk)写法


Android.mk 编译文件是用来向 Android NDK描述你的 C,C++源代码文件的,   这篇文档描

述了它的语法。在阅读下面的内容之前,假定你已经阅读了 docs/OVERVIEW.TXT 文件,了解
了它们的脚色和用途。
一、概述
  一个 Android.mk file 用来向编译系统描述你的源代码。具体来说:
  (1) 该文件是GNU Makefile的一小部分,会被编译系统解析一次或更多次的build系统。
因此,您应尽量减少您声明的变量,不要认为某些变量在解析过程中不会被定义。
  (2)这个文件的语法允许把你的源代码组织成模块,一个模块属下列类型之一:
  1)静态库 
  2)共享库
  且只有共享库将被安装/复制到您的应用软件包,虽然静态库能被用于生成共享库。
  可以在每一个 Android.mk file 中定义一个或多个模块,你也可以在几个模块中使用同一个
源代码文件。
  编译系统为你处理许多细节问题。例如,你不需要在你的 Android.mk 中列出头文件和依
赖文件。NDK 编译系统将会为你自动处理这些问题。这也意味着,在升级 NDK 后,你应该
得到新的 toolchain/platform支持,而且不需要改变你的 Android.mk 文件。
  注意,这个语法同公开发布的 Android平台的开源代码很接近,然而编译系统实现他们的
方式却是不同的,这是故意这样设计的,可以让程序开发人员重用外部库的源代码更容易。
  在描述语法细节之前,咱们来看一个简单的"hello world"的例子,比如,下面的文件:
 sources/helloworld/helloworld.c
 sources/helloworld/Android.mk
 'helloworld.c'是一个 JNI 共享库,实现返回"hello world"字符串的原生方法。相应的
Android.mk 文件会象下面这样:
LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE:= helloworld
 
LOCAL_SRC_FILES := helloworld.c
 
include $(BUILD_SHARED_LIBRARY)
 
  解释一下这几行代码:
  LOCAL_PATH := $(call my-dir)
  一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。
在这个例子中, 宏函数‘my-dir’,  由编译系统提供,用于返回当前路径(即包含Android.mk file
文件的目录)。
 
  include $(CLEAR_VARS)
  CLEAR_VARS 由编译系统提供(可以在 android 安装目录下的/build/core/config.mk 文件看
到其定义,为 CLEAR_VARS:= $(BUILD_SYSTEM)/clear_vars.mk),指定让 GNU MAKEFILE
为你清除许多 LOCAL_XXX 变量 ( 例如 LOCAL_MODULE , LOCAL_SRC_FILES , Android.mk 文档规范 2
LOCAL_STATIC_LIBRARIES,等等…),除 LOCAL_PATH。这是必要的,因为所有的编译控
制文件都在同一个 GNU MAKE 执行环境中,所有的变量都是全局的。
 
  LOCAL_MODULE := helloworld
  LOCAL_MODULE 变量必须定义,以标识你在 Android.mk 文件中描述的每个模块。名称
必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话
说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。注意:如果把库命名为
‘libhelloworld’,编译系统将不会添加任何的 lib 前缀,也会生成 libhelloworld.so,这是
为了支持来源于 Android平台的源代码的 Android.mk 文件。
 
  LOCAL_SRC_FILES := helloworld.c
  LOCAL_SRC_FILES 变量必须包含将要编译打包进模块中的 C 或 C++源代码文件。不用
在这里列出头文件和包含文件,编译系统将会自动找出依赖型的文件。
【注意,默认的 C++源码文件的扩展名是‘.cpp’ 。指定一个不同的扩展名也是可能的,只要定义
LOCAL_DEFAULT_CPP_EXTENSION 变量,不要忘记开始的小圆点(也就是定义为  ‘.cxx’,而不是‘cxx’)】 
 
  include $(BUILD_SHARED_LIBRARY)
  BUILD_SHARED_LIBRARY 是编译系统提供的变量,指向一个 GNU Makefile 脚本(应该
就是在 build/core  目录下的 shared_library.mk) ,负责收集自从上次调用 'include
$(CLEAR_VARS)'以来,定义在 LOCAL_XXX 变量中的所有信息,并且决定编译什么,如何正
确地去做。并根据其规则生成静态库。同理对于静态库。
 
  在 sources/samples目录下有更复杂一点的例子,写有注释的 Android.mk 文件。
二、参考
  这是一份你应该在 Android.mk 中依赖或定义的变量列表,可以定义其他变量为自己使用,
但是 NDK编译系统保留下列变量名:
 -以 LOCAL_开头的名字(例如 LOCAL_MODULE)
 -以 PRIVATE_, NDK_ 或 APP_开头的名字(内部使用)
 -小写名字(内部使用,例如‘my-dir’)
  如果为了方便在 Android.mk 中定义自己的变量,建议使用 MY_前缀,一个小例子:
MY_SOURCES := foo.c
 
ifneq ($(MY_CONFIG_BAR),)
 MY_SOURCES += bar.c
endif
 
LOCAL_SRC_FILES += $(MY_SOURCES)
 
1. GNU Make  变量
  这些 GNU Make  变量在你的 Android.mk 文件解析之前,就由编译系统定义好了。注意在
某些情况下,NDK可能分析 Android.mk 几次,每一次某些变量的定义会有不同。
  (1)CLEAR_VARS:  指向一个编译脚本,几乎所有未定义的 LOCAL_XXX 变量都在
"Module-description"节中列出。必须在开始一个新模块之前包含这个脚本:include
$(CLEAR_VARS)
  (2)BUILD_SHARED_LIBRARY:  指向编译脚本,收集所有的在 LOCAL_XXX 变量中提
供的信息,并且决定如何把列出的源代码文件编译成一个共享库。注意,必须至少在包含这
个文件之前定义 LOCAL_MODULE 和 LOCAL_SRC_FILES。使用例子:  Android.mk 文档规范 3
include $(BUILD_SHARED_LIBRARY) 
#这将生成一个名为 lib$(LOCAL_MODULE).so 的文件
 
(3) BUILD_STATIC_LIBRARY:  一个 BUILD_SHARED_LIBRARY 变量用于编译一个静
态库。静态库不会复制到的 project/packages 中,但是能够用于编译共享库, (看下面描述的
LOCAL_STATIC_LIBRARIES and LOCAL_STATIC_WHOLE_LIBRARIES)。使用例子:
include $(BUILD_STATIC_LIBRARY) 
#注意,这将会生成一个名为 lib$(LOCAL_MODULE).a 的文件
 
  (4)TARGET_ARCH: 目标 CPU平台的名字,  和 android 开放源码中指定的那样。如果是
arm,表示要生成 ARM 兼容的指令,与 CPU架构的修订版无关。
 
  (5)TARGET_PLATFORM: Android.mk 解析的时候,目标 Android 平台的名字.详情可参
考/development/ndk/docs/stable- apis.txt.
 android-3 -> Official Android 1.5 system images
 android-4 -> Official Android 1.6 system images
 android-5 -> Official Android 2.0 system images
 
  (6)TARGET_ARCH_ABI:  暂时只支持两个 value,armeabi 和 armeabi-v7a。在
现在的版本中一般把这两个值简单的定义为 arm, 通过 android  平台内部对它重定义来获得更
好的匹配。其他的 ABI 将在以后的 NDK 版本中介绍,它们会有不同的名字。注意所有基于
ARM 的 ABI都会把 'TARGET_ARCH'定义成‘arm’,但是会有不同的‘TARGET_ARCH_ABI’。 
 
( 7 ) TARGET_ABI:  目标平台和 ABI 的组合,它事实上被定义成
$(TARGET_PLATFORM)-$(TARGET_ARCH_ABI)  ,在想要在真实的设备中针对一个特别的
目标系统进行测试时,会有用。在默认的情况下,它会是'android-3-arm'。
2.  模块描述变量
  下面的变量用于向编译系统描述你的模块。你应该定义在'include  $(CLEAR_VARS)'
和'include $(BUILD_XXXXX)'之间。正如前面描写的那样,$(CLEAR_VARS)是一个脚
本,清除所有这些变量,除非在描述中显式注明。
  (1) LOCAL_PATH:  这个变量用于给出当前文件的路径。必须在 Android.mk 的开头定
义,可以这样使用:
LOCAL_PATH := $(call my-dir)
 
  这个变量不会被$(CLEAR_VARS)清除,因此每个 Android.mk 只需要定义一次(即使在一
个文件中定义了几个模块的情况下)。
 
  (2)LOCAL_MODULE: 这是模块的名字,它必须是唯一的,而且不能包含空格。必须在
包含任一的$(BUILD_XXXX)脚本之前定义它。模块的名字决定了生成文件的名字。例如,如
果一个一个共享库模块的名字是,那么生成文件的名字就是 lib.so。但是,在的 NDK 生成文
件中(或者 Android.mk 或者 Application.mk),应该只涉及(引用)有正常名字的其他模块。
 
  (3)LOCAL_SRC_FILES:  这是要编译的源代码文件列表。只要列出要传递给编译器的
文件,因为编译系统自动计算依赖。注意源代码文件名称都是相对于 LOCAL_PATH的,你可
以使用路径部分,例如:
LOCAL_SRC_FILES := foo.c
 toto/bar.c
 
  【注意:在生成文件中都要使用UNIX风格的斜杠(/).windows风格的反斜杠不会被正确的处理。】  Android.mk 文档规范 4
 
  (4)   LOCAL_CPP_EXTENSION:  这是一个可选变量,用来指定C++代码文件的扩展名,
默认是'.cpp',但是可以改变它,比如:
LOCAL_CPP_EXTENSION := .cxx
 
  (5) LOCAL_C_INCLUDES:  路径的可选配置,是从根目录开始的所有源文件(C, C++
and Assembly)。比如:
LOCAL_C_INCLUDES := sources/foo
或者:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
 
  需要在任何包含 LOCAL_CFLAGS/LOCAL_CPPFLAGS 标志之前。
 
  (6)LOCAL_CFLAGS:  可选的编译器选项,在编译 C 代码文件的时候使用。这可能是有
用的,指定一个附加的包含路径(相对于 NDK的顶层目录),宏定义,或者编译选项。
  注意:不要在 Android.mk 中改变 optimization/debugging 级别,只要在 Application.mk 中
指定合适的信息,就会自动地为你处理这个问题,在调试期间,会让 NDK自动生成有用的数
据文件。
 
  (7)LOCAL_CXXFLAGS:  与 LOCAL_CFLAGS 相同,针对 C++源文件。
 
  (8)LOCAL_CPPFLAGS:  与 LOCAL_CFLAGS 相同,但是对 C 和 C++ source files都适
用。
 
  (9)LOCAL_STATIC_LIBRARIES:  应该链接到这个模块的静态库列表(使用
BUILD_STATIC_LIBRARY 生成),这仅仅对共享库模块才有意义。
 
  (10)LOCAL_SHARED_LIBRARIES:  这个模块在运行时要依赖的共享库模块列表,在
链接时需要,在生成文件时嵌入的相应的信息。注意:这不会附加列出的模块到编译图,也
就是仍然需要在 Application.mk 中把它们添加到程序要求的模块中。
 
  (11)LOCAL_LDLIBS:  编译模块时要使用的附加的链接器选项。这对于使用‘-l’前缀
传递指定库的名字是有用的。例如,下面将告诉链接器生成的模块要在加载时刻链接到
/system/lib/libz.so
LOCAL_LDLIBS := -lz
 
  可查看 docs/STABLE-APIS.TXT 获取使用 NDK发行版能链接到的开放的系统库列表。
 
  (12) LOCAL_ALLOW_UNDEFINED_SYMBOLS:  默认情况下,在试图编译一个共享库时,
任何未定义的引用将导致一个“未定义的符号”错误。这对于在源代码文件中捕捉错误会有
很大的帮助。然而,如果因为某些原因,需要不启动这项检查,可把这个变量设为‘true’。
注意相应的共享库可能在运行时加载失败。(这个一般尽量不要去设为 true)。
 
  (13) LOCAL_ARM_MODE: 默认情况下, arm目标二进制会以 thumb 的形式生成(16 位),
你可以通过设置这个变量为 arm如果你希望你的 module 是以 32 位指令的形式。
'arm' (32-bit instructions) mode. E.g.:
LOCAL_ARM_MODE := arm
【注意:同样可以在编译的时候告诉系统编译特定的类型】
  Android.mk 文档规范 5
(14)LOCAL_SRC_FILES := foo.c bar.c.arm  这样就告诉系统总是将 bar.c 以
arm的模式编译,下面是 GNU Make‘功能’宏,必须通过使用'$(call  )'来求值,他们返
回文本化的信息。
 
  (15)my-dir:返回当前 Android.mk 所在的目录路径,相对于 NDK 编译系统的顶层。
这是有用的,在 Android.mk 文件的开头如此定义:
LOCAL_PATH := $(call my-dir)
 
(16)all-subdir-makefiles: 返回一个位于当前'my-dir'路径的子目录列表。例
如,看下面的目录层次:
sources/foo/Android.mk
sources/foo/lib1/Android.mk
sources/foo/lib2/Android.mk
  如果 sources/foo/Android.mk 包含一行:
include $(call all-subdir-makefiles)
那么它就会自动包含 sources/foo/lib1/Android.mk 和 sources/foo/lib2/Android.mk。这项功
能用于向编译系统提供深层次嵌套的代码目录层次。注意,在默认情况下,NDK 将会只搜索
在 sources/*/Android.mk 中的文件。
 
(17)this-makefile:  返回当前Makefile 的路径(即这个函数调用的地方)
 
(18)parent-makefile:  返回调用树中父 Makefile 路径。即包含当前 Makefile 的
Makefile 路径。
 
(19)grand-parent-makefile
3. Android.mk 使用模板
  在一个 Android.mk 中可以生成多个可执行程序、动态库和静态库。
(1)编译应用程序的模板:
#Test Exe
 
LOCAL_PATH := $(call my-dir)
 
#include $(CLEAR_VARS)
 
LOCAL_SRC_FILES := main.c
 
LOCAL_MODULE := test_exe
 
#LOCAL_C_INCLUDES :=
 
#LOCAL_STATIC_LIBRARIES :=
 
#LOCAL_SHARED_LIBRARIES :=
 
include $(BUILD_EXECUTABLE)
  【注:‘:=’是赋值的意思,‘$’是引用某变量的值】
LOCAL_SRC_FILES 中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头
文件路径,LOCAL_STATIC_LIBRARIES 加入所需要链接的静态库(*.a)的名称,
LOCAL_SHARED_LIBRARIES 中加入所需要链接的动态库(*.so)的名称,LOCAL_MODULE Android.mk 文档规范 6
表示模块最终的名称,BUILD_EXECUTABLE 表示以一个可执行程序的方式进行编译。
(2)编译静态库的模板:
#Test Static Lib
LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_SRC_FILES := \
 helloworld.c
 
LOCAL_MODULE:= libtest_static
 
#LOCAL_C_INCLUDES :=
 
#LOCAL_STATIC_LIBRARIES :=
 
#LOCAL_SHARED_LIBRARIES :=
 
include $(BUILD_STATIC_LIBRARY)
 
  和上面相似,BUILD_STATIC_LIBRARY 表示编译一个静态库。
(3)编译动态库的模板:
#Test Shared Lib
 
LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_SRC_FILES := helloworld.c
 
LOCAL_MODULE := libtest_shared
 
TARGET_PRELINK_MODULES := false
 
#LOCAL_C_INCLUDES :=
 
#LOCAL_STATIC_LIBRARIES :=
 
#LOCAL_SHARED_LIBRARIES :=
 
include $(BUILD_SHARED_LIBRARY)
 
  和上面相似,BUILD_SHARED_LIBRARY 表示编译一个共享库。
  以上三者的生成结果分别在如下目录中,generic 依具体 target 会变:
out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY
 
  每个模块的目标文件夹分别为:
 1)可执行程序:XXX_intermediates
 2)静态库: XXX_static_intermediates
 3)动态库: XXX_shared_intermediates
 
  另外, 在 Android.mk 文件中, 还可以指定最后的目标安装路径, 用 LOCAL_MODULE_PATH Android.mk 文档规范 7
和 LOCAL_UNSTRIPPED_PATH 来指定。不同的文件系统路径用以下的宏进行选择:
  TARGET_ROOT_OUT:表示根文件系统。
   TARGET_OUT:表示 system文件系统。
   TARGET_OUT_DATA:表示 data文件系统。
用法如:

LOCAL_MODULE_PATH :=$(TARGET_ROOT_OUT) 


转自:http://blog.youkuaiyun.com/gemmem/article/details/7290140

Android.bp文件、Android.mk文件、makefile文件、androidmk、blueprint、soong、Ninja关系 一、常在手机驱动开发过程中,一般都会碰到bp,mk,makefile,soong,buleprint,Ninja等相互作用,它们本身得作用以及相互之间得关系是什么呢? Android.bp文件:它是一直编译的配置文件,它的功能主要是用来配置编译的一个一个模块,因为现在编译的体系很大,不可能就是平常所写的几百行几千行的代码,写一个makefile就可以通过编译命令直接进行编译生成需要的静态库,动态库等目标文件。 bp文件的样子: cc_binary{ //模块类型 name: "cal.. 阅读详情

相关推荐

Android构建系统:Android.mk(1)基础概念赋值变量引用详解

本文学习Android.mk文件中赋值操作、变量引用和函数的使用方法,静态库和可执行文件的示例。通过使用这些概念,可以更灵活地控制Android.mk文件中的变量和表达式,从而实现满足客户的功能。

我其实什么都不会 1058

Android.mk用法详解

一、Android.mk介绍 Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。 它的基本格式如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ................ LOCAL_xxx := xxx LOCAL_MODULE

fengruoying93的专栏 1万+

Android.mk引入第三方jar包和so库文件的方法

主要介绍了Android.mk引入第三方jar包和so库文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Android.mk详解+入门必备

网上有很多关于Android.mk详解的文章,但是感觉比较散,所以有必要写一篇更加完整一点的,更加容易入门一点的文章。Android.mk 博客介绍 :简单的说:Android.mk就是一个GNU make语法的脚本文件,用来编译出类库.jar,应用文件.apk,动态库.so,静态库.a作用。其中关键的就是include类型和不同的属性定义。本文主要对编译 apk 的 Android.mk 文件进行举例和介绍,包含完整示例的展示以及重要属性的介绍。编码类型和关键字。

wenzhi的博客 8208

Obsidian免费同步全攻略:手把手教你用OneDrive+Remotely Save插件跨设备同步笔记

本文提供了一份详细的Obsidian免费同步方案指南,核心是利用OneDrive云存储与Remotely Save插件实现跨设备笔记同步。文章手把手教学,涵盖插件安装、OneDrive授权配置、桌面端与移动端的同步设置,并解答了常见问题,帮助用户在不依赖官方付费服务的情况下,构建稳定、自主的免费同步工作流。

bash7scripter的博客 849

Mujoco xml actuator

在MuJoCo中,actuator(执行器) 是用于定义外部力或力矩的机制,这些力或力矩可以作用于关节、肌腱或身体。执行器可以模拟各种类型的驱动器,如电机、液压缸、肌肉等。它们通过定义传输(transmission)和力生成机制(force generation)来实现对模型的控制。

m0_52113469的博客 2894

Android 编译之android.mk

1. android系统源码的编译流程 来回顾一下常见的编译步骤: source build/envsetup.sh lunch xxx make -j8 2>&1 | tee build.log 这三步究竟做了什么呢?我们来逐步分析一下。 1.1 source build/envsetup.sh build/envsetup.sh这个文件中定义了一些变量和函数,执行source build/envsetup.sh之后,envsetup.sh中的变量成了全局变量,而其中的函数也可以直接在

yinhunzw的专栏 2664

MFC下使用C++操作Word文档

由于项目需求,在MFC环境下操作将数据和图片写入word文档,之前没有接触过,网上查阅了很多资料,终于把任务完成。理解的不是很透彻,但是这些东西应该够用了,写篇博客记录一下,以便以后再用到。 (1)VS环境下创建一个MFC应用程序,然后在项目上单击右键,选择 类向导-----添加类----类型库中的MFC类。在弹出的对话框中选择文件,位置选择office安装目录下的...

GIS_yuhua的博客 7577

Android.mk入门到精通(003)——Android.mk用法详解

https://www.cnblogs.com/reality-soul/p/6893248.html 一、Android.mk介绍 Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。 它的基本格式如下:

STN_LCD的专栏 2491

OpenMM | PDBFixer 用于蛋白质预处理

PDBFixer 用于蛋白质预处理

DrugOne 3005

OpenHarmony 显示Display驱动全栈解析:DisplayLayer + Gralloc + Gfx 三位一体,打造高性能图形底座

OpenHarmony Display显示驱动模块是系统图形渲染和显示功能的基础组件,负责管理显示设备、图层渲染、内存分配等核心功能。该模块采用HDI(Hardware Driver Interface)设计架构,为上层图形服务提供统一的显示能力接口,实现了显示设备的初始化、图层管理、内存分配与映射、硬件加速等关键功能。DisplayLayer:负责显示图层的管理, 包括图层创建、显示属性设置、图层填充及刷新等操作;

m0_67505153的博客 315

Android NDK开发指南(一) Application.mk文件

Android NDK开发指南(一) Application.mk文件 http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2381586.html Application.mk目的是描述在你的应用程序中所需要的模块(即静态库或动态库)。 Applica...

N的专栏 267

在 SAP 中修改 Profile 文件中的主机名需要谨慎操作,需需确保所有相关配置保持一致

在SAP系统中修改Profile文件主机名需谨慎操作,主要步骤包括:1)停止相关SAP服务;2)重命名并编辑实例级Profile文件(如ER1_D00_OLDHOST改为ER1_D00_LRPSAP),修改所有含旧主机名的参数;3)可选更新默认Profile文件;4)在Windows系统中调整注册表配置;5)验证一致性后重启服务。关键注意:保持大小写统一、修改前备份文件、集群环境需同步所有节点。通过系统日志确认新主机名生效且无报错。

金牌架构师 1049

Android mk详解

概览 Android.mk文件位于项目jni/目录的子目录中,用于向编译系统描述源文件和共享库。它实际上是编译系统解析一次或多次的微小 GNU makefile 片段。Android.mk文件用于定义Application.mk、编译系统和环境变量所未定义的项目范围设置。它还可替换特定模块的项目范围设置。 Android.mk的语法支持将源文件分组为模块。模块是静态库、共享库或...

Tony-jiang的博客 2万+

全志V3S嵌入式驱动开发(编译器升级到7.5)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 看过我们文章的朋友都知道,前面为了做v3s的驱动,对linux kernel进行了两次升级。第一次升级时从4.10.y升级到4.14.y,另外一次升级是从4.14.y升级到5.2.y。这中间最主要的原因,就是为了驱动适配的需要,更新的内核可以对硬件驱动有更好的支持,架构也更合理。 如果说内核升级尚且可以理解,那为什么要对编译器升级呢?这里面,最重要的一点就是语言的升

嵌入式-老费,一个分享专业嵌入式知识的blog 1166

Autosar入门_OS_5

os hook函数说明

u012406840的博客 397

Android.mk语法详解

目前 Android 工程可以通过 mk、或者 cmake 的形式构建 NDK 工程,较新的 Android 工程一般采用的是 .cmake 构建 NDK 源码,而相对创建时间久的工程则大多数采用的是 .mk 的形式构建。文章主要是通过解析 Android 源码里的 docs 文档来深入了解 .mk 语法,其中会对原文里面一些描述通过实际工程加以描述。

Bai HongHua的博客 7555

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

安卓编译android.mk,详解安卓系统中的Android.mk文件

概述 Android.mk文件用来向编译系统描述如何编译你的源代码。更确切地说,该文件其实就是一个小型的Makefile。由于该文件会被NDK的编译工具解析多次,因此应该尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析。这个文件的语法允许把源代码组织成模块,每个模块属于下列类型之一:APK程序:一般的Android程序,编译打包生成apk文件。JAVA库:java类库...

weixin_34862561的博客 1443

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mk文件介绍

android.mk文件解析

知识共享,你我皆是知识的搬运工 8756

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android.mk详解

#Android.mk详解 ##一.Android.mk介绍 Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。 要掌握jni,就必须熟练掌握Android.mk的语法规范。 它的基本格式如下: LOCAL_PATH := $(call my-dir) include $(CLEA...

wenzhi的博客 2826
上一篇: git使用
下一篇: 深入理解Android消息处理系统——Looper、Handler、Thread
HabbyGe
博客等级 码龄16年 46粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值