【问题标题】:When are the APKs in system/app being installed?系统/应用程序中的 APK 何时安装?
【发布时间】:2020-11-05 00:13:27
【问题描述】:

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

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

【问题讨论】:

  • “放”是什么意思?它是预构建的还是作为 AOSP 构建的一部分构建的?如果您提供构建脚本(Android.bpAndroid.mk),它会告诉我们更多信息。
  • 这是一个预建的 APK

标签: android android-source


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    按照这些步骤进行

    • 检查预构建 APK 的库。在设备中安装应用程序(pm install) 然后打开android studio(apk安装的设备与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 时,它就可以工作了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多