谷歌源碼中,增加刪除應用機制

最近的項目中,預計一下需求,客戶要求在某些版本中,刪除所有不需要的應用,只留下設置和相機應用,其他都需要刪除。

但是因爲同一條代碼線上面,還有其他的項目,因此不能影響到其他的項目,問題有些棘手。



基於此問題,我們想到了兩個解決方案。

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 compile after compile,然後對比這兩個打印前後的信息,看下刪除功能是否OK




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章