envsetup lunch mm mmm
1. MakeFile需要是整体一个,而不是每个模块一个。是一个总分关系,每个模块只有自己的片段。
2. envsetup.sh
1)将device目录下的厂商的配置信息也导入进来。
2)提供m mm mmm lunch adb 等命令
3. lunch
1)选择厂商配置信息,目标产品平台
2)make build/core/config.mk (sub:BoradConfig.mk) && buid/core/dumpvar.mk
还记得WITH_DEXOPT这个参数就配置在build目录下的各设备的BoradConfig.mk中哦。
4. mm
1) 在源代码根目录下,无异于make。
2) 在子目录下,则从上级开始找Android.mk开始找,然后调用make
注:一个mk文件可能包含多个module。mm默认是全module编译。
5. mmm
后跟目录,每个目录必须有Android.mk文件,还是mmm比较让人省心啊。可以指定模块。
这货首先会加载build/core/main.mk (入口)
1) +buld/core/config,根据lunch命令的配置信息找相应目录BoradConfig.mk等
(但是根据我的测试,印象中mm也是会及时将BoradConfig.mk中的东西搞进来啊。用Email模块做测试时)
2) + 指定Android.mk
build/core/shared_library.mk说 Android.mk中如没有定义LOCAL_MODULE_PATH
简单而言,envsetup大哥最牛逼,读所有平台配置,提供牛逼工具们。小弟launch负责选平台,加特定平台信息。
小妹mmm每次先依靠main.mk来读取小弟的平台信息,然后再搞小妹自己的android.mk.
LOCAL_SYSTEM_SHARED_LIBRARIES 隐藏的系统链接库
LOCAL_SHARED_LIBRARIES SDK的系统链接库
2017/03/08:
app追加:追加一个app时,在xxxcore.mk里增加要编译的目录,才会整体make时生成相应的APK。
整体make,其实也是一个增量make,并不是全编译的节奏。
app可以设置权限,如果要操作其他app的部分操作,需要声明该app定义的权限。