LOCAL_PRIVILEGED_MODULE := true 将app打包到/system/priv-app/下
Android中增加本地程序或者库,这些程序与其所在路径没有关系,只和它们的Android.mk有关系。 Android.mk与普通的makefile略有不同,Android.mk具有统一的写法,主要包含一些系统的公共的宏: Android.mk中选项参考以下文件路径: build/core/config.mk 各个选项的默认值在以下文件中定义: build/core/base_config.mk 在一个android.mk中也可以生成多个可执行程序,动态库,静态库。 = #LOCAL_SHARED_LIBRARISE := include $(BUILD_STATIC_LIBRAR) ---- LOCAL_PATH:= $(call my-dir) 此行代码在Android.mk 的开头,用于给出当前文件的路径: LOCAL_PATH: 用于在开发树中查找源文件; 宏函数’my-dir’: 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)
什么是Android.mk Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。 Android.mk文件用来告知NDK Build系统关于Source的信息。 Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。 所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。 小写字母名字:如my-dir 如果想要定义自己在Android.mk中使用的变量名,建议添加MY_前缀。 )写法 Android.mk 文件语法详解 Android.mk
前言 本文转载自Android.mk语法解释,方便收藏。 原文 大家在编写Android的Native代码时,经常会接触到一个叫做Android.mk的文件。 这也意味着,当升级到新版的NDK时,不需要更改Android.mk文件就可以相互兼容。 NDK中的Android.mk文件语法和Android源码中的Android.mk文件语法非常相近。 例如,考虑在以下目录层级中: sources/foo/Android.mk sources/foo/lib1/Android.mk sources/foo/lib2/Android.mk 如果在 Android.mk和sources/foo/lib2/Android.mk文件。 import-module 该函数用于按指定的名字,查找另一个模块的Android.mk文件,并包含到当前的Android.mk中来。
编写Android.mk文件 ? SDL2 Android.mk 以下是SDL2源码中Android.mk文件: ? 重点讲解LOCAL_SRC_FILES LOCAL_SRC_FILES变量是最难写、也最最重要的配置,甚至可以说,写Android.mk就是在写LOCAL_SRC_FILES也不为过。 (上文中的Android.mk) - APP_ABI:指定CPU架构。 - APP_PLATFORM:指定安卓平台版本。 -APP_MODULES:指明需编译的模块,这里对应Android.mk中的LOCAL_MODULE。
特别是 复制apk,复制动态库的Android.mk 文件,经过研究。现解决方法例如以下。 Android.mk例如以下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := static_add LOCAL_SRC_FILES (BUILD_STATIC_LIBRARY) 注意编译静态库的时候,必须有一个Application.mk文件: APP_MODULES:=static_add APP_MODULES的值应该和Android.mk := static_add LOCAL_SRC_FILES := share.c include $(BUILD_SHARED_LIBRARY) 注意上面生成的libstatic_add.a必须跟Android.mk 2.1 改动Android.mk文件 Android.mk文件例如以下: [plain] view plaincopy LOCAL_PATH:= $(call my-dir) include
关于Android NDK开发的文章已经比较多了,我的博客中也分享了很多NDK开发相关经验和技巧,今天简单写了一个 Android.mk 的示例模板,供初学者参考。 那么,我们可以对 Android 工程的 jni 目录,做如下划分: image.png 对应的 Android.mk 文件的写法示例如下 LOCAL\_PATH := $(call my-dir) \_LDLIBS := -llog -fPIE -pie LOCAL\_SHARED\_LIBRARIES:= native\_sdk include $(BUILD\_EXECUTABLE) 对于 Android.mk
本篇将通过实战的方式,详细介绍如何编写一个用于构建本地库的Android.mk文件,并将其集成到Android项目中。 编写Android.mk 在Android项目中,如果打算使用ndk-build来编译C/C++代码,需要在项目的jni目录下编写一个Android.mk文件。 Android.mk 下面是一个简单的Android.mk文件的例子,它定义了一个名为libnative-utils的共享库,该库包含了之前创建的native-utils.cpp文件: LOCAL_PATH 常见问题 确保Android.mk和Application.mk(如果有)文件中的路径和设置正确无误。 Android.mk配置需细心,确保路径、名称无误,以顺利构建本地库。
LOCAL_SDK_VERSION 意义 LOCAL_SDK_VERSION := current 若是在Android.mk中添加该选项,则编译时会忽略源码隐藏的API,故在使用源码的hide api
应用的名称 LOCAL_CERTIFICATE 签署当前应用的证书名称 LOCAL_MODULE_TAGS 当前模块所包含的标签,Android.mk
本文将简要介绍如何入门学习 Android.mk 文件的编写。 指令中使用相对路径来引用其他文件或 Android.mk 文件。 可以在构建时设置环境变量,然后在 Android.mk 文件中检查这些变量来决定是否包含某些源文件或编译选项。虽然这不是直接在 Android.mk 文件中使用条件语句,但它可以达到类似的效果。 需要注意的是,直接在 Android.mk 文件中使用 GNU Make 的条件语句(如 ifeq)通常不会按预期工作,因为 Android.mk 文件不是直接由 GNU Make 解析的。 九、导出变量 在某些情况下,可能需要在一个 Android.mk 文件中定义的变量在另一个 Android.mk 文件中也可见(例如在包含的子目录中)。
1.准备文件 首先在新建的一个文件夹中,放置自己编写的两个文件,一个是C语言程序,一个是Android.mk,C语言程序内容可以由自己决定,符合标准即可。 也可以是最简单的打印hello,world 2.编写Android.mk 对于Android.mk文件的编写,需要先了解其中一些必要的设置,这里我先放出我的Android.mk 文件内容很简短,来详细解释一下 宏函数my-dir由编译系统提供,用于返回当前路径(即包含Android.mk文件的目录)。 LOCAL_MODULE := test_app 编译的目标对象,LOCAL_MODULE变量必须定义,以标识在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。 文件中即可 完整Android.mk代码 给出完整的Android.mk代码,由于我的C文件叫做test_app.c,所以想要直接使用需要把下面代码中test_app换为自己电脑上C程序文件的名称即可。
如果我们编译的so文件需要引用到其它的so文件,那我们来看下这时候的Android.mk 文件如何写。 二、需要ndk 编译.cpp, 编译的 .cpp 需要引用外部的 .so 如下图所示,ndk 编译 util.cpp,需要引用到 libyuv2rgb.so ,我们看下 Android.mk中的内容 ?
B,编译静态库的模板: #Test Static 一个Android.mk file用来向编译系统描述你的源代码。 你可以在每一个Android.mk file中定义一个或多个模块。 在这个例子中,宏函数‘my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。 Android.mk和普通的Makefile有所不同,它具有统一的写法,主要包含一些系统公共的宏。在一个Android.mk中可以生成多个可执行程序、动态库和静态库。 m:编译所有的模块 mm:编译当前目录下的模块,当前目录下要有Android.mk文件 mmm:编译指定路径下的模块,指定路径下要有Android.mk文件 下面举个例子说明,假设我要编译android
CMake 配置 ( CMakeLists.txt ) VI . ndkBuild 配置 ( Android.mk ) VII . 博客相关资源下载 I . 源码编译配置 ---- 1 . 路径 ; ① ndkBuild 简介 : 使用 ndkBuild 进行构建 , 构建脚本是 Android.mk , 是从 Eclipse + ADT 环境遗留下来的配置 NDK 编译方案 , 逐步被 defaultConfig { ... } // 配置 NDK 的编译脚本路径 // 编译脚本有两种 ① CMakeList.txt ② Android.mk VI . ndkBuild 配置 ( Android.mk ) ---- 1 . Android.mk 配置示例 : # my-dir 是 NDK 内置的函数 , 获取当前的目录路径 # 在该案例中就是 Android.mk 文件所在的目录的绝对路径 , 工程根目录/app/src/
Android.mk与Application.mk Android Studio 3之前,需要编写Android.mk和Application.mk文件。 [] // 禁止自动执行ndk-build jniLibs.srcDirs = ['src/main/libs'] // 设定成so文件生成的目录 } } 指定模块的名字 在Android.mk static { System.loadLibrary("modname"); } 利用$(TARGET_ARCH_ABI)判断目标架构类别 Android Studio 3之前,需要编写Android.mk armeabi-v7a APP_PLATFORM := android-19 APP_STL := gnustl_static APP_CPPFLAGS += -std=c++11 指定了2种架构 在Android.mk 中,可以用$(TARGET_ARCH_ABI)判断目标架构类别; 例如jni目录中有如下的文件 jni |-- Android.mk |-- Application.mk |-- something.cpp
首先需要讲下Android.bp文件: Android.bp的出现就是为了替换Android.mk文件,随着Android越来越庞大,module越来越多,编译时间也越来越长,而使用ninja在编译的并发处理上较 中的BUILD_SHARED_LIBRARY cc_binary:编译成可执行文件,类似于Android.mk中的BUILD_EXECUTABLE name :编译出的模块的名称,类似于Android.mk 中的LOCAL_MODULE srcs:源文件,类似于Android.mk中的LOCAL_SRC_FILES local_include_dirs:指定路径查找头文件,类似于Android.mk中的 LOCAL_C_INCLUDES shared_libs:编译所依赖的动态库,类似于Android.mk中的LOCAL_SHARED_LIBRARIES static_libs:编译所依赖的静态库, 类似于Android.mk中的LOCAL_STATIC_LIBRARIES cflags:编译flag,类似于Android.mk中的LOCAL_CFLAGS Service.cpp是HAL层启动的入口文件
所以现在Android源码中有的模块是用 Android.bp(Soong),有的模块使用老式 Android.mk 。 也就是说,沿用老式的 Android.mk ,也存在 MK -> Ninja 的过程。 忽略某个文件夹下的 Android.mk Android 10 构建系统会扫描源码所有目录(包括子目录)的 Android.mk 和 Android.bp 文件,生成对应的 Ninja 文件。 Chromium 的 third_party 目录下包含第三方开源库,有些包含 Android.mk。 删除或重命名,但我希望找到一个更好的解决方案:忽略某些目录下的 Android.mk。
Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . Android Studio 中使用 Android.mk 配置静态库 总结 ---- Android Studio 中使用 Android.mk 配置第三方 静态库 : ① Android.mk 脚本路径设置 配置 Android.mk 构建脚本路径 ---- 1 . 预编译 第三方 静态库 ( Android.mk ) ---- 1 . Android.mk 配置示例 ---- # I .
Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . Android Studio 中使用 Android.mk 配置动态库 总结 ---- Android Studio 中使用 Android.mk 配置第三方 动态库 : ① Android.mk 脚本路径设置 配置 Android.mk 构建脚本路径 ---- 1 . 预编译 第三方 动态库 ( Android.mk ) ---- 1 . Android.mk 配置示例 ---- # I .