如何在AOSP构建中添加APK?

48

我需要将一些第三方APK添加到我的AOSP构建中。我应该将这些APK放在哪个文件夹中,以便在构建代码并创建映像时,它们会被安装在模拟器中?

看起来系统应用程序保存在packages/app文件夹中,因此我需要知道第三方APK保存的位置。


可能是重复问题:将预编译的APK添加到Android AOSP system.img中 - Cameron Martin
4个回答

69

向构建添加第三方APK绝对可行。

此外,具有源代码的APK和APP将进入同一位置; package/app文件夹。

将新的APK添加到构建中

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

<aosp root>/package/app/< yourappfolder >

然后在此文件夹内添加:

  • 空的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)
在您的apk中创建一个条目在commons.mk中(从AOSP 8.1.0开始它被称为core.mk,通常可以在build/target/product中找到),添加以下行(检查其他行的位置)。
PRODUCT_PACKAGES += < what you have defined in LOCAL_MODULE, it should be your app folder name >

编译AOSP并在系统上安装一个全新的应用。

注:

  • 如果您的APK已经签名,请将特殊值PRESIGNED用作LOCAL_CERTIFICATE的值
  • 如果您想让您的APK最终出现在/data/app/目录中,在include $(BUILD_PREBUILT)之前添加一行代码LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)

7
谢谢你。我已经厌倦了看到所有的ROM厨房帖子。 - Silas Greenback
1
@Tiago:LOCAL_CERTIFICATE := <desired key> 是什么意思?你能否解释一下? - Raj
1
@TiagoCosta,你知道如果要对一个系统特权应用程序执行相同的操作,有哪些东西需要添加吗?这个应用程序应该在system/priv-app目录下。我已经发布了一个问题:http://stackoverflow.com/questions/32997233/adding-system-apk-to-android-custom-rom - Adam W
2
@Raj 显然你也可以使用 presigned 值:https://groups.google.com/forum/#!topic/android-building/i4oaJ2DtadM - Cameron Martin
2
@HyperionX 使用 core.mk。 - Methnani Bilel
显示剩余7条评论

10
上面的Android.mk将会把APK安装在/system/app中。
如果你想要将APK安装在/data/app中,需要在Android.mk中添加以下行,在include $(BUILD_PREBUILT)这一行之前。
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)

这个在被接受的答案中缺失了,它完善了这个问题。 - Ishay Peled

5
您可以在目标输出目录中执行以下操作:
<path-to-your-build-dir>/host/linux-x86/bin/simg2img system.img temp.img
mkdir system_root
sudo mount -t ext4 -o loop temp.img system_root

在这个时候,你可以对system_root中的文件进行任何修改,例如向system/app添加apks等...

完成后,只需返回输出目录并执行以下操作:

sudo umount system_root
<path-to-your-build-dir>/host/linux-x86/bin/img2simg temp.img system.img

您现在可以像往常一样使用fastboot刷写system.img。

3
这个回答离问题更近了,但并不能完全回答所问的具体问题,因为这种方法是对图像进行后期修改,而不是让构建过程包含应用程序的方法。不过,它至少可以被脚本化。 - Chris Stratton

1

按照第一个答案制作apk和Android.mk文件,并将其放置在应该放置的位置。但是现在build/target/product中没有core.mk文件,而是被重命名为handheld_product.mk,因此在那里添加您的应用程序文件夹名称。


当我这样做时,在模拟器中运行构建时,应用程序似乎没有安装。为什么? - Joseph .M 101

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