在Android源代码定制中,通常需要根据不同的项目和客户需求来进行特定的修改。然而,如何做到在保证系统原始内容不被混淆的同时,灵活地添加自定义的bin、应用程序、引导动画等内容,以及修改属性呢?这篇文章就将分享一个简洁有效的方法——添加customize.mk
文件。
前期准备
首先,需要在源代码根目录下创建一个customize.mk
目录,以用于存放的定制内容。在这个目录下,你可以根据需要创建子目录,例如apps
、bin
、bootanimation
等。可以将自定义的应用程序、二进制文件、引导动画文件等分别放入这些子目录中。
例如,下面的树状结构图就是一个customize.mk
目录的样例:
. ├── apps │ ├── common │ └── r58 │ └── SougouInput │ ├── Android │ └── SogouInput.apk ├── bin │ ├── candump │ ├── cansend │ ├── netcfg │ └── watchprops ├── bootanimation └── customize.mk
在这个例子中,在apps/r58
目录下添加了搜狗输入法的apk文件,以及在bin
目录下添加了一些自定义的二进制文件。
修改源代码
然后,需要在Android的设备配置文件device.mk
中,包含的customize.mk
文件,以应用的定制内容。例如,如果你的设备配置文件是device/rockchip/rk356x/device.mk
,你可以在其中添加一行:
include vendor/customize/customize.mk
这样,当编译系统时,就会自动读取并应用customize.mk
文件中的内容。
编写customize.mk
接下来,就可以开始在customize.mk
文件中添加的定制内容了。在这个文件中,可以通过条件判断语句(例如ifeq
),来根据不同的项目和客户进行不同的设置。
例如,下面的customize.mk
文件就实现了这样的功能:
# 在customize.mk中 include $(call all-subdir-makefiles) $(warning Enter customize.mk is included $(TARGET_PRODUCT)) ifeq ($(TARGET_PRODUCT),rk3568_r) $(warning Enter rk3568_r) PRODUCT_PACKAGES += \ SogouInput PRODUCT_COPY_FILES += \ vendor/customize/bin/netcfg:system/bin/netcfg \ vendor/customize/bin/watchprops:system/bin/watchprops PRODUCT_PROPERTY_OVERRIDES += persist.internet_adb_enable=1 PRODUCT_PROPERTY_OVERRIDES += persist.vendor.orientation=0 PRODUCT_PACKAGES += libvendoroper PRODUCT_PACKAGES += vendor_test endif
在这个文件中,首先包含了所有的子目录,然后判断当前的目标产品是否为rk3568_r
。如果是,那么就添加了一些定制的应用程序和二进制文件,以及修改了一些系统属性作为示例。我顺便加了一些打印 ,编译源码的时候可以看打印黄色字体是否进入了 我们指定的项目流程。
结束语
使用customize.mk
文件,可以在不改动系统原始内容的基础上,灵活地添加自定义的内容和修改属性。这使得能够更方便地进行Android源代码的定制。希望这篇文章对你的工作有所帮助,如果有任何问题或有更好的办法,欢迎留言讨论