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

标签 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 文件。

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

我已经尝试了 this 中的建议问题,他们没有工作。我尝试了 this 中的建议问题,虽然它确实将 APK 输出到完成构建的 /data/app 文件夹,但一旦我将图像闪存到我的设备上,应用程序就不存在了。该问题的第二个答案确实对此提供了可能的解释,但没有其他建议。

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

最佳答案

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

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

关于android - 是否可以将预构建的 APK 作为用户应用程序添加到 AOSP 构建中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44893953/

相关文章:

java - Android中图像缩放动画后如何保持质量?

Android 查看分页器和列表 fragment

c++ - CGAL 的生成文件 (libcgal8)

android - 扩展文件是否将所有文件存储到手机的 res/drawable 文件夹中?

android - 你如何反编译,在eclipse中编辑并重新编译一个apk?一步步?

android - activity_main.xml : String index out of range: 0 in Android Code

android - 用于具有多个子项目的项目列表的自定义适配器?

java - 如何检查我的 child 中的数据是否存在?

c - 在 Cygwin 中查找文件夹的绝对路径

linux - Makefile:108: *** 配方在第一个目标之前开始