【转】Android 开发手记二 C可执行程序编译实例
来源:百度文库 编辑:神马文学网 时间:2024/04/28 22:48:53
继续NDK的开发。上次我们的实例中,对C应用程序的编译链接,自己编写的makefile是件比较困难的事情。虽然最后成功了,不过中间经历了不少坎坷。我们现在研究下如何用NDK提供的build工具,实现我们的目标。
还是以HelloAndroid工程为例。
建立好工程hello-a,在jni目录下创建文件hello-a.c,文件内容如下。
#include
int main()
{
printf("Hello Android!\n");
return 0;
}
在该目录下,创建Android.mk文件,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloa
LOCAL_SRC_FILES := hello-a.c
include $(BUILD_EXECUTABLE)
这里需要注意的上面红色部分,指定我们现在要生成一个可执行的文件。
在工程下运行ndk-build,结果提示错误:
这个提示告诉我们,在工程中没有找到AndroidManifest.xml文件。若创建了Java应用程序,会自动生成该文件。在该文件中,描述了程序包的一个全局变量, 包括暴露的应用组件(activities, services等等)和为每个组件的实现类, 什么样的数据可以操作, 以及在什么地方运行。而这里,我们根本不需要这个文件。那么为什么会有这样的错误提示呢?
其实这个和NDK的版本有关系。现在最新的版本,就是我用的版本NDK r4版,与之前的版本,一个很大的改变,就是对工程源文件路径及组织结构的变化。在NDK r3版,按装NDK后,需要运行setup.sh来创建编译环境,需要在APPS/目录下,创建同名的工程,然后添加Application.mk, 然后编译的时候,执行make APP=yourproject。新的版本不需要再去创建这个同名的app工程,直接用编译工具ndk-build就可以了。这个工具实际上是对build编译工具的一层封装,每次编译都会自动去设置一次编译环境,然后调用工程中的Android.mk来进行工程的编译,原来的那个Application.mk也不是必须的了,只有在需要的时候,才去创建。不过相比前一版本,就是增加了对AndroidManifest.xml文件的检查。
我们如何解决这个问题呢?有两个办法:一是手动创建一个AndroidManifest.xml文件,然后里面内容为空项就行,如
我们再次运行ndk-build,成功。
我们试试可否正常运行:
看到了Hello Android! 成功了。
这种方法虽然解决了问题,但是并没有理解问题的实质。好,保持求知的强劲势头和欲望,这就有了第二种解决办法。
我们先来看看开发者对这个问题的描述:
“The manifest is only required to find thetop-level of your project path (ndk-build can be invoked in anysub-directoryof your project).”
那么,我们只要在编译前指定工程路径就行了,如何做呢?简单!
ndk-buildNDK_PROJECT_PATH=/path/to/project
好,我们试试看
成功了,看看在模拟器上的运行效果:
还是以HelloAndroid工程为例。
建立好工程hello-a,在jni目录下创建文件hello-a.c,文件内容如下。
#include
int main()
{
printf("Hello Android!\n");
return 0;
}
在该目录下,创建Android.mk文件,内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloa
LOCAL_SRC_FILES := hello-a.c
include $(BUILD_EXECUTABLE)
这里需要注意的上面红色部分,指定我们现在要生成一个可执行的文件。
在工程下运行ndk-build,结果提示错误:
这个提示告诉我们,在工程中没有找到AndroidManifest.xml文件。若创建了Java应用程序,会自动生成该文件。在该文件中,描述了程序包的一个全局变量, 包括暴露的应用组件(activities, services等等)和为每个组件的实现类, 什么样的数据可以操作, 以及在什么地方运行。而这里,我们根本不需要这个文件。那么为什么会有这样的错误提示呢?
其实这个和NDK的版本有关系。现在最新的版本,就是我用的版本NDK r4版,与之前的版本,一个很大的改变,就是对工程源文件路径及组织结构的变化。在NDK r3版,按装NDK后,需要运行setup.sh来创建编译环境,需要在
我们如何解决这个问题呢?有两个办法:一是手动创建一个AndroidManifest.xml文件,然后里面内容为空项就行,如
我们再次运行ndk-build,成功。
我们试试可否正常运行:
看到了Hello Android! 成功了。
这种方法虽然解决了问题,但是并没有理解问题的实质。好,保持求知的强劲势头和欲望,这就有了第二种解决办法。
我们先来看看开发者对这个问题的描述:
“The manifest is only required to find thetop-level of your project path (ndk-build can be invoked in anysub-directoryof your project).”
那么,我们只要在编译前指定工程路径就行了,如何做呢?简单!
ndk-buildNDK_PROJECT_PATH=/path/to/project
好,我们试试看
成功了,看看在模拟器上的运行效果:
【转】Android 开发手记二 C可执行程序编译实例
C 程序开发经典实例之二 - 软件屋
编译资源进入可执行程序
C 程序开发经典实例之一 - 软件屋
C 程序开发经典实例之一 - 软件屋
C 程序开发经典实例之三 - 软件屋
C 程序开发经典实例之四 - 软件屋
C 程序开发经典实例之五 - 软件屋
C 程序开发经典实例之六 - 软件屋
C 程序开发经典实例之七 - 软件屋
C 程序开发经典实例之八 - 软件屋
android上进行c/C 开发测试(转) - 奋进 - 博客园
C/C++编译的程序占用内存的划分
Android源码编译说明
Android源码编译_
android 编译错误
如何编译这段Tuxedo Pro*C程序? 环境设置与编译选项
Ubuntu下编译Android源码全过程(转)
VC++程序编译链接的原理与过程 - CSAI.cn程序开发
J2ME游戏程序开发实例精讲详解(转载)
android源码下载以及编译
界面设计、交互设计及程序开发(二)
gcc编译选项介绍(转) - 技术文档 - 程序开发 Linux时代 - 开源、自由、共享 - 中国最大的Linux技术社区
MTK程序编译--01