android build/core/main.mk 简单使用
在开发时,突然有个需求需要在编译rom时,通过makefile编译脚本,区分是否是新功能和原生功能,我次了,这可怎么办,于是参考各种网上的makefile脚本语法,于是做了简单的实现;
下面我们做个demo采用系统默认的壁纸做个例子,通过make编译,进行区分;
1.build/core/下新生成一个属于自己name_feature.mk文件;
//路径
.build/core
//生成一个自己的mk
name_feature.mk
2.打开main.mk文件,加入你新生成的mk文件;
+#add new feature
+include $(BUILD_SYSTEM)/name_feature.mk
# Set up various standard variables based on configuration
# and host information.
include $(BUILD_SYSTEM)/config.mk
3.以上两个步骤做完,下面我们来看name_feature.mk实现
makefile会收集ADDITIONAL_BUILD_PROPERTIES中的属性,追加到build.prop中,在这不多做解释了,有兴趣可网上搜一下;
#add new feature
//如果相同则(条件为真)执行反之执行else
ifeq ($(strip $(ANDROID_FEATURE_NAME_VALUSE)),true)
ADDITIONAL_BUILD_PROPERTIES += ro.andorid_default_wallpaper=true
else
ADDITIONAL_BUILD_PROPERTIES += ro.andorid_default_wallpaper=false
endif
4.下面我们来看java代码如何来增加的;
路径:frameworks/base/core/java/android/app/WallpaperManager.java
private InputStream openDefaultWallpaperRes(Context context, @SetWallpaperFlags int which) {
...
//这一步是增加的代码..
if (SystemProperties.getBoolean("ro.andorid_default_wallpaper", false)) {
is = context.getResources().openRawResource(
com.android.internal.R.drawable.feature_default_wallpaper);
} else {
//系统默认
is = context.getResources().openRawResource(
com.android.internal.R.drawable.default_wallpaper);
}
...
return is;
}
以上就算完成了吗,不是在进行整编的时候还需要加一些属性,一般我们会直接进行make -j4这样默认是false,我们增加的功能是不会引入的,接下来我们看;
//在整编代码时,加上这句就ok了,反之不加
make -j8 ANDROID_FEATURE_NAME_VALUSE=true
以上就ok了
理解makefile和main.mk
http://blog.youkuaiyun.com/xiao_yuanjl/article/details/78864287