背景
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,修改权限,这样做的好处是减小包的大小