本文学习自高焕堂老师的Android从程序员到架构师之路系列教学视频
源码目录
在线查看源码
https://www.androidos.net.cn/
http://androidxref.com/
Android.mk作用
编写简单Android.mk
===
1、在文件夹加入Android.mk和main.c
LOCAL_PATH := $(call my-dir) // 定义了当前模块的相对路径
include $(CLEAR_VARS) //清空当前环境变量
LOCAL_MODULE:= Test //编译生成的目标名称
LOCAL_SRC_FILES := main.c //编译该模块需要的源文件
LOCAL_MODULE_PATH := $(LOCAL_PATH) //在当前路径下生成编译文件
include $(BUILD_EXECUTABLE) //编译所生成的目标文件格式
===main.c
#include<stdio.h>
int main(void)
{
printf("hello android main");
return 0;
}
===生成执行文件
Install: out/target/product/xxx/system/bin/test
同项目多个源码文件编译-逐个增加文件名
===Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nubiaTest
LOCAL_SRC_FILES := main.c \
test1.c
LOACL_MODULE_PATH := $(LOCAL_PATH)
include $(BUILD_EXECUTABLE)
===main.c
#include<stdio.h>
int main(void)
{
printf("hello android main");
return 0;
}
===test1.c
#include<stdio.h>
void call_test1(void)
{
printf("hello android test1");
return ;
}
多个源码文件编译-调用系统库
===
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nubiaTest
LOCAL_C_ALL_FILES := $(call all-c-files-under)
LOCAL_SRC_FILES := $(LOCAL_C_ALL_FILES)
LOACL_MODULE_PATH := $(LOCAL_PATH)
include $(BUILD_EXECUTABLE)
===
#include<stdio.h>
int main(void)
{
printf("hello android main");
return 0;
}
===
#include<stdio.h>
void call_test1(void)
{
printf("hello android test1");
return ;
}
一个mk编译多个目标文件
===
#include<stdio.h>
void call_test1(void)
{
printf("hello android test1");
return ;
}
int main(void)
{
printf("hello android main test1");
return 0;
}
===
#include<stdio.h>
int main(void)
{
printf("hello android main");
return 0;
}
===
#分别编译main.c test1.c
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nubiaMain
LOCAL_SRC_FILES := main.c
LOACL_MODULE_PATH := $(LOCAL_PATH)
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_MODULE := nubiaTest1
LOCAL_SRC_FILES := test1.c
LOACL_MODULE_PATH := $(LOCAL_PATH)
include $(BUILD_EXECUTABLE)
编译生成动态库
===
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libtest
LOCAL_C_ALL_FILES := $(call all-c-files-under)
LOCAL_SRC_FILES := $(LOCAL_C_ALL_FILES)
LOACL_MODULE_PATH := $(LOCAL_PATH)
include $(BUILD_SHARED_LIBRARY)
===
out\target\product\NX629J\obj_arm\SHARED_LIBRARIES\libtest_intermediates
编译生成静态库
===
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libteststatic
LOCAL_C_ALL_FILES := $(call all-c-files-under)
LOCAL_SRC_FILES := $(LOCAL_C_ALL_FILES)
LOACL_MODULE_PATH := $(LOCAL_PATH)
include $(BUILD_STATIC_LIBRARY)
===
target StaticLib: libteststatic_32 (out/target/product/NX629J/obj_arm/STATIC_LIBRARIES/libteststatic_intermediates/libteststatic.a)
如何引入系统库
项目目录
---Android.mk
---bin
---src
---main.cpp
---test1.cpp
===main.cpp
#include<stdio.h>
#define LOG_TAG "Main"
#include<utils/Log.h>
int main(void)
{
ALOGE("test");
return 0;
}
===test1.cpp
===
2、编译时引入库:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) //清空当前环境变量
LOC