Android AOSP内置第三方应用一般有两只方式:源码和APK,本文讲的内置第三方APK,APK一般是自己开发、合作商提供,应用商店下载。
-
创建目录
目录创建含义:modo目录,代表modo产商(我自己定义);apps目录,用来存放所有内置应用相关的;
OrangeService目录,用来存放OrangeService应用相关的。vendor/modo/apps/OrangeService目录下有
OrangeService.apk和Android.mk。OrangeService.apk是我自己开发的,主要用来控制香橙派开发板三色灯中蓝灯和绿灯的,后续会增加其他。Android.mk一般复制已有的Android.mk进行修改,例如apk形式一般复制vendor/rockchip/common/apps/目录某个APK的Android.mk。而源码形式一般复制packages/apps的进行修改。 -
Android.mk的修改
LOCAL_PATH:=$(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := OrangeService.apk LOCAL_MODULE_CLASS := APPS #可以为user、eng、tests、optional,optional代表在任何版本下都编译 LOCAL_MODULE_TAGS := optional #编译模块的名称 LOCAL_MODULE := OrangeService #可以为testkey、platform、shared、media、PRESIGNED(使用原签名),platform代表为系统应用 LOCAL_CERTIFICATE := PRESIGNED #不设置或者设置为false,安装位置为system/app,如果设置为true,则安装位置为system/priv-app? LOCAL_PRIVILEGED_MODULE := false #module的后缀,可不设置 LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_SRC_FILES := $(LOCAL_MODULE).apk # 关闭预编译,不会生成OAT文件 LOCAL_DEX_PREOPT := true LOCAL_PRODUCT_MODULE := true include $(BUILD_PREBUILT)相关含义可以参考AOSP中的Android.mk和Android.bp文件
-
编译时加入当前应用
我们创建和组织了
vendor/modo/apps/OrangeService目录相关内容,但AOSP编译过程并不知道这些,因此需要将我们的mk文件添加到编译中。换句话说,我们可以在任何地方组织和放置资源,只需要在编译的时候指定即可。但出于工程管理,我们还是在统一的目录。于是我们在
/vendor/modo目录创建了modo.mk文件,用来管理modo目录下所有的编译相关。现在的内容是:PRODUCT_PACKAGES += OrangeService然后在
device/rockchip/common/device.mk文件添加下面内容,这样编译的时候,就会把OrangeService.apk编译到系统中。include vendor/modo/modo.mk