1.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/product/generic/obj/EXECUTABLE out/target/product/generic/obj/STATIC_LIBRARY out/target/product/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)。
2.android.mk怎么在jni编译时把系统头文件包含
Android.mk文件用来告知NDK Build 系统关于Source的信息。
Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。
Android.mk文件语法允许我们将Source打包成一个"modules". modules可以是:静态库动态库。只有动态库可以被 install/copy到应用程序包(APK). 静态库则可以被链接入动态库。
可以在一个Android.mk中定义一个或多个modules. 也可以将同一份source 加进多个modules.Build System帮我们处理了很多细节而不需要我们再关心。例如:你不需要在Android.mk中列出头文件和外部依赖文件。
NDK Build System自动帮我们提供这些信息。这也意味着,当用户升级NDK后,你将可以受益于新的toolchain/platform而不必再去修改Android.mk. 1. Android.mk语法:首先看一个最简单的Android.mk的例子:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)讲解如下:LOCAL_PATH := $(call my-dir)每个Android.mk文件必须以定义LOCAL_PATH为开始。
它用于在开发tree中查找源文件。宏my-dir则由Build System提供。
返回包含Android.mk的目录路径。include $(CLEAR_VARS)CLEAR_VARS 变量由Build System提供。
并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。
所以清理后才能避免相互影响。LOCAL_MODULE := hello-jniLOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。
名字必须唯一且不包含空格。Build System会自动添加适当的前缀和后缀。
例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。LOCAL_SRC_FILES := hello-jni.cLOCAL_SRC_FILES变量必须包含将要打包如模块的C/C++ 源码。
不必列出头文件,build System 会自动帮我们找出依赖文件。缺省的C++源码的扩展名为.cpp. 也可以修改,通过LOCAL_CPP_EXTENSION。
include $(BUILD_SHARED_LIBRARY)BUILD_SHARED_LIBRARY:是Build System提供的一个变量,指向一个GNU Makefile Script。它负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。
并决定编译为什么。BUILD_STATIC_LIBRARY:编译为静态库。
BUILD_SHARED_LIBRARY :编译为动态库 BUILD_EXECUTABLE:编译为Native C可执行程序 2. NDK Build System变量:NDK Build System 保留以下变量名:以LOCAL_ 为开头的以PRIVATE_ ,NDK_ 或者APP_ 开头的名字。小写字母名字:如my-dir如果想要定义自己在Android.mk中使用的变量名,建议添加 MY_ 前缀。
2.1: NDK提供的变量:此类GNU Make变量是NDK Build System在解析Android.mk之前就定义好了的。2.1.1:CLEAR_VARS:指向一个编译脚本。
必须在新模块前包含之。 include $(CLEAR_VARS)2.1.2:BUILD_SHARED_LIBRARY:指向一个编译脚本,它收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。
并决定如何将你列出的Source编译成一个动态库。 注意,在包含此文件前,至少应该包含:LOCAL_MODULE and LOCAL_SRC_FILES 例如: include $(BUILD_SHARED_LIBRARY) 2.1.3:BUILD_STATIC_LIBRARY:与前面类似,它也指向一个编译脚本,收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。
并决定如何将你列出的Source编译成一个静态库。 静态库不能够加入到Project 或者APK中。
但它可以用来生成动态库。LOCAL_STATIC_LIBRARIES and LOCAL_WHOLE_STATIC_LIBRARIES将描述之。
include $(BUILD_STATIC_LIBRARY) 2.1.4: BUILD_EXECUTABLE: 与前面类似,它也指向一个编译脚本,收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并决定如何将你列出的Source编译成一个可执行Native程序。
include $(BUILD_EXECUTABLE) 2.1.5:PREBUILT_SHARED_LIBRARY:把这个共享库声明为 “一个” 独立的模块。指向一个build 脚本,用来指定一个预先编译好多动态库。
与BUILD_SHARED_LIBRARY and BUILD_STATIC_LIBRARY不同,此时模块的LOCAL_SRC_FILES应该被指定为一个预先编译好的动态库,而非source file. LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := foo-prebuilt # 模块名LOCAL_SRC_FILES := libfoo.so # 模块的文件路径(相对于 LOCAL_PATH)include $(PREBUILT_SHARED_LIBRARY) # 注意这里不是 BUILD_SHARED_LIBRARY这个共享库将被拷贝到 $PROJECT/obj/local 和 $PROJECT/libs/ (stripped) 主要是用在将已经编译好的第三方库使用在本Android Project中。
3.android.mk怎么在jni编译时把系统头文件包含
Android.mk文件用来告知NDK Build 系统关于Source的信息。
Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。
Android.mk文件语法允许我们将Source打包成一个"modules". modules可以是:静态库动态库。只有动态库可以被 install/copy到应用程序包(APK). 静态库则可以被链接入动态库。
可以在一个Android.mk中定义一个或多个modules. 也可以将同一份source 加进多个modules.Build System帮我们处理了很多细节而不需要我们再关心。例如:你不需要在Android.mk中列出头文件和外部依赖文件。
NDK Build System自动帮我们提供这些信息。这也意味着,当用户升级NDK后,你将可以受益于新的toolchain/platform而不必再去修改Android.mk. 1. Android.mk语法:首先看一个最简单的Android.mk的例子:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := hello-jni.cinclude $(BUILD_SHARED_LIBRARY)讲解如下:LOCAL_PATH := $(call my-dir)每个Android.mk文件必须以定义LOCAL_PATH为开始。
它用于在开发tree中查找源文件。宏my-dir则由Build System提供。
返回包含Android.mk的目录路径。include $(CLEAR_VARS)CLEAR_VARS 变量由Build System提供。
并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。
所以清理后才能避免相互影响。LOCAL_MODULE := hello-jniLOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。
名字必须唯一且不包含空格。Build System会自动添加适当的前缀和后缀。
例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。LOCAL_SRC_FILES := hello-jni.cLOCAL_SRC_FILES变量必须包含将要打包如模块的C/C++ 源码。
不必列出头文件,build System 会自动帮我们找出依赖文件。缺省的C++源码的扩展名为.cpp. 也可以修改,通过LOCAL_CPP_EXTENSION。
include $(BUILD_SHARED_LIBRARY)BUILD_SHARED_LIBRARY:是Build System提供的一个变量,指向一个GNU Makefile Script。它负责收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。
并决定编译为什么。BUILD_STATIC_LIBRARY:编译为静态库。
BUILD_SHARED_LIBRARY :编译为动态库 BUILD_EXECUTABLE:编译为Native C可执行程序 2. NDK Build System变量:NDK Build System 保留以下变量名:以LOCAL_ 为开头的以PRIVATE_ ,NDK_ 或者APP_ 开头的名字。小写字母名字:如my-dir如果想要定义自己在Android.mk中使用的变量名,建议添加 MY_ 前缀。
2.1: NDK提供的变量:此类GNU Make变量是NDK Build System在解析Android.mk之前就定义好了的。2.1.1:CLEAR_VARS:指向一个编译脚本。
必须在新模块前包含之。 include $(CLEAR_VARS)2.1.2:BUILD_SHARED_LIBRARY:指向一个编译脚本,它收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。
并决定如何将你列出的Source编译成一个动态库。 注意,在包含此文件前,至少应该包含:LOCAL_MODULE and LOCAL_SRC_FILES 例如: include $(BUILD_SHARED_LIBRARY) 2.1.3:BUILD_STATIC_LIBRARY:与前面类似,它也指向一个编译脚本,收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。
并决定如何将你列出的Source编译成一个静态库。 静态库不能够加入到Project 或者APK中。
但它可以用来生成动态库。LOCAL_STATIC_LIBRARIES and LOCAL_WHOLE_STATIC_LIBRARIES将描述之。
include $(BUILD_STATIC_LIBRARY) 2.1.4: BUILD_EXECUTABLE: 与前面类似,它也指向一个编译脚本,收集自从上次调用 include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并决定如何将你列出的Source编译成一个可执行Native程序。
include $(BUILD_EXECUTABLE) 2.1.5:PREBUILT_SHARED_LIBRARY:把这个共享库声明为 “一个” 独立的模块。指向一个build 脚本,用来指定一个预先编译好多动态库。
与BUILD_SHARED_LIBRARY and BUILD_STATIC_LIBRARY不同,此时模块的LOCAL_SRC_FILES应该被指定为一个预先编译好的动态库,而非source file. LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := foo-prebuilt # 模块名LOCAL_SRC_FILES := libfoo.so # 模块的文件路径(相对于 LOCAL_PATH)include $(PREBUILT_SHARED_LIBRARY) # 注意这里不是 BUILD_SHARED_LIBRARY这个共享库将被拷贝到 $PROJECT/obj/local 和 $PROJECT/libs/ (stripped) 主。
4.Android.mk这个文件在哪里呢
android.mk 是android开发中,用来编译jni代码的
在开发工具中,new jni 即可创建一个 android.mk文件
一个android.mk文件可以编译多个模块,每个模块属下列类型之一:
1. apk程序 一般的android程序,编译打包生成apk文件
2. java库 java类库,编译打包生成jar文件
3. c\c++应用程序 可执行的c\c++应用程序
4. c\c++静态库 编译生成c\c++静态库,并打包成.a文件
5. c\c++共享库 编译生成共享库(动态链接库),并打包成.so文, 有且只有共享库才能被安装/复制到您的应用软件(apk)包中。
5.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/product/generic/obj/EXECUTABLE out/target/product/generic/obj/STATIC_LIBRARY out/target/product/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)。
6.怎么在android.mk文件中设置ndk module path
import-module的功能导入外部模块的.mk文件 ,和 include基本一样。
概念上的区别是include导入的是由我们自己写的.mk。而import-module导入的是外部库、外部模块提供的.mk。
用法上:include的路径是.mk文件的绝对路径。而import是设置的路径指定到模块的.mk所在目录,是相对于NDK_MODULE_PATH中的路径列表的相对路径。
import-module的使用$(call import-module,相对路径)-----------------场景重现---------------------------比如我的当前模块要调用 cocosdenshion模块。1\找到模块名字和路径找到cocosdenshion模块的android.mk的位置。
F:\cocos2d-x\CocosDenshion\android\android.mk打开看到:LOCAL_MODULE := cocosdenshion_shared。include $(BUILD_STATIC_LIBRARY)那么cocosdenshion模块在我自己的android.mk中引用它是应该叫它cocosdenshion_shared。
而且他是个静态库。2\在Android.mk中引用模块就像普通代码中引用头文件一样。
在android.mk的最后一行调用$(call import-module,CocosDenshion/android)来导入模块。注意:我的NDK_MODULE_PATH=/cygdrive/f/cocos2d-x 是已经设置好了的。
如果引用的模块里面也有import-module,他的相对路径也要加到NDK_MODULE_PATH中。如果它没被加进去的话。
然后LOCAL_WHOLE_STATIC_LIBRARIES += cocos_jpeg_static声明我这模块要引用该静态库模块。-------------------------------------------------------import-module的使用注意1、设置路径时,注意与NDK_MODULE_PATH中的路径相互配合。
1、导入模块的.mk中如果也有import-module,则注意其相对路径也要在NDK_MODULE_PATH中。2、上面说了import-module和include一样。
如果import-module和Include包含了同一个.mk,会报重复包含的错误。NDK_MODULE_PATH的配置NDK_MODULE_PATH的作用 NDK_MODULE_PATH是一个很重要的变量,当android.mk中使用了$(call import-module,XXX)函数引入外部库文件时会用到,用以指示该往哪里去找这个文件。
如果NDK_MODULE_PATH 没有设置或者设置不正确。编译时都是报错 Are you sure your NDK_MODULE_PATH variable is properly defined。
NDK_MODULE_PATH的设置与格式 NDK_MODULE_PATH 是一个环境变量,不是android.mk中设置的变量。 NDK_MODULE_PATH多个路径用冒号分割。
不是分号!且整个字符串中间不能有空格。格式不正确也会报错上面的错误的。
设置NDK_MODULE_PATH的方法 1、在系统环境里手动添加这个环境变量, 2、在build_native.sh中 运行ndk-build之前使用export命令定义环境变量NDK_MODULE_PATH。 如:export NDK_MODULE_PATH=路径1:路径2:路径3 3、直接将NDK_MODULE_PATH=路径1:路径2 加到 ndk-build命令的参数后面。
ndk-build的参数最终会直接传给make. 如:$NDK_ROOT_LOCAL/ndk-build -C $HELLOWORLD_ROOT NDK_MODULE_PATH=路径1:路径2(命令 make aaa=213 //在编译makefile之前将aaa当作环境变量设置为213.) 4、还可以在android.mk中设置NDK_MODULE_PATH 在import语句之前加入,$(call import-add-path,$(LOCAL_PATH)/platform/third_party/android/prebuilt) 将一个新的路径加入NDK_MODULE_PATH变量。NDK_MODULE_PATH的注意 感觉NDK_MODULE_PATH中路径中有那些,自己一定要时刻清楚。
路径尽量设在模块某个共同的根目录下,不要舍得太乱,免得用起来乱。
7.android.mk是用什么语言写的
当你需要使用jni的时候,你需要创建一个native工程。android.mk就是一个makefile配置文件,帮你把c/c++的代码编译成动态库so的。创建的方式有两种:
1. 在工程根目录里手动创建一个目录叫jni,在里面新建一个android.mk,然后创建c,cpp文件,把他们配置到android.mk里
2. 右键工程,选择android tools->add native support自动生成:
转载请注明出处育才学习网 » android中带jni的mk文件怎么写