`

Android 开发手记四(C可执行程序编译实例 .)

 
阅读更多

 继续 NDK 的开发。上次我们的实例中,对 C 应用程序的编译链接,自己编写的 makefile 是件比较困难的事情。虽然最后成功了,不过中间经历了不少坎坷。我们现在研究下如何用 NDK 提供的 build 工具,实现我们的目标。

 

        还是以 Hello Android 工程为例。
 

        建立好工程 hello-a ,在 jni 目录下创建文件 hello-a.c, 文件内容如下。

#include <stdio.h> 
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 来创建编译环境,需要在 <NDK>APPS/ 目录下,创建同名的工程,然后添加 Application.mk, 然后编译的时候,执行 make APP=yourproject 。 新的版本不需要再去创建这个同名的 app 工程,直接用编译工具 ndk-build 就可以了。这个工具实际上是对 build 编译工具的一层封装,每次编译都会自动去设置一次编译环境,然后调用工程中的 Android.mk 来进行工程的编译,原来的那个 Application.mk 也不是必须的了,只有在需要的时候,才去创建。不过相比前一版本,就是增加了对 AndroidManifest.xml 文件的检查。

       我们如何解决这个问题呢?有两个办法:一是手动创建一个 AndroidManifest.xml 文件,然后里面内容为空项就行,如

<?xml version="1.0" encoding="utf-8"?> 

<manifest/> 
 

      我们再次运行 ndk-build ,成功。

 

 我们试试可否正常运行:

 看到了 Hello Android! 成功了。
       这种方法虽然解决了问题,但是并没有理解问题的实质。好,保持求知的强劲势头和欲望,这就有了第二种解决办法。
       我们先来看看开发者对这个问题的描述:
“The manifest is only required to find the top-level of your project path (ndk-build can be invoked in any sub-directory of your project).”

       那么,我们只要在编译前指定工程路径就行了,如何做呢?简单!
       ndk-build NDK_PROJECT_PATH=/path/to/project

       好,我们试试看

成功了,看看在模拟器上的运行效果:

摘自:http://blog.csdn.net/l____j/article/details/5787746

分享到:
评论

相关推荐

    Android开发手记一_NDK编程实例

    ### Android开发手记一_NDK编程实例 #### 一、开发环境的搭建 在开始具体的NDK编程之前,首先需要确保开发环境已经被正确地搭建起来。对于初次接触Android NDK开发的朋友来说,拥有一个良好的环境配置是至关重要的...

    Android开发手记--环境配置.pdf

    这篇“Android开发手记--环境配置”主要介绍了如何在Windows XP环境下,利用MyEclipse进行Android开发的初始设置。 首先,你需要下载Android SDK。SDK(Software Development Kit)是Android开发的基础,包含了开发...

    Android开发手记--环境配置[收集].pdf

    Android 开发手记 -- 环境配置 Android 开发手记是基于 Linux 内核的手机系统,使用 MyEclipse + Windows XP 作为开发工具,当然在 Linux 下开发是更好的选择。以下是 Android 开发环境配置的步骤: 第一步:下载 ...

    网页开发手记.HTML.CSS.JavaScript实战详解

    《网页开发手记--实战详解》由叶青、孙亚南、孙泽军编著,笔者将网页制作技术粗略划分为前台浏览器端技术和后台服务器端技术。本书主要学习前台浏览器端技术,也就是静态页面制作技术。早期只需要使用HTML即可单独...

    AndroidStudio开发环境搭建手记[归纳].pdf

    - 在文件末尾添加:`disable.android.first.run=true`。 - 保存并重启Android Studio。 **3. 配置SDK路径** - 如果新建项目出现问题,可能需要手动配置SDK路径。 - 进入`Preferences`或`Settings` -&gt; `Build, ...

    Android学习手记:第一个应用程序!

    在Android开发领域,创建第一个应用程序是每个初学者的必经之路。这个过程涵盖了基础的环境配置、项目构建、布局设计以及程序逻辑编写等关键步骤。本文将基于"Android学习手记:第一个应用程序!"这一主题,结合源码...

    Android学习手记三:完善程序!

    这篇“Android学习手记三:完善程序!”将深入探讨如何通过理解和运用源码,以及合理利用工具来提升应用的质量。 首先,源码的理解是Android开发中的关键。阅读和理解开源库或系统的源码,可以让我们更好地了解内部...

    网页开发手记htmlcssjavascript实战详解

    网页开发手记htmlcssjavascript实战详解 电子工业出版社 叶青 孙亚南 孙泽军编著

    Wicket1.4开发手记(四)[借鉴].pdf

    《Wicket 1.4 开发手记:构建Ajax级联选择框》 在Web开发领域,Apache Wicket是一个强大的Java框架,它以其组件化和模型-视图-控制器(MVC)架构著称。本篇开发手记将聚焦于使用Wicket 1.4版本创建一个基于Ajax的...

    Android应用开发精解 pdf

    高磊、杨诚、元凯编著的《Android应用开发精解(工程师经验手记)》以Android应用开发所需要的技术为线索,先后讲解了SDK一些工具的使用、UI开发、Service开发、数据存储、图形动画、网络开发、硬件操作、结合Web...

    网页开发手记 htmlcss js

    开发网页看 网页开发手记 htmlcss js 大家可以看看

    [MATLAB.GUI设计学习手记(第2版)].罗华飞.扫描版.高清

    matlab的gui设计经典教程,适合初学者、开发人员等读者参考。

    网页开发手记:486个JavaScript网页特效详解_光盘源文件

    本资料“网页开发手记:486个JavaScript网页特效详解”正是针对这一主题进行深入探讨的资源,包含了大量实用的JavaScript特效代码实例。 首先,我们要理解JavaScript的基本概念。JavaScript是一种解释型的、基于...

    C语言开发手记

    ### C语言开发手记知识点概览 #### 一、计算机处理问题的方法 ...通过以上四个方面的总结,我们可以看到《C语言开发手记》中涵盖了从计算机处理问题的基本方法到具体的编程实践,为学习C语言提供了全面而深入的指导。

    Android SDK安装手记

    Android SDK(Software Development Kit)是Android应用程序开发的核心工具集,它包含了开发者创建、测试和调试Android应用所需的所有资源。SDK不仅包括了核心库文件,还包含了各种工具,如模拟器、调试工具等。 ##...

    网页开发手记 HTML

    一本描述网页开发的书,很全,希望大家能喜欢

    Android中使用文件存储实现手记应用的代码清单.pdf

    在Android开发中,文件存储是一种常见的数据持久化方式,尤其适用于小型数据的保存,例如用户的手记应用。本文将详细解析如何使用文件存储在Android中实现一个简单的手记应用。 首先,我们来看`MainActivity.java`...

    《MATLAB GUI设计学习手记》(第4版)源码.part1,matlabgui设计实例,matlab源码.zip

    MATLAB GUI设计是MATLAB(Matrix Laboratory)编程环境中的一种用户界面开发工具,它允许程序员创建交互式的图形用户界面,使得用户能够通过图形化的方式与程序进行交互,而非仅仅依赖于命令行输入。《MATLAB GUI...

    同人游戏开发手记-附件(2.3.2)

    同人游戏开发手记-附件(2.2.2-2.2.6) 具体说明见我的博客(http://blog.csdn.net/fosly) 一如既往的骗5个积分, 积分不够的请留个Email, C屌相信总会有不缺分儿的人出现的, 所以坚决不免分

    《网页开发手记:HTML+CSS+JavaScript实战详解》

    《网页开发手记:HTML+CSS+JavaScript实战详解》是一本专门为初学者设计的Web前端技术教程,旨在帮助读者深入理解和掌握网页开发的核心技术。这本书的内容涵盖了HTML、CSS和JavaScript这三个网页开发的基础和核心...

Global site tag (gtag.js) - Google Analytics