mk文件释义

来源:互联网 发布:lol域名 编辑:程序博客网 时间:2024/06/07 01:49

背景

IT行业变化很快,需要长期学习新的知识,记忆力有限,有些知识点长期没用,多少有点遗忘,做点记录。


 一个小项目的jni目录结构

.
├── Android.mk
├── Application.mk
├── kesyPrint.c
├── kesyPrint.h
├── rename.bat
├── UninstalledObserver.c
└── watchDog.c

mk文件的注释符号是 #

======Application.mk ============
#Android设备的cpu芯片是不同的,不同的芯片对应不同的指令集,ABI标识着想要的平台种类。
#如果只是针对intel芯片的,可以直接指定APP_ABI := x86,这样就不需要编译其它平台的了。
# APP_ABI :=all 表示编译全平台的
#APP_ABI := armeabi,mips,x86 表示编译armeabi, mips和x86三个平台的
APP_ABI := armeabi,mips,x86

APP_PLATFORM := android-9
============================


======Android.mk ============
#这个mk文件标识了两个模块,一个是共享库so文件,一个是bin文件

#第一个模块编译的是共享的so库

# 这个基本上就是个固定的格式了,放在 Android.mk的一个个有效行,表示本文件的路径。
LOCAL_PATH := $(call my-dir)

#清除之前定义的 LOCAL_XXX 变量,通常每个模块都要写一次。
include $(CLEAR_VARS)

# 模块名,本例中 LOCAL_MODULE    := util ,生成的共享库文件 libutil.so
LOCAL_MODULE    := util

# 模块中的源文件列表
LOCAL_SRC_FILES := UninstalledObserver.c kesyPrint.c 

# 预先定义的宏定义,预编译时使用到。这里定义了 KE_DEBUG 宏
#KE_DEBUG :print log when it is defined
LOCAL_CFLAGS += -DKE_DEBUG

# 引用的链接库,和linux命令行一样, -L后接寻找库的目录, -l后接库的名称,本例中是log
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog

# BUILD_SHARED_LIBRARY表示编译的是so共享库
# BUILD_STATIC_LIBRARY 编译静态库
# BUILD_EXECUTABLE 编译可执行文件 
include $(BUILD_SHARED_LIBRARY)

######################################
#清除之前定义的 LOCAL_XXX 变量,通常每个模块都要写一次。
include $(CLEAR_VARS)

#本模块生成一个可执行文件

# 模块名为watchDog,生成的可执行文件名为watchDog
LOCAL_MODULE    := watchDog

# 本模块的源码列表
LOCAL_SRC_FILES := watchDog.c kesyPrint.c

# 宏定义
#KE_DEBUG : print log when it is defined
LOCAL_CFLAGS += -DKE_DEBUG

# 引用库
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog

# 表示本模块生成一个可执行文件
include $(BUILD_EXECUTABLE)
============================


rename.bat
windows下执行的脚本,偷懒用的,批量改名
这个脚本主要的功能是将watchDog改名为libwatchDog.so
为什么要改名呢?改名的结果是,将watchDog伪装为 libwatchDog.so 这样做有什么好处?
apk安装的时候会自己处理so文件的拷贝,这样我们就不需要自己外代码拷贝 watchDog 了

========rename.bat===========
cd ../libs/armeabi
rename watchDog libwatchDog.so

rem cd ../armeabi-v7a
rem rename watchDog libwatchDog.so

cd ../mips
rename watchDog libwatchDog.so

cd ../x86
rename watchDog libwatchDog.so

cd ../../jni
===========================

当然,也可以采用这么种方式,判断device的cpu类型,然后从网络下载对应的watchDog,修改权限,这样做的好处是减小包的大小
0 0