热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidmk脚本的编写

目前网上通过JNI方式ndk编译,mk文件写法乱七八糟,没有固定的写法,让人看不懂。所以我决定看一下官网是的说明。直入主题吧:AnAndroid.mkfileiswri

目前网上通过JNI方式ndk编译,mk文件写法乱七八糟,没有固定的写法,让人看不懂。所以我决定看一下官网是的说明。

直入主题吧:

An Android.mk file is written to describe your sources to the build system. More specifically:

  • The file is really a tiny GNU Makefile fragment that will be parsed one or more times by the build system. As such, you should try to minimize the variables you declare there and do not assume that anything is not defined during parsing.

  • The file syntax is designed to allow you to group your sources into 'modules'. A module is one of the following:

    • A static library.
    • A shared library.
    • A standalone executable.
这个是官网的描述,总结就是Android.mk文件就是用来源码编译成android系统识别的库。


首先看一个简单例子

 LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE    := hello-jni
    LOCAL_SRC_FILES := hello-jni.c

    include $(BUILD_SHARED_LIBRARY)

LOCAL_PATH := $(call my-dir)
获取当前编译对象的路径,以下用到的路径都是基于这个路径做出的动作,LoCAL_PATH是一个变量,你可以随便自己取一个名字(阿猫阿狗都行哦),$(call my-dir),这个是真正获取当前路径的方法。

include $(CLEAR_VARS)
include $(BUILD_SHARED_LIBRARY)/include $(BUILD_STATIC_LIBRARY)
这一组是成对出现的,前者是开始,后者是结束,其他动作都是在他们之间完成的。

include $(CLEAR_VARS)就是初始化当前环境,在android看来就是初始化GNU环境,具体什么东东就没有去深究了,只知道他是用来初始化的就足够了。

include $(BUILD_SHARED_LIBRARY)/include $(BUILD_STATIC_LIBRARY)这个就是指定生成库的形式,是动态库还是静态库。


好了,框架就是这样,然后我们就在

include $(CLEAR_VARS)
include $(BUILD_SHARED_LIBRARY)/include $(BUILD_STATIC_LIBRARY)

之间添砖加瓦吧。

LOCAL_MODULE := hello-jni

这个是指定输入,生成库的名称,实际上名称是前加“lib”,后加“.so”/".a",貌似有点像Linux,反正android就是从Linux来的,我们就不去深究啦,知道怎么回事就行。

LOCAL_SRC_FILES :=hello-jni.c

这个就是指定需要编译的源码,写法有很多种的,自定义文件夹加入等等,这里我不去展开,有时间我会深究一下的。

上述例子没有加上的:

LOCAL_C_INCLUDES :=$(LOCAL_PATH)/include

这个就是指定需要用到的头文件的目录,就在该目录的include文件夹下,你也可以加上很多其他路径下的头文件

LOCAL_LDLIBS := -lz
这个呢,就是连接系统一些库了,可能我们编译的时候报的一些错误,需要依赖系统的一些库的。如-lxx,就是连接某一个系统动态库。

LOCAL_SHARED_LIBRARIES := hello-jni1

这个呢是链接我们自己的第三方的动态库。

LOCAL_STATIC_LIBRARIES 这个一样,是链接我们自己的第三方的静态库。

LOCAL_CFLAGS += -Dxxx这个就是你在源码定义的宏,需要定义的话就在这个参数上加上-Dxxx,前面加"-D",

后面就是宏的名称了。

好了,今天就简单的介绍了一下Android.mk文件的基本写法。有时间我会研究一下链接问题,和一些不常用的变量及其用法的。

谢谢大家,由于能力有限,希望大家多多批评指正。





推荐阅读
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文深入探讨了 Android DrawingView 的优化技巧与实现方法,重点介绍了如何实现平滑绘制效果。通过支持常见的绘图工具和形状,以及图层变换功能,提升了用户体验。文章详细解析了绘制过程中的性能优化策略,包括减少重绘次数、使用硬件加速和优化内存管理等技术,为开发者提供了实用的参考。 ... [详细]
  • 在 HihoCoder 1505 中,题目要求从给定的 n 个数中选取两对数,使这两对数的和相等。如果直接对所有可能的组合进行遍历,时间复杂度将达到 O(n^4),因此需要考虑优化选择过程。通过使用哈希表或其他高效的数据结构,可以显著降低时间复杂度,从而提高算法的效率。具体实现中,可以通过预处理和存储中间结果来减少重复计算,进一步提升性能。 ... [详细]
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • Java 9 中 SafeVarargs 注释的使用与示例解析 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
author-avatar
66桀骜不驯_537
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有