天天看点

如何把应用程序app编译进android系统

把常用的应用程序编译到img文件中,就成了系统的一部分,用户不必自己安装,当然也卸载不了; 

同时也可以删减系统自带的应用程序,精简系统; 

1.\build\target\product 目录下generic.mk文件: 

java代码  

如何把应用程序app编译进android系统

product_packages := \  

    accountandsyncsettings \  

    deskclock \  

    alarmprovider \  

    bluetooth \  

    calculator \  

    calendar \  

    camera \  

    testmid \  

    certinstaller \  

    drmprovider \  

    email \  

    gallery3d \  

    latinime \  

    launcher2 \  

    mms \  

    music \  

我们添加一个testmid \ 应用名称。 

2.把testmid包放入 

\packages\apps 目录下,修改android.mk文件。 

如何把应用程序app编译进android系统

local_path:= $(call my-dir)  

include $(clear_vars)  

local_module_tags := optional  

local_src_files := $(call all-subdir-java-files)  

local_package_name := testmid  

local_certificate := platform  

include $(build_package)  

注:local_package_name := testmid (包名必须和generic.mk中添加的相同) 

编译源码,可以看到在 

\out\target\product\smdkv210\system\app 

目录下生存了testmid.apk了。这时system.img也包含了此应用。 

------------------------------------------------------------------- 

特殊情况:有时,应用需要包含jar包,这时的app导入源码时会出现问题: 

module.target.java_libraries.libarity already defined by ... stop 

由于 local_static_java_libraries := libarity  会引发错误信息。 

目前解决方法是: 

\build\core 目录下修改base_rules.mk 

注释掉错误信息: 

ifdef $(module_id) 

#$(error $(local_path): $(module_id) already defined by $($(module_id))) 

endif 

$(module_id) := $(local_path) 

--重新编译,这时可以通过了。 

  (2)、删除原厂(telchips)带源码的应用程序,如dtv_dvbt 

  在/device/telechips/m801/device.mk 

  注释掉相应语句: 

  # product_packages += \ 

  #    sampledvbtplayer \ 

  同时,在/out/target/product/m801/system/app 找到相应的.apk包,并删除 

继续阅读