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中提到的过程和我遵循的步骤是:
- 将我的 Apk 放入
Aosp_root/packages/apps/my-app-folder/my-app.apk
- 在
/my-app-folder
中写入my-app.apk
的Android.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)
- 然后在第 3 步中将
PRODUCT_PACKAGES
添加到 core.mk
或 common.mk
我找不到指定的两个指定文件(core.mk
或 common.mk
)目录(build/target/products
)。但是我在 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 徽标之前还显示操作系统已损坏。
你能告诉我我遗漏了什么或哪一步错了吗?
将预构建的应用程序添加到构建中
在 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
我试图在 AOSP 版本 10 中添加一个 APK 作为系统应用程序。我已经按照几乎不同的 links 中提到的程序进行了操作 Add apk in AOSP 但没有任何效果。这个link中提到的过程和我遵循的步骤是:
- 将我的 Apk 放入
Aosp_root/packages/apps/my-app-folder/my-app.apk
- 在
/my-app-folder
中写入
my-app.apk
的Android.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)
- 然后在第 3 步中将
PRODUCT_PACKAGES
添加到core.mk
或common.mk
我找不到指定的两个指定文件(core.mk
或common.mk
)目录(build/target/products
)。但是我在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 徽标之前还显示操作系统已损坏。
你能告诉我我遗漏了什么或哪一步错了吗?
将预构建的应用程序添加到构建中
在 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