android中带jni的mk文件怎么写

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文件怎么写

转载请注明出处育才学习网 » android中带jni的mk文件怎么写

知识

字母拼音a怎么写

阅读(288)

本文主要为您介绍字母拼音a怎么写,内容包括汉语拼音a的正确书写,拼音a怎么写笔顺图片,拼音字母a怎么写。第一笔左半圆

知识

糖尿病病假条怎么写

阅读(201)

本文主要为您介绍糖尿病病假条怎么写,内容包括怎么写糖尿病的诊断书,病假条怎么写范文大全,病假条怎么写。既然是不想参加劳动,就写甲亢好了!如果你用糖尿病的话不觉得比较麻烦吗?特别是在治疗方面! 如果写甲状腺功能亢进的话,一般我们要求病人

知识

清水的蜻笔画怎么写

阅读(223)

本文主要为您介绍清水的蜻笔画怎么写,内容包括蜻的笔画顺序怎么写,蜻的笔画顺序怎么写,蜻笔画顺序怎么写。蜻笔画顺序这样写:如图:

知识

拒稿的审稿意见怎么写

阅读(217)

本文主要为您介绍拒稿的审稿意见怎么写,内容包括审稿意见怎么写,如何委婉地回复审稿人的拒稿意见,如何面对无理的审稿意见。原发布者:玄武君如何学习审稿专家学者为什么愿意拿出大量的时间审稿呢?为期刊审稿是义务,也是一份荣耀,更是自我价值的

知识

关于小动物日记怎么写

阅读(228)

本文主要为您介绍关于小动物日记怎么写,内容包括写小动物日记,喜爱小动物日记怎么写二年级下册,写一个小动物日记。今天是星期天,我和妈妈准备去逛街了。经过一家小宠物专卖店时,我乞求妈妈买下了一只小绿龟。回家后,我将它放入鱼缸,仔细观察起

知识

供电开户申请书怎么写

阅读(274)

本文主要为您介绍供电开户申请书怎么写,内容包括用电开户申请书范文,电力局的开户申请书怎么写,农村电表开户申请书怎么写。原发布者:钩标本读个人用电申请书范本 申请书的理由要充分、合理,实事求是,不能虚夸和杜撰,下面是小编收集整理的个人

知识

幼儿园同事评价怎么写

阅读(266)

本文主要为您介绍幼儿园同事评价怎么写,内容包括我在幼儿园工作一个学期过去了要写对同事的评语了,怎样评价幼儿园的同事,幼儿教师对幼儿评价怎么写。给你一篇文章,希望对你有启发!天24个小时中有大部分时间是在工作的,那么在这些时间里和我们

知识

dhc活动码怎么写

阅读(181)

本文主要为您介绍dhc活动码怎么写,内容包括DHC新会员注册里里面的DHC合作伙伴发行的兑换码(悠哉旅游网兑,DHC一般每年什么时候会做活动,请帮我看看DHC化妆品的批号如何看谢谢DHC批号为502T和5爱问。关于化妆品日期的鉴别 BIOTHERM(碧欧泉) 通

知识

html5进度条怎么写

阅读(210)

本文主要为您介绍html5进度条怎么写,内容包括html5css3怎么制作简单的进度条,html下图进度条怎么实现,html5怎么控制进度条。HTML代码:<section class="container"> <div class="progress"> <span styl

知识

html5简历怎么写

阅读(229)

本文主要为您介绍html5简历怎么写,内容包括HTML个人简历怎么做,HTML5培训:前端开发简历要怎么写,用HTML编写个人简历怎么做要用<p><font><table>等标记符,简单的。HTML编写个人简历代码table表格样式的:<html> <head> <title>个人简历表</tit

知识

论文draft怎么写

阅读(493)

本文主要为您介绍论文draft怎么写,内容包括论文投稿处于draft是什么意思,论文的conclusion怎么写,论文导言怎么写。draft draft[英][drɑ:ft][美][dræft] n.汇票; 草稿; 选派; (尤指房间、烟囱、炉子等供暖系统中的)(小

知识

马拉松兔子宣言怎么写

阅读(311)

本文主要为您介绍马拉松兔子宣言怎么写,内容包括马拉松比赛中的兔子是指什么,什么是马拉松“兔子”,马拉松中的“兔子”有什么用。马拉松“兔子”是配速员/领跑员(Pacer)的另一个名称。 有传言说这位领跑员因为赛犬而被称为兔子 - 首先释放一

知识

骆驼的英语音标怎么写

阅读(265)

本文主要为您介绍骆驼的英语音标怎么写,内容包括骆驼英语怎么读,骆驼的英语读音,骆驼的英语单词怎么说。骆驼的英语音标为:英 [ˈkæml] 美 [ˈkæml] 骆驼英语写法为:camel词性:n.骆驼;驼色复数: camels例句:I w

知识

石逍遥的英语怎么写

阅读(211)

本文主要为您介绍石逍遥的英语怎么写,内容包括1000000的英语怎么说,1313113用英语怎么说,王科杰用英语怎么写。1000000的英文:One millionmillion 读法 英 [mɪljən] 美 [mɪljən] n. 百万;无数2、adj

知识

ctl文件怎么写

阅读(257)

本文主要为您介绍ctl文件怎么写,内容包括怎么新建一个ctl文件,用txt另存为找不到ctl文件格式的选项,sqlloader的CTL文件里filter怎么写,oracle使用sqlldr导入csv文件,如何写ctl命令,使我从csv中选择字个别。@echo offset rq=%date:~,10%set

知识

androidurl文件路径怎么写

阅读(290)

本文主要为您介绍androidurl文件路径怎么写,内容包括android文件路径怎么写,访问androidassets下的文件路径要怎么写,求教android相对路径的写法。public static void writeFileData(String fileName, String message){tr

知识

文件柜英文怎么写

阅读(243)

本文主要为您介绍文件柜英文怎么写,内容包括文件柜用英语怎么说,所有柜子的英文怎么表达,写一篇关于购买木质文件柜的英文作文。衣柜:wardrobe英 [ˈwɔ:drəʊb] 美 [ˈwɔ:rdroʊb] n.行头;衣柜,衣橱;藏衣室;(个人,戏团的)全部服装S

知识

公司成立部门文件怎么写

阅读(321)

本文主要为您介绍公司成立部门文件怎么写,内容包括公司成立部门通知如何写,请问公司新成立一个部门通知怎么写,公司成立部门通知如何写。公司文件书写格式标准 总则 ;指导思想 文书的书写格式是体现企业正规化的重要内容。为加强这一工作环

知识

投标书技术文件怎么写

阅读(230)

本文主要为您介绍投标书技术文件怎么写,内容包括标书里的技术响应文件怎么写,技术投标书该如何写,工程投标书技术标怎么写。原发布者:园丁好辛苦投标技术响应文件附件一询价响应承诺函致:(采购人)根据贵方为(采购项目名称)(项目编号:)的询价公告,我方

知识

xml文件if判断怎么写

阅读(262)

本文主要为您介绍xml文件if判断怎么写,内容包括js在解析XML是我想在if时判断标签名称,应该怎么写,如下if()括号,在xml中怎样进行if,在xml中怎样进行if。"content-35350036" class="reply-text mb10">if (document.f.uname.valu

知识

android怎么写jni

阅读(224)

本文主要为您介绍android怎么写jni,内容包括如何在Android下使用JNI,在android平台下写得JNI放在项目哪里呢,JNI后缀名是什么后面还有,如何在Android下使用JNI。Android中JNI是编译so库的源代码,编译成功后会生成SO库,android中最终是使用SO

知识

ct文件怎么用

阅读(245)

本文主要为您介绍ct文件怎么用,内容包括CT文件怎么用,CT文件怎么用,.ct文件用什么打开啊。使用DICOM看图软件;DICOM开发包(SDK)DICOM是

[/e:loop]