如何在 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.apk
将my-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.mk
或 common.mk
我无法在指定目录 (build/target/products
) 中找到两个指定文件 (core.mk
或 common.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 中:
<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中添加系统应用程序。我尝试了几种方法,但它不起作用。这是我的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 配置添加新符号时,silentoldconfig 无法构建