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

9
我尝试将一个APK添加到AOSP版本10中作为系统应用程序。我已经按照几乎所有不同链接中提到的步骤进行了操作,这里是其中一篇文章中提到的在AOSP中添加apk,但什么都没起作用。我遵循的步骤和此链接中提到的过程如下:
  1. 将我的APK放在 Aosp_root/packages/apps/my-app-folder/my-app.apk
  2. /my-app-folder 中编写 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. 第三步是在core.mkcommon.mk中添加PRODUCT_PACKAGES。但我在指定目录build/target/products中找不到这两个指定的文件(core.mkcommon.mk),但我在build/target/product文件夹中找到了gsi-common.mk文件,并在其中找到了PRODUCT_PACKAGES,在其中添加了我的应用程序目录。

以下为gsi-common.mk的代码:

   `PRODUCT_PACKAGES += \
    messaging \
    PhotoTable \
    WAPPushManager \
    WallpaperPicker \
    Signal \`

在为aosp-root重新构建并将其刷入设备后,没有任何更改,my-app.apk未被添加。然后我在packages/apps目录中使用mm命令来构建my-app.apk,并将其添加到aosp_root/out/target/product/taimen/system/app中。然后我运行了make snod命令以重新生成系统映像,它被创建了。当我将此映像刷入我的Pixel设备时,它停留在Google标志上,并在显示Google标志之前显示操作系统已损坏。
请问我错过了什么或哪一步出错了?

2
欢迎来到 Stack Overflow - 请查看这篇文章 https://stackoverflow.com/help/how-to-ask 它将帮助您改进问题,从而增加找到您所寻找的答案的机会。 - HaemEternal
@ShivamJha 不好意思,还没有解决,我正在努力中。如果我完成之前你已经解决了,请告诉我。 - semw
1
@caiomcg:你是怎么添加应用的?你是按照我所做的步骤来操作的吗?如果应用程序已经被添加到了你的system.img中,但在设备上刷入system.img后没有看到启动图标,那可能是你的应用程序出了一些问题,或者是读取权限的问题。 - semw
嗨@semw,感谢您的快速回复。我进行了类似的过程,我的makefile有点不同,我需要禁用ART优化,因为我的目标不是此设备的api版本,尽管它在compileSdkVersion和minSdkVersion之间的范围内。我的APK已经预签名并且已经作为常规应用程序在同一设备上进行了测试。我可以通过ADB在设备的system/app文件夹中看到apk,但它没有安装。我可以尝试使用测试应用程序进行安装以确保。您能详细说明一下读写权限问题吗?提前致谢。 - caiomcg
@caiomcg:如果添加了它,那么它也应该被安装。读写权限意味着您的.apk应该具有与源代码类似的权限。您的构建应该完全访问.apk。您可以通过ls-l命令检查权限。 - semw
显示剩余5条评论
4个回答

9

针对Android 11和Android 8.1进行回答。

在/package/apps/中为你的应用程序创建一个文件夹。

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

你知道如何在makefile或AOSP中添加应用程序的.so库吗?我在一个apk中遇到了库问题。它作为用户应用程序运行良好,但作为系统应用程序时存在库问题。 - semw
1
我已经解决了,我的问题是我在build/target/product/的错误文件中编写了模块名称。在handheld_system.mk中编写后,问题得到解决。 - semw

2

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


嗨@Hermet, 你知道如何从应用程序源代码(完整的Android Studio项目)中添加系统应用程序到AOSP吗?我尝试了几种方法,但都没有成功。这是我的错误链接:https://groups.google.com/g/android-porting/c/YOTDs-TUV7M/m/HYG4Y79PDAAJ - semw

2

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

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

/package/app/<你的应用程序文件夹>

然后,在此文件夹中添加:

empty Android.mk
< yourapp.apk >

Android的Makefile应该引用您的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。

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

LOCAL_PRIVILEGED_MODULE := true

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

参考资料: 如何在AOSP构建中添加APK文件?


请将您尝试过但未能正常工作的更改添加到问题中。 - Daud Arfin
我已经编辑了问题并列出了我所遵循的整个过程。请现在进行审核。 - semw

0
在从AOSP构建Android镜像之前,您必须通过“lunch”命令选择构建目标。如果您要为使用Qualcomm Snapdragon 8xx处理器的Google Pixel设备构建,则应按以下方式进行lunch:
$ 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
@semw:你检查了/system/app和/system/priv-app目录吗? - TuanPM
是的,我已经检查了这两个文件夹,应用程序没有被添加。 - semw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接