如何在 AOSP 源代码中添加预构建的应用程序(系统应用程序)

Posted

技术标签:

【中文标题】如何在 AOSP 源代码中添加预构建的应用程序(系统应用程序)【英文标题】:How to Add Pre-built App (System App) in AOSP source code 【发布时间】:2020-06-14 16:28:26 【问题描述】:

我试图在 AOSP 版本 10 中添加一个 APK 作为系统应用程序。我遵循了几乎不同的链接中提到的程序,这里是Add apk in AOSP,但没有任何效果。此链接中提到的过程以及我遵循的步骤是:

    将我的 Apk 放入 Aosp_root/packages/apps/my-app-folder/my-app.apkmy-app.apk 中的android.mk 写入/my-app-folder

Android.mk的代码

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE_TAGS := optional
    
    LOCAL_MODULE := Signal
    
    LOCAL_CERTIFICATE := platform
    
    LOCAL_SRC_FILES := Signal-website-universal-release-4.55.8.apk
    
    LOCAL_MODULE_CLASS := APPS
    
    LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
    
    include $(BUILD_PREBUILT)
    然后在第 3 步中将 PRODUCT_PACKAGES 添加到 core.mkcommon.mk 我无法在指定目录 (build/target/products) 中找到两个指定文件 (core.mkcommon.mk)。但是我在build/target/product文件夹中找到了gsi-common.mk文件,并在该文件中找到了PRODUCT_PACKAGES,并在其中添加了my-app的目录。

这里是gsi-common.mk的代码。

   `PRODUCT_PACKAGES += \
    messaging \
    PhotoTable \
    WAPPushManager \
    WallpaperPicker \
    Signal \`
    在为aosp-root 重建 AOSP 并将其刷新到设备上之后,没有任何改变,my-app.apk 未被添加。然后我在packages/apps 目录中使用了mm 命令,它构建了my-app.apk 并添加到aosp_root/out/target/product/taimen/system/app 中。之后我运行 make snod 命令重新生成系统映像并创建它。当我在我的 Pixel 设备中刷入这张图片时,它卡在了 Google 徽标上,并且在显示 google 徽标之前还显示操作系统已损坏。

你能告诉我我遗漏了什么或哪一步错了吗?

【问题讨论】:

欢迎来到 Stack Overflow - 看看这篇文章 ***.com/help/how-to-ask 它会帮助你改进你的问题,这意味着你有更好的机会找到你正在寻找的答案。 @semw 嗨,你修好了吗?我面临同样的问题。 apk 已添加到系统中,但没有出现在 ROM 中 @ShivamJha 不,它还没有修复,我正在努力。完成后我会告诉你,如果你在我之前做过,那么你告诉我 您好,我遇到了类似的问题。我可以看到我的 apk 已添加到 /system/app/FOLDER 目录,但是我看不到它的启动图标。对可能发生的事情有任何想法吗? @caiomcg:你是如何添加应用程序的?您是否遵循了与我相同的过程?如果在您的 system.img 中添加了应用程序,并且在设备中闪烁 system.img 后您没有看到它的启动图标,那么您的应用程序可能存在问题。或读取权限问题 【参考方案1】:

为 Android 11 和 Android 8.1 回答这个问题

为您的应用程序创建一个文件夹 <AOSP-root-directory>/package/apps/<yourAppFolder>

yourAppFolder 中创建一个Android.mk 包含以下内容的文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE := < your app folder name >

LOCAL_CERTIFICATE := platform

LOCAL_SRC_FILES := < app apk filename >

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

将您的 apk 文件放在同一个文件夹中。

现在我们必须在系统映像中包含 apk 来做到这一点,为此我们必须在文件的 PRODUCT_PACKAGES 列表中提及模块名称:

对于安卓 11 - aosp-root-dir/build/target/product/handheld_system.mk

对于安卓 8.1 - aosp-root-dir/build/target/product/core.mk

【讨论】:

你知道如何在makefile或aosp中添加app的.so库吗?我在 apk 中遇到库问题。它作为用户应用程序运行良好,但作为系统应用程序的库问题 我已经解决了,我的问题是我在build/target/product/ 的错误文件中写入了模块名称。写在handheld_system.mk后解决了问题【参考方案2】:

AOSP10 中需要的其他步骤:

首先,将您的模块名称添加到 PRODUCT_PACKAGES 中:

&lt;aospbase&gt;\build\make\target\product\base_system.mk

这会将 APK 添加到系统中

二、白名单权限(如果需要,否则设备无法启动): 在make 之后,运行 development/tools/privapp_permissions/privapp_permissions.py

如果生成的权限集不为空,请将输出添加到: frameworks/base/data/etc/privapp-permissions-platform.xml

参考:https://source.android.com/devices/tech/config/perms-whitelist

【讨论】:

嗨@Hermet,你知道如何从应用程序源代码(完整的android studio项目)在aosp中添加系统应用程序。我尝试了几种方法,但它不起作用。这是我的error 的链接【参考方案3】:

在从 AOSP 构建 Android 映像之前,您必须通过“lunch”命令选择构建目标。如果您为使用 Qualcomm Snapdragon 8xx 处理器的 Google Pixel 设备构建,您应该按如下方式享用午餐:

$ lunch aosp_arm64-eng

在这种情况下,输出图像应包含 build/target/products/gsi_common.mk 中包含的包

当然,你应该试试

$ make installclean
$ make -j32 #may be -j16, -j8, etc. depends on your build host

然后在输出图像中再次检查您的应用程序。

如果系统仍然损坏,您能否提供更多相关信息(例如:logcat)

【讨论】:

我已经从 cleanproject 添加了 apk 和构建代码,但它仍然没有添加到系统中 @semw: 你检查过目录 /system/app 和 /system/priv-app 是的,我已经检查了两个文件夹,没有添加应用程序。【参考方案4】:

将预构建的应用添加到构建中

在 AOSP 根目录下添加文件夹:

/package/app/

然后在这个文件夹里面添加:

empty Android.mk
< yourapp.apk >

android make 文件应该包含对您的 apk 的引用,将其添加到您的 Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE := < your app folder name >

LOCAL_CERTIFICATE := < desired key >

LOCAL_SRC_FILES := < app apk filename >

LOCAL_MODULE_CLASS := APPS

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

在 commons.mk 中创建一个条目(通常在 build/target/product 中)为您的 apk 添加行(检查所有其他条目的位置)

PRODUCT_PACKAGES += < what you have defined in LOCAL_MODULE, it should be your app folder name >

编译AOSP,你会发现系统上安装了新的应用程序。

上面介绍的 Android.mk 会将 APK 安装在 /system/app 中

如果您希望在 /system/priv-app 中安装 APK,您需要在 Android.mk 中添加以下行

LOCAL_PRIVILEGED_MODULE := true

如果您希望在 /data/app 中安装 APK,您需要在包含 $(BUILD_PREBUILT) 行之前将以下行添加到 Android.mk 中

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)

参考:How do I add APKs in an AOSP build?

【讨论】:

请将您的更改添加到您迄今为止尝试过但发现不起作用的问题中。 我已经编辑了问题并列出了我遵循的整个过程。请立即查看

以上是关于如何在 AOSP 源代码中添加预构建的应用程序(系统应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

构建 AOSP:如何在 SD 卡上包含文件?

将外部JAR添加到Android AOSP构建时出错

向 AOSP 配置添加新符号时,silentoldconfig 无法构建

如何在我的 Pixel 3 平台构建中启用 Play 商店应用程序?

如何将“aar”库添加到 AOSP?

如何使用 Visual Studio Code 为 cmake 添加预构建步骤?