android overlay机制,主要是用来不修改代码从而实现资源替换,主题定制等需求。可定制资源一般为下面几类:

  • 系统设置(字符串,功能开关等)
  • 本地化资源(字符串等)
  • UI元素(color, drawable, layout, style, theme, animation)
  • raw资源(audio, video, xml))

添加overlay

  1. device目录下面创建overlay目录,里面的目录结构要和android代码树内相同

  2. 修改产品配置makefile(device/vendor-name/device-name/product-name.mk),添加

    1
    2
    3
    4
    5
    6
    
    PRODUCT_PACKAGE_OVERLAYS :=  device/vendor-name/device-name/product-name/overlay
    或
    DEVICE_PACKAGE_OVERLAYS :=  device/vendor-name/device-name/product-name/overlay
       
    优先级:
    PRODUCT_PACKAGE_OVERLAYS > DEVICE_PACKAGE_OVERLAYS
    
  3. overlay目录内的xml可以只包含要改动的资源,如果要添加新的资源,需要确保给aapt传入auto-add-overlay参数,一般加在Android.mk里面。

    LOCAL_AAPT_FLAGS := –auto-add-overlay

  4. 检查资源是否替换成功,可以通过aapt dump资源来查看

    1
    
    aapt l -a Home.apk
    
  5. 如果有多个定义,第一个优先,后面的无效,类似init.rc