在android-5.0.2/build/core/Makefile的315行可以看到,这里是apk生成签名相关的地方。
315 name := $(TARGET_PRODUCT)
316 ifeq ($(TARGET_BUILD_TYPE),debug)
317 name := $(name)_debug
318 endif
319 name := $(name)-apkcerts-$(FILE_NAME_TAG)
320 intermediates := \
321 $(call intermediates-dir-for,PACKAGING,apkcerts)
322 APKCERTS_FILE := $(intermediates)/$(name).txt
323 # We don't need to really build all the modules.
324 # TODO: rebuild APKCERTS_FILE if any app change its cert.
325 $(APKCERTS_FILE):
326 @echo APK certs list: $@
327 @mkdir -p $(dir $@)
328 @rm -f $@
329 $(foreach p,$(PACKAGES),\
330 $(if $(PACKAGES.$(p).EXTERNAL_KEY),\
331 $(call _apkcerts_echo_with_newline,\
332 'name="$(p).apk" certificate="EXTERNAL" \
333 private_key=""' >> $@),\
334 $(call _apkcerts_echo_with_newline,\
335 'name="$(p).apk" certificate="$(PACKAGES.$(p).CERTIFICATE)" \
336 private_key="$(PACKAGES.$(p).PRIVATE_KEY)"' >> $@)))
337 # In case value of PACKAGES is empty.
338 $(hide) touch $@
339
340 .PHONY: apkcerts-list
341 apkcerts-list: $(APKCERTS_FILE)
我们可以在# In case value of PACKAGES is empty.这句的上面加一个删除系统apk的脚本,这样编译的时候就不会将apk编译到系统中去了。
脚本编写,放在Android源码的根目录下,比如remove_system_apk.sh
例如:
rm -rf ./out/target/product/tiny4412/system/app/Email/Email.apk
其它的以此类推。