以Hello Android工程为例。

建立好工程hello-a,在jni目录下创建文件hello-a.c,文件内容如下。(注意是jni目录,使用src目录编译会出错)

#include <stdio.h>int main(){    printf("Hello Android!\n");    return 0;}

在该目录下,创建Android.mk文件,内容如下:

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE:= helloaLOCAL_SRC_FILES := hello-a.cinclude $(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!成功了。

这种方法虽然解决了问题,但是并没有理解问题的实质。好,保持求知的强劲势头和欲望,这就有了第二种解决办法。

我们先来看看开发者对这个问题的描述:

“Themanifest 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

好,我们试试看

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)Studio创建文件,自动生成类头
  6. android binder相关
  7. Android(安卓)使用 kotlin 协程
  8. 如何编译Android内核
  9. 在android平台上编译libpcap-0.9.8 和 jnetpcap-1.3.0-1

随机推荐

  1. Mysql update多表联合更新的方法小结
  2. mysql 替换字段部分内容及mysql 替换函数
  3. mysql并发控制原理知识点
  4. mysql创建表的sql语句详细总结
  5. Windows 64位重装MySQL的教程(Zip版、解压
  6. mysql 悲观锁与乐观锁的理解及应用分析
  7. mysql 复制原理与实践应用详解
  8. mysql 数据库备份的多种实现方式总结
  9. mysql 的root 用户无法授权及解决navicat
  10. mysql的事务,隔离级别和锁用法实例分析