Andriod默认情况下将apk,都会安装到/system/app目录下。在编译系统时,Androd会根据每个应用的Android.mk文件里的LOCAL_MODULE_TAGS这个变量的值,来决定这个应用是否会编译到系统里。
通常情况下LOCAL_MODULE_TAGS变量的值有user、optional、debug、eng、tests、samples这几个值。在2.2里如果LOCAL_MODULE_TAGS变量的值为user那么系统直接就会将这个应用的apk安装到systm/app目录下,但是在2.3里将这个变量的值赋值为user系统会做一个处理,会根据LOCAL_MODULE的值于GRANDFATHERED_USER_MODULES变量的值进行比较,如果LOCAL_MODULE变量的值在GRANDFATHERED_USER_MODULES变量里没有,那么系统就会报错;默认情况下user debug eng 都会被编译到系统里;
如果是optional,那么会根据要编译的LOCAL_MODULE 是否在PRODUCT_PACKAGES这个变量中,如果在,就会编译到系统里;如果没有,那么就不会被编译到系统里。tests会根据编译的版本的vatiant来决定是否编译到系统里,而samples只是一个例子一般都不会被编译到系统里的。在Android里只有几个samples是可以被编译到系统里的,但是默认情况是没有被编译的。
但是在android系统里java应用如果生成了apk包就会被安装到system/app目录下,想将java应用编译生成apk包而且不被编译到系统里那么我们就等修改该Android系统的Makefile文件系统。