system/app 中的 APK 何时安装?

When are the APKs in system/app being installed?

我创建了一个自定义系统映像并将一个额外的 APK 放入 system/app。这有点管用,我可以 运行 应用程序,但是没有加载本机库(loadLibrary() 失败)。当我在 APK 上调用 pm install 时,一切正常并且加载了本机库。

我的结论是 APK 没有正确安装。我会很感激我观察到的行为的任何背景。这是应该的方式还是我错过了什么?包管理器什么时候会在应用程序(或私有应用程序)中安装 APK。是否有某种设备设置 运行 在某个时候?

Pre-installed AOSP 上的应用程序安装数量不如 'copied over'。

为了也有预构建的库 'copied over' 你必须在你的 Android.mk.

中指定它们

您可以通过在 Android.mk 上指定 LOCAL_PREBUILT_JNI_LIBS 来做到这一点。

这是一个例子:

LOCAL_PATH := $(call my-dir)

my_archs := arm x86 arm64
my_src_arch := $(call get-prebuilt-src-arch, $(my_archs))

include $(CLEAR_VARS)
LOCAL_MODULE := TestApp
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := TestApp.apk

LOCAL_PREBUILT_JNI_LIBS := \
  @lib/arm64-v8a/libnoise.so

LOCAL_MODULE_TARGET_ARCH := $(my_src_arch)

include $(BUILD_PREBUILT)  

有一个名为 genandroidmk 的有用工具可以自动为您生成此 Android.mk:
https://github.com/northbright/genandroidmk

按照以下步骤操作

  • 检查预构建 APK 的库。在设备中安装应用程序(pm install) 然后打开android studio(apk安装的设备附带pc), 单击“查看”->“工具”windows->“设备文件资源管理器”。它会打开 右侧的设备资源管理器,转到数据文件夹并检查 应用程序包名称中的库。

  • 复制库并在 aosp_source/external/yourlibfolder 中创建一个文件夹,然后将您的库粘贴到那里。

  • 转到build/target/product并将此代码写入相关的 make 文件。

    external/yourlibfolder/yourlibname.so:system/lib/yourlibname.so \
    external/yourlibfolder/yourlibname.so:system/lib64/yourlibname.so \ 
  • 在AOSP中添加应用依赖库。现在,当您在 AOSP 中添加 Pre-built apk 时,它将起作用