是否可以将预构建的APK作为用户应用程序添加到AOSP构建中?

时间:2017-07-03 21:16:49

标签: android makefile apk android-source

我希望将一个预建的APK添加到我的AOSP版本中。我可以通过执行以下操作来完成此操作:

  1. 将APK添加到 $ root_of_my_source_tree / packages / apps 文件夹。
  2. 创建 Android.mk 文件。该文件包含以下内容:

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE_TAGS := optional
    
    LOCAL_MODULE := <name of APK>
    
    LOCAL_SRC_FILES := <Name of APK>.apk
    
    LOCAL_MODULE_CLASS := APPS
    
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    
    LOCAL_CERTIFICATE := platform
    
    include $(BUILD_PREBUILT)
    
  3. 添加:

    PRODUCT_PACKAGES += \ <name of APK>
    

    到由AOSP构建系统获取的make文件。

  4. 这会将APK添加到只读的 / system / app 文件夹中,以便用户无法更新APK。我希望将APK放在 / data / app 文件夹中,以便用户可以实际更新预建的APK。

    我已经在this问题中尝试了这些建议,但这些建议无效。我在this问题中尝试了这个建议,当它确实将APK输出到完成版本的 / data / app 文件夹时,一旦我将图像闪存到我的设备上,该应用就没有那里。该问题的第二个答案确实为此提供了可能的解释,但没有其他建议。

    最终,我需要在我的构建中预装一个可以更新的APK,如果这不起作用或者是一个糟糕的方法,我愿意接受建议。

2 个答案:

答案 0 :(得分:2)

在Android.mk文件中使用LOCAL_MODULE_PATH到TARGET_OUT_DATA或TARGET_OUT_DATA_APPS

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
------
include $(BUILD_PREBUILT)

答案 1 :(得分:2)

我发现PackageManager类的标准行为足以满足我的用例。所以这里有几个值得解释的花絮:

  • Lavakush的答案确实有效,它会将APK输出到源树中的 out / target / product / vendor / data / app 文件夹,但APK不会显示在 /下系统映像中的数据/应用程序一旦闪存到设备上。根据{{​​3}}回答,Android构建系统不会在 / data / 中构建任何内容,因此可以解释这一点。我仍然觉得它确实在 out / target / product / vendor / data / app 文件夹中显示为输出而感到困惑。
  • 在我的用例中,我需要将APK预加载到构建中,然后根据需要更新它们。由于 / system / app 文件夹的只读性质,我认为我无法更新我的应用程序,这就是为什么我要将其预加载到 / data / app < / em>的。事实证明,根据this回答&amp;在我的测试中, PackageInstaller 类的标准行为是将更新的APK安装到 data / app 文件夹并开始运行此APK而不是预先加载的 / system / app APK。答案还说, settings-&gt; apps 屏幕将为您提供卸载更新的APK的选项,然后您将留下原始的系统/应用程序 APK 。我确实观察到了这种行为,这对我的用例来说很好。