Android AOSP内置APK为系统应用

1,274 阅读2分钟

Android AOSP内置第三方应用一般有两只方式:源码和APK,本文讲的内置第三方APK,APK一般是自己开发、合作商提供,应用商店下载。

  1. 创建目录

    目录创建含义:modo目录,代表modo产商(我自己定义);apps目录,用来存放所有内置应用相关的;

    OrangeService目录,用来存放OrangeService应用相关的。

    vendor/modo/apps/OrangeService
    

    目录下有OrangeService.apkAndroid.mk。OrangeService.apk是我自己开发的,主要用来控制香橙派开发板三色灯中蓝灯和绿灯的,后续会增加其他。Android.mk一般复制已有的Android.mk进行修改,例如apk形式一般复制vendor/rockchip/common/apps/目录某个APK的Android.mk。而源码形式一般复制packages/apps的进行修改。

  2. 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文件

  3. 编译时加入当前应用

    我们创建和组织了 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