本文针对android studio工具下的ndk开发。
build目录就是项目模块构建过程和结果使用到的位置。
项目根目录下有一个build目录。
项目根目录下各模块子目录下各自有一个build目录。
build目录下一般由4个子目录组成:
generated 由aapt工具根据资源数据自动生成的java类
intermediates 中间过程
outputs 输出结果
tmp 编译日志
根目录下的build目录,这个build服务于整个项目,在本文中称其做项目build,以区分模块build。
项目build一般只有generated和intermediates两个子目录,用于生成这个项目的buildTools。
generated目录会生成一个mockable-android-${buildToolsVersion}.jar。
intermediates目录根据需要生成dex-cache,这个目录下的xml文件配置jar包在编译过程中如何缓冲使用。
模块build目录在make module ${MOD_NAME}后就会生成4个子目录。
我们来看intermediates目录,中间生成和编译过程使用到的目录。
这个目录下有这么几个比较关心的子目录:
binaries NDK,生成c++连接库
bundles 模块链接到的自定义jar包和各abi版本的c++链接库都捆绑在这里
classes 模块中生成的自定义java类
exploded-aar 由aar包解压出来的资源,jar包和so链接文件等。用于本模块的链接和集成。
jniLibs 在build.grade中你指定的jniLibs目录整个拷贝。模块链接到的库文件会被捆到bundles目录。
objectFiles NDK,生成c++中间对象(.o)文件。
transforms 根据你当前选择的productFlavor和其包含的abiFilter,从bundles和binaries取出链接库。
接着就是output目录:
aar 如果模块是android library
jar 如果模块是java library
apk 如果是Activity应用程序
最后就是tmp目录:
compile$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)MainCpp ndk编译日志
link$(NDK_Module)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)$(LIB_TYPE) ndk链接日志
编译的子目录由三要素组合而成,分别是
BUILD_TYPE := debug|release
ProductFlavor := 你在gradle文件中创建的flavor
abiFilter :=