导航:首页 > 操作系统 > androidmk

androidmk

发布时间:2022-01-19 03:08:29

android.mk在哪里,需要自己写吗

你是要做JNI还是在源码工程里编译
如果是JNI的话,需要在工程目录里增加jni文件夹,里面放Android.mk文件
如果是编译整个Android源码的话,需要在对应的应用目录里放Android.mk文件

Ⅱ android.mk 这个文件在哪里 我怎么找不到

android.mk 是Android开发中,用来编译JNI代码的

在开发工具中,new JNI 即可创建一个 android.mk文件

一个Android.mk文件可以编译多个模块,每个模块属下列类型之一:

  1. APK程序 一般的Android程序,编译打包生成apk文件

  2. java库 java类库,编译打包生成jar文件

  3. CC++应用程序 可执行的CC++应用程序

  4. CC++静态库 编译生成CC++静态库,并打包成.a文件

  5. CC++共享库 编译生成共享库(动态链接库),并打包成.so文, 有且只有共享库才能被安装/复制到您的应用软件(APK)包中。

Ⅲ 如何调用android.mk 中的变量

变量
1
LOCAL_PATH := $(call my-dir)
1、解释 LOCAL_PATH:
英文:如下图
中文:Android.mk 开始必须定义变量 LOCAL_PATH,它用来指定源文件的位置
2、解释 my-dir:
英文:如下图
中文:编译系统提供的'my-dir'宏函数,被用来获取当前的目录。

2
include $(CLEAR_VARS)
1、解释 CLEAR_VARS:
英文:如下图
中文:编译系统提供CLEAR_VARS变量,它指向了一个用来清除 LOCAL_ 开头的变量(LOCAL_PATH除外)的makefile文件,需要它的原因是整个的编译上下文中,所有的变量都是全局的,这样就可以保证这些变量只在局部范围内起作用;

3
LOCAL_MODULE := hello-jni
1、解释 LOCAL_MODULE:
英文:如下图
中文:每一个android.mk文件中都必须定义一个模块标示 LOCAL_MODULE , 这个名字必须是唯一的并且不包含任何的空格,编译系统将自动的修改生成文件的前缀和后缀,如一个模块为'foo'共享库将被改为'libfoo.so';
重要提示,如果你的模块名为'libfoo',编译系统生成的文件为 'libfoo.so', 而不会去再增加前缀,当你使用的时候,android平台会自动识别;

4
LOCAL_SRC_FILES := hello-jni.c
1、解释 LOCAL_SRC_FILES
英文:如下图
中文:LOCAL_SRC_FILES必须包含一系列的C/C++源文件,他们将会被建立和装载到模块中,注意你不应该把需要包含的头文件列在这里,因为建立系统将自动计算依赖项,只有源文件才能够被编译器识别;
2、解释 LOCAL_CPP_EXTENSION
英文:如下图
中文:注意默认的c++文件扩展名是'.cpp', LOCAL_CPP_EXTENSION可以用来指定不同类型的扩展名,不要忘了前面的点(如:'.cxx' 将起作用, 但是 'cxx'不会起作用).
如:LOCAL_CPP_EXTENSION := .cc .cpp

5
include $(BUILD_SHARED_LIBRARY)
1、解释 BUILD_SHARED_LIBRARY
英文:如下图
中文:‘建立系统’提供个变量 BUILD_SHARED_LIBRARY, 将根据在‘include’之前定义的所有的信息和LOCAL_前缀的变量,决定将建立什么,如何正确的生成共享库;
2、解释 BUILD_STATIC_LIBRARY
英文: 如下图
中文: 同上,只不过它生成的是静态库

6
LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/third_party/freetype
1、解释 NDK_ROOT
中文:NDK_ROOT 代表的是ndk的根目录,如我的是“D:\Android\android-ndk-r10”,这个例子是用来加载ndk根目录下的freetype的头文件路径;
7
LOCAL_LDFLAGS := \
$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libfreetype.a
1、解释 LOCAL_LDFLAGS
中文:用来加载用户自己的静态库(.a文件)
2、解释 TARGET_ARCH_ABI
中文:当前的cpu/abi的类型,在链接不同类型的CPU_ABI时非常有用,如下图

8
$(call import-add-path,$(LOCAL_PATH)/libsrc)
1、解释:import-add-path
中文:增加自己的路径到 NDK_MODULE_PATH 环境变量中,再非ndk根目录/sources下编译时会用到
9
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(error $(LOCAL_SRC_FILES))
1、解释:$
中文:变量前面加上"$"用来返回变量的值
2、解释:$(error string)
中文:用来将string所对应的内容打印到控制台,并且android.mk文件停止继续进行编译,如下图

10
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(warning $(LOCAL_SRC_FILES))
1、解释:$(warning string)
中文:用来将string所对应的内容打印到控制台,并且android.mk文件将继续进行编译,如下图

11
LOCAL_PRELINK_MODULE := false
1、解释 LOCAL_PRELINK_MODULE:
中文:关闭编译器链接前进行代码优化,防止将没有用到的代码不添加到生成的库中
12
LOCAL_EXPORT_CFLAGS := -DFOO=1
1、解释 LOCAL_EXPORT_CFLAGS
定义这个变量来记录一些列的 c/c++编译标志,他们将会增加到其他的使用这个模块的LOCAL_CFLAGS中,LOCAL_CFLAGS的功能相当于:LOCAL_STATIC_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 这两个变量;

13
LOCAL_STATIC_LIBRARIES := foo
1、解释 LOCAL_STATIC_LIBRARIES
链接进来一个静态库的模块,这里是静态库的模块的名称,而不是静态库的名称
14
LOCAL_SHARED_LIBRARIES
链接进来一个动态库的模块,这里是动态库的模块的名称,而不是静态库的名称

15
LOCAL_EXPORT_CPPFLAGS
跟 LOCAL_EXPORT_CFLAGS 的功能一样,但是它只能够在c++中使用

16
LOCAL_EXPORT_C_INCLUDES
跟 LOCAL_EXPORT_CFLAGS,但是对于c的 include路径,被调用模块申明后,使用模块可以很方便的使用包含的路径

17
LOCAL_EXPORT_LDFLAGS
跟LOCAL_EXPORT_CFLAGS的作用一样,但是仅仅是链接选项
18
LOCAL_EXPORT_LDLIBS
跟LOCAL_EXPORT_CFLAGS的作用类似,但是这个变量说明的系统库,需要带上 '-l' 前缀,他们将导入链接器选项,并追加到你的模块的 LOCAL_LDLIBS
19
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
允许未定义的符号
20
LOCAL_CFLAGS
.c文件对应的编译标记变量
21
LOCAL_LDLIBS
用来链接共享库(so)或者执行文件,使用系统的库文件的时候,需要加上前缀 '-l',例如下面的例子,将告诉连接器生成的模块的时候同时链接 /system/lib/libz.so
LOCAL_LDLIBS := -lz
注意:如果你在一个模块中链接一个静态库,这个静态库是不会起作用的,同时ndk-build 会打印出一条警告消息
22
LOCAL_CFLAGS := -fvisibility=hidden
隐藏库函数名
23
LOCAL_PROGUARD_ENABLED默认是打开的,不特别指定的话,就是起作用的,就可能做优化。
LOCAL_PROGUARD_ENABLED:= disabled

Ⅳ android.mk是在什么情况下生成的

当你需要使用JNI的时候,你需要创建一个native工程。Android.mk就是一个makefile配置文件,帮你把C/C++的代码编译成动态库so的。

创建的方式有两种:

在工程根目录里手动创建一个目录叫jni,在里面新建一个Android.mk,然后创建c,cpp文件,把他们配置到Android.mk里。

右键工程,选择Android Tools->Add Native Support自动生成。



(4)androidmk扩展阅读:

创建Android库

Android 库在结构上与 Android 应用模块相同。可以提供构建应用所需的一切内容,包括源代码、资源文件和 Android 清单。

不过,Android 库将编译到可以用作 Android 应用模块依赖项的 Android 归档 (AAR:Android Archive Resource) 文件,而不是在设备上运行的 APK。

与 JAR 文件不同,AAR 文件可以包含 Android 资源和一个清单文件,这样,除了 Java 类与方法外,还可以捆绑布局和可绘制对象等共享资源。

库模块在以下情况下非常有用:

构建使用某些相同组件(例如 Activity、服务或 UI 布局)的多个应用。

构建存在多个 APK 变体(例如免费版本和付费版本)的应用并且需要在两种版本中使用相同的核心组件。

Ⅳ 如何输出 android.mk 及 application.mk 中个变量的值

想知道 android.mk 及 Application.mk 中各变量的值可以通过新建如下两个.mk文件:
PRINT_ANDROID_VARIABLE.mk
PRINT_APPLICATION_VARIABLE.mk
包含到android.mk文件中某位置:

1
include $(LOCAL_PATH)PRINT_ANDROID_VARIABLE.mk
2 include $(LOCAL_PATH)PRINT_APPLICATION_VARIABLE.mk
View Code

文件PRINT_ANDROID_VARIABLE.mk内容如下:

1 $(warning CLEAR_VARS =
$(CLEAR_VARS))
2 $(warning BUILD_SHARED_LIBRARY =
$(BUILD_SHARED_LIBRARY))
3 $(warning BUILD_STATIC_LIBRARY =
$(BUILD_STATIC_LIBRARY))
4 $(warning PREBUILT_SHARED_LIBRARY =
$(PREBUILT_SHARED_LIBRARY))
5 $(warning TARGET_ARCH =
$(TARGET_ARCH))
6 $(warning TARGET_PLATFORM =
$(TARGET_PLATFORM))
7 $(warning TARGET_ARCH_ABI =
$(TARGET_ARCH_ABI))
8 $(warning TARGET_ABI =
$(TARGET_ABI))
9 $(warning LOCAL_PATH =
$(LOCAL_PATH))
10 $(warning LOCAL_MODULE =
$(LOCAL_MODULE))
11 $(warning LOCAL_MODULE_FILENAME =
$(LOCAL_MODULE_FILENAME))
12 $(warning LOCAL_SRC_FILES =
$(LOCAL_SRC_FILES))
13 $(warning LOCAL_CPP_EXTENSION =
$(LOCAL_CPP_EXTENSION))
14 $(warning LOCAL_C_INCLUDES =
$(LOCAL_C_INCLUDES))
15 $(warning LOCAL_CFLAGS =
$(LOCAL_CFLAGS))
16 $(warning LOCAL_CXXFLAGS =
$(LOCAL_CXXFLAGS))
17 $(warning LOCAL_CPPFLAGS =
$(LOCAL_CPPFLAGS))
18 $(warning LOCAL_STATIC_LIBRARIES =
$(LOCAL_STATIC_LIBRARIES))
19 $(warning LOCAL_SHARED_LIBRARIES =
$(LOCAL_SHARED_LIBRARIES))
20 $(warning LOCAL_WHOLE_STATIC_LIBRARIES =
$(LOCAL_WHOLE_STATIC_LIBRARIES))
21 $(warning LOCAL_LDLIBS =
$(LOCAL_LDLIBS))
22 $(warning LOCAL_LDFLAGS =
$(LOCAL_LDFLAGS))
23 $(warning LOCAL_ALLOW_UNDEFINED_SYMBOLS =
$(LOCAL_ALLOW_UNDEFINED_SYMBOLS))
24 $(warning LOCAL_ARM_MODE =
$(LOCAL_ARM_MODE))
25 $(warning LOCAL_ARM_NEON =
$(LOCAL_ARM_NEON))
26 $(warning LOCAL_DISABLE_NO_EXECUTE =
$(LOCAL_DISABLE_NO_EXECUTE))
27 $(warning LOCAL_DISABLE_RELRO =
$(LOCAL_DISABLE_RELRO))
28 $(warning LOCAL_DISABLE_FORMAT_STRING_CHECKS =
$(LOCAL_DISABLE_FORMAT_STRING_CHECKS))
29 $(warning LOCAL_EXPORT_CFLAGS =
$(LOCAL_EXPORT_CFLAGS))
30 $(warning LOCAL_EXPORT_CPPFLAGS =
$(LOCAL_EXPORT_CPPFLAGS))
31 $(warning LOCAL_EXPORT_C_INCLUDES =
$(LOCAL_EXPORT_C_INCLUDES))
32 $(warning LOCAL_EXPORT_LDFLAGS =
$(LOCAL_EXPORT_LDFLAGS))
33 $(warning LOCAL_EXPORT_LDLIBS =
$(LOCAL_EXPORT_LDLIBS))
34 $(warning LOCAL_SHORT_COMMANDS =
$(LOCAL_SHORT_COMMANDS))
35 $(warning LOCAL_THIN_ARCHIVE =
$(LOCAL_THIN_ARCHIVE))
36 $(warning LOCAL_FILTER_ASM = $(LOCAL_FILTER_ASM))
View Code

文件PRINT_APPLICATION_VARIABLE.mk内容如下:

1 $(warning APP_PROJECT_PATH =
$(APP_PROJECT_PATH))
2 $(warning APP_MODULES =
$(APP_MODULES))
3 $(warning APP_OPTIM =
$(APP_OPTIM))
4 $(warning APP_CFLAGS =
$(APP_CFLAGS))
5 $(warning APP_CXXFLAGS =
$(APP_CXXFLAGS))
6 $(warning APP_CPPFLAGS =
$(APP_CPPFLAGS))
7 $(warning APP_LDFLAGS =
$(APP_LDFLAGS))
8 $(warning APP_BUILD_SCRIPT =
$(APP_BUILD_SCRIPT))
9 $(warning APP_ABI =
$(APP_ABI))
10 $(warning APP_PLATFORM =
$(APP_PLATFORM))
11 $(warning APP_STL =
$(APP_STL))
12 $(warning APP_GNUSTL_FORCE_CPP_FEATURES =
$(APP_GNUSTL_FORCE_CPP_FEATURES))
13 $(warning APP_SHORT_COMMANDS =
$(APP_SHORT_COMMANDS))
14 $(warning NDK_TOOLCHAIN_VERSION =
$(NDK_TOOLCHAIN_VERSION))
15 $(warning APP_PIE =
$(APP_PIE))
16 $(warning APP_THIN_ARCHIVE = $(APP_THIN_ARCHIVE))
View Code

Ⅵ android mk文件怎么打开

.mk后缀名文件类型:Makefile扩展名为.mk的文件是一个开发文件。Makefile规则如下所示目标:依赖文件列表命令列表1、目标通常是要产生的文件名称,目标可以是可执行文件或obj文件,也可是一个动作的名称.2、依赖文件是用来输入从而产生目标的文件

Ⅶ android.mk文件怎么写

一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中列出头文件和依赖文件。NDK编译系统将会为你自动处理这些问题。这也意味着,在升级NDK后,你应该得到新的toolchain/platform支持,而且不需要改变你的Android.mk文件。
先看一个简单的例子:一个简单的"hello world",比如下面的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相应的Android.mk文件会象下面这样:
---------- cut here ------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE
:= helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)
---------- cut here ------------------
我们来解释一下这几行代码:
LOCAL_PATH := $(call my-dir)
一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
include $( CLEAR_VARS)
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
LOCAL_MODULE := helloworld
LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。
LOCAL_SRC_FILES := helloworld.c
LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。

在Android中增加本地程序或者库,这些程序和库与其所载路径没有任何关系,只和它们的Android.mk文件有关系。Android.mk和普通的Makefile有所不同,它具有统一的写法,主要包含一些系统公共的宏。
在一个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表示模块最终的名称,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/proct/generic/obj/EXECUTABLE
out/target/proct/generic/obj/STATIC_LIBRARY
out/target/proct/generic/obj/SHARED_LIBRARY
每个模块的目标文件夹分别为:
可执行程序:XXX_intermediates
静态库: XXX_static_intermediates
动态库: XXX_shared_intermediates
另外,在Android.mk文件中,还可以指定最后的目标安装路径,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。
用法如:
CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

Ⅷ android.mk是用什么语言写的

.mk文件一般就是MakeFile文件。MakeFile文件严格来说是一个文本文件,只不过内部制定了资源的依赖关系,更像是编译流程的说明书,内部可以调用shell脚本,实际操作是里面的shell脚本进行,Makefile只是注明了文件之间的依赖关系,然后可以通过make文件编译执行。

Ⅸ Android.mk这个文件在哪里呢

我见到过的是在编译整个安卓系统的源码的时候会用到的文件,也就是安卓系统源码未make之前的。他可以强制编译自己写好的应用放进安卓系统中,或者编译修改过后的系统源码

Ⅹ 为什么Android studio里面没有Android.mk只有CmakeList.txt

因为android studio2.2之后的版本就用CMakleLists了,mk抛弃了,CMakeLists文件理解起来更容易也更加容易编写,并且CMakeLists也能在linux平台进行编译。

阅读全文

与androidmk相关的资料

热点内容
java毕业设计文献 浏览:138
筹码集中度指标源码 浏览:477
listsortjava 浏览:180
plc闪光电路编程实例 浏览:297
socket编程试题 浏览:201
华为的服务器怎么设置从光驱启动 浏览:867
程序员真的累吗 浏览:323
学信网app为什么刷脸不了 浏览:871
天蝎vs程序员 浏览:991
单片机下载口叫什么 浏览:186
程序员的道 浏览:924
云服务器不实名违法吗 浏览:556
怎样查看文件夹图片是否重复 浏览:993
文件怎么导成pdf文件 浏览:806
打开sql表的命令 浏览:101
安卓手机如何面部支付 浏览:37
天元数学app为什么登录不上去 浏览:823
明日之后为什么有些服务器是四个字 浏览:104
安卓系统l1是什么意思 浏览:26
服务器一直崩应该用什么指令 浏览:924