AOSP源码中如何添加预建App(System App)

How to Add Pre-built App (System App) in AOSP source code

我试图在 AOSP 版本 10 中添加一个 APK 作为系统应用程序。我已经按照几乎不同的 links 中提到的程序进行了操作 Add apk in AOSP 但没有任何效果。这个link中提到的过程和我遵循的步骤是:

  1. 将我的 Apk 放入 Aosp_root/packages/apps/my-app-folder/my-app.apk
  2. /my-app-folder
  3. 中写入my-app.apkAndroid.mk

代码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)
  1. 然后在第 3 步中将 PRODUCT_PACKAGES 添加到 core.mkcommon.mk 我找不到指定的两个指定文件(core.mkcommon.mk)目录(build/target/products)。但是我在 build/target/product 文件夹中找到了 gsi-common.mk 文件,并在该文件中找到了 PRODUCT_PACKAGES 并在其中添加了 my-app 目录。

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

   `PRODUCT_PACKAGES += \
    messaging \
    PhotoTable \
    WAPPushManager \
    WallpaperPicker \
    Signal \`
  1. 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 徽标之前还显示操作系统已损坏。

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

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

在 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 将在 /system/app

中安装 APK

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

LOCAL_PRIVILEGED_MODULE := true

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

LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)

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

在从 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)

AOSP10 中需要的额外步骤:

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

<aospbase>\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

为 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 列表中提及模块名称:

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

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