永发信息网

怎么在android.mk文件中设置ndk module path

答案:2  悬赏:40  手机版
解决时间 2021-02-18 06:35
怎么在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中路径中有那些,自己一定要时刻清楚。路径尽量设在模块某个共同的根目录下,不要舍得太乱,免得用起来乱。
全部回答
介绍: android sdk是一个允许android应用开发人员使用c或c++源文件编译并嵌入到本机源代码中的应用程序包的一组工具。 重要说明: android ndk只能用于android 1.5以上版本 1.android ndk的目的: android虚拟机允许你的应用程序源代码通过jni调用在本地实现的源代码,简单的说,这就意味着: 你的应用程序将声明一个或多个用’native’关键字的方法用来指明它们是通过本地代码实现的 例如:native byte[] loadfile(string filepath) 你必须提供包含实现这些方法的共享库(就是.so),将共享库打包到你的应用程序包apk中,这些库文件必须根据标准的unix约定来命名为 lib.so,并且是需要包含一个标准的jni的接口,例如 libfileloader.so 你的应用程序必须明确的装载这些库文件(.so文件),比如,在程序的开始装载它,只需要简单的添加几句源代码: java代码: static { system.loadlibrary(“fileloader”); } 注意:这里你不必再将前缀lib和后缀.so写入。 android ndk对于android sdk只是个组件,它可以帮你: 生成的jni兼容的共享库可以在大于android1.5平台的arm cpu上运行 将生成的共享库拷贝到合适的程序工程路径的位置上,以保证它们自动的添加到你的apk包中(并且签名的) 在以后的版本中,我们将提供来帮助你的源代码通过远程gdb连接和尽可能多的源代码的信息。 而且,android ndk还提供: 一组交叉编译链(编译器、链接器等)来生成可以在linux,os x和windows(用cygwin)运行的二进制文件 一组与由android平台提供的稳定的本地api列表的头文件 它们在docs/stable-apis.html中有说明 重要提示: 记住,在以后的更新和发布平台中,android系统镜像中的大多数本地系统库并不是一成不变的,而是可以彻底改变,甚至删除的 一个编译系统(build system)可以允许开发者写一个非常短的编译文件(build files)去描述哪个源代码需要编译,并且怎样编译。编译系统可以解决所有的toolchain/platform/cpu/abi细节的问题。并且,较晚的ndk版本中还添加了更多的可以不用改变开发者的编译文件的情况下的toolchains,platforms,系统接口。 2.android ndk的缺点 ndk并不是一个可以编写通用的源代码并且可以在android设备上运行的方法,你的应用程序还是需要使用java程序,适当的处理系统事件来避免“应用程序没有反应”的对话框或者处理android应用程序的生命周期 注意:可以适当的在源代码中写一个复杂的应用程序,用于启动/停止一个小型的“应用程序包” 强烈建议很好地理解的 jni,因为许多操作在这种环境要求的开发人员,都采取具体的行动,不一定在常典型的本机代码。这些措施包括: 不能通过指针直接访问vm的对象。比如:你不能安全的得到一个指向string对象的16位char数组的循环遍历 需要显示引用管理本机代码时候要保持处理jni调用之间的vm对象 ndk在android平台仅仅提供了有限的本地api和库文件的支持的系统头文件,然而一个标准的android系统镜像包括许多本地共享库,这些都应该被考虑在更新和发行版本的可以彻底改变的实现细节 如果android系统库没有明确的被ndk明确的支持,然后应用程序不应该依赖于它提供的,或者打破了将来在各种设备上的无线系统更新 选定的系统库将逐渐被添加到稳定的ndk api中。 3.ndk开发实践 下面将给出一个怎样用android ndk开发本地代码的粗略的概述 (1) 把本地代码放在$project/jni/…下,比如将hello.c放到apps/hello/jni/目录下 (2) 在你的ndk编译系统中在$project/jni/android.mk来描述你的源代码 (3) 可选:在$project/jni/application.mk到你的编译系统中来详细描述你的项目,尽管你开始的话不一定需要它,但是它允许你使用更多的cpu或者覆盖编译器/链接器的标记 (4) 从你的项目的目录开始通过运行”$ndk/ndk-build”来编译你的代码,或者从子目录开始 (5) 最后一步可以copy,万一成功,剥离共享库的应用层序需要你的应用程序的项目根目录。然后你通过通常的方法来生成最终的apk。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
您好!有谁知道桐城到南昌汽车随车电话号码?
求用0 1 2 3 四个数,组成没有重复数字的四位
郫,,这个是什么字?拼音
听说八字可以看出另一半的升高,长相,姓氏,
圆x^2+y^2-2x+6y+5a=0关于直线y=x+2b成轴对称
美剧陨星坠落第五季多长时间出一集
某生产性企业为增值税一般纳税人,主要生产A
“大奥”是什么东西?
中兴N600 如何设置手机铃声
植物对刺激不能作出任何反应。F对错
潜水线轮是什么?有什么作用?
有哪些超好看的有女主的动漫 国漫
初一科技小制作
一个月40G流量够智能电视用吗?
他们最幸福txt下载
推荐资讯
百姓厨房在什么地方啊,我要过去处理事情
新巢家具地址有知道的么?有点事想过去
【挂钩梯】简述挂钩梯的使用要求。
【愈伤组织】植物组织培养中的愈伤组织是如何
千·里·驹超值鞋店在什么地方啊,我要过去处
狗狗可以吃松花蛋和冰糖葫芦么大神们帮帮忙
微信服务号换成订阅号怎么办
plant cell 期刊怎么样
【圣诞节贺卡怎么写】圣诞节的贺卡怎么写
菲琳时尚婚礼2号工作室在什么地方啊,我要过
要弄一个英语手抄报,主题是弘扬正义、民族和
采用透析法进行蛋白质脱盐的原理
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?