构建使用共享库的 AOSP 应用

Building an AOSP app that uses shared libraries

如何从源代码构建 AOSP 应用程序(使用 mma 构建,因此只有所需的模块而不是完整的系统映像)并可以访问共享库?

我正在构建经过一些修改的 LatinIME。 由于我想方便安装和调试,所以我更改了包名。现在我可以轻松地将应用程序安装为用户应用程序,但它无法访问系统分区中的 .so 文件。如果我尝试使用原始包名称安装应用程序,则无法安装,因为安装了旧应用程序。

library "/system/lib64/libjni_latinimegoogle.so" ("/system/lib64/libjni_latinimegoogle.so") needed or dlopened by "/system/lib64/libnativeloader.so" is not accessible for the namespace

我能想到的另一种方法是将包名称保留为原始名称,但要么创建一个可刷新的 zip,要么每次都将 apk 复制到系统分区。

是否可以允许访问此文件(或将其包含在 apk 中)或我是否需要以困难的方式执行此操作?

最简单的方法是在您的 APK 中的 lib/arm64-v8a 或其他相关 ABI 下复制所有需要的非 public 系统本机库。 libjni_latinimegoogle.so 可能依赖于其他库,您也必须将它们与您的 APK 一起打包。确保您使用这些库的正确版本。您可以通过 adb.

system/lib64 中提取它们

但是替换系统分区中的 APK 是处理这种情况的更简洁的方法。这确实涉及每次重启,但我可能会选择这条轨道,以避免系统应用程序和用户应用程序之间可能存在的行为差异。