关于android NDK开发中application.mk文件的疑惑

application.mk文件中有这样一条语句"APP_CPPFLAGS+=-DXD_PAPAYA",同时我在c++代码中找不到XD_PAPAYA的宏定义,怀疑是不是跟... application.mk文件中有这样一条语句"APP_CPPFLAGS += -DXD_PAPAYA",同时我在c++代码中找不到XD_PAPAYA的宏定义,怀疑是不是跟上面那句有关系,我想问这上面那条语句什么意思?是模块中定义了一个XD_PAPAYA宏吗?在此之前,我查过很多关于android.mk和application.mk文件的各种资料,大多都只是谈了下文件中定义的系统变量的含义,以及make函数宏,没有涉及application.mk文件的语法怎样及其含义,希望路过大神能就此给个资料链接或方向,小弟感激不尽:-) 展开
 我来答
2421480
推荐于2016-03-27 · TA获得超过1660个赞
知道小有建树答主
回答量:2289
采纳率:11%
帮助的人:385万
展开全部
介绍:
  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<something>.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。
百度网友7202372
2012-11-26 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:290
采纳率:0%
帮助的人:157万
展开全部
application.mk是android才有的mk文件,同样具有mk文件特性,-D是宏定义,你可以去掉那句,再运行就知道在哪调用了,而且application.mk文件用于.a。
追问
那我是不是可以这样理解,application.mk文件中APP_CPPFLAGS += -DXD_PAPAYA,为我的c++源码部分定义了一个XD_PAPAYA宏?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式