何时安装系统/应用中的APK?

问题描述

我创建了一个自定义系统映像,并将另一个APK放入系统/应用程序中。这有点工作,我可以运行该应用程序,但是未加载本机库(loadLibrary()失败)。当我在APK上调用pm install时,一切正常,并且本机库已加载。

我的结论是APK未正确安装。我会很高兴了解我所观察到的行为。这是应该的方式还是我缺少什么?包管理器将在什么时候在应用程序(或priv-app)中安装APK。是否在某种程度上运行某种设备设置?

解决方法

在AOSP上预安装的应用程序并没有像“复制过来”那样安装。

要使“预编译的库”也被“复制”,必须在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库。在设备中安装应用(下午安装) 然后打开android studio(安装了pc的pc附带的设备), 单击查看->工具窗口->设备文件资源管理器。它将打开 右侧的设备资源管理器,转到数据文件夹并检查 应用程序包名称中的库。

  • 复制库并在 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中添加预构建的APK时,它将起作用