谷歌源码中,增加删除应用机制

来源:互联网 发布:mac 安装的程序在哪里 编辑:程序博客网 时间:2024/05/16 10:25

最近的项目中,预计一下需求,客户要求在某些版本中,删除所有不需要的应用,只留下设置和相机应用,其他都需要删除。

但是因为同一条代码线上面,还有其他的项目,因此不能影响到其他的项目,问题有些棘手。



基于此问题,我们想到了两个解决方案。

1: 通过mk文件中的LOCAL_OVERRIDES_PACKAGES 属性来覆盖其他应用。

      这种修改方法固然可行,但是因为这个LOCAL_OVERRIDES_PACKAGES是在应用的mk中写的,如果一次性删除大量的应用。这个应用的mk文件就会添加很多,容易出错。因此这种方案只适合覆盖很少的几个应用,不使用大面积的覆盖应用。

2:参考系统原有的PRODUCT_PACKAGES 属性写一个属于自己的PRODUCT_DEL_PACKAGES 属性来进行特定应用的删除,

      这样做只需要在相应项目的mk文件中添加 PRODUCT_DEL_PACKAGES 然后按照 PRODUCT_PACKAGES 添加应用的方法,将需要删除的应用直接添加到 PRODUCT_DEL_PACKAGES 后面即可实现删除应用的操作。这种做法使用于大面积删除应用的情况。


实现方法:

下面是方案2的修改方法:总共两个步骤

  1:修改/build/core/product.mk ,在其中定义 PRODUCT_DEL_PACKAGES。如下面标红色的部分。

      PRODUCT_SHIPPING_API_LEVEL \
      PRODUCT_DEL_PACKAGES \

      define dump-product
      $(info ==== $(1) ====)\

  2:修改/build/core/main.mk ,添加具体功能实现方案。如下面标红色部分。

  # by product_config.mk.
  product_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES)
  # Filter out the overridden packages before doing expansion
  product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \
      $(PACKAGES.$(p).OVERRIDES)), $(product_MODULES))

  $(info *********************************************************** )
  $(info Del apk)
  $(info $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEL_PACKAGES))
  $(info $(space))
  $(info before compile)
  $(info $(product_MODULES))
  $(info $(space)$(space))
  $(info ************************************************************* )

   product_MODULES := $(filter-out $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEL_PACKAGES), $(product_MODULES))

  $(info ************************************************************ )
  $(info Del apk)
  $(info $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEL_PACKAGES))
  $(info $(space))
  $(info after compile)
  $(info $(product_MODULES))
  $(info $(space))
  $(info ************************************************************)


  # Resolve the :32 :64 module name
  modules_32 := $(patsubst %:32,%,$(filter %:32, $(product_MODULES)))
  modules_64 := $(patsubst %:64,%,$(filter %:64, $(product_MODULES)))
  modules_rest := $(filter-out %:32 %:64,$(product_MODULES))
  # Note for 32-bit product, $(modules_32) and $(modules_64) will be
  # added as their original module names.


使用方式:

  上面的修改使用方法与PRODUCT_PACKAGES的使用方法一致,请看下面例子:

   直接在项目mk文件中的修改如下:

  PRODUCT_DEL_PACKAGES := \
   Browser \
   Calendar \
   Email \
  Mms \
   Music 

  
问题排查方法:

    通过上面的修改,如果发现存在问题,请直接在编译的log中搜索
before compileafter compile,然后对比这两个打印前后的信息,看下删除功能是否OK




原创粉丝点击