java - aar 库在安装/使用时如何处理?
问题描述
我试图了解aar
库如何在安装和运行时工作。我到处搜索,信息很少。aar
我得到的库有 4 个.SO
用于多个ABI
s 的文件。
我在手机上使用了一个资源管理器应用程序并导航到应用程序文件夹(安装后)/data/app/packagepath
并找到一个名为 lib 的文件夹,其中包含一个.SO
文件,该文件是我设备的ABI
.
我是否正确地假设 Android 设备选择了.SO
与其相关的文件而忽略了其余部分。然后,在启动时,应用程序将使用.SO
文件/data/app/packagepath
夹中的文件,而完全忽略包含在其中的 aar 文件APK
。那么,该aar
文件就像一种仅在安装时使用一次且仅在安装时使用的资源?
谢谢。
解决方案
Android Archive(AAR 文件)应被视为依赖交付打包,而不是直接捆绑在 APK 中。
APK本身不区分资产和资源,因为它们都属于一个应用程序,因此所有组件都合并到各自的目录中。
在 AAR 之前,尝试集成第三方库意味着集成开发人员必须处理合并过程,这意味着需要跟踪图像、JNI 二进制文件等资源,并处理依赖冲突。
如Android 库文档中所述,AAR 处理管道的一些功能包括:
- 资源合并冲突
- 每个库模块创建自己的 R 类
- 一个库模块可能包含它自己的 ProGuard 配置文件
至于为什么只有一个.so
文件,我希望看到 APK 中的所有 ABI,系统只会为设备安装适当的平台二进制库。
实际上在安装时,会发生 Ahead Of Time (AOT) 编译,有关更多详细信息,请参阅Android Runtime (ART) 和 Dalvik。
推荐阅读
- file-io - 我在哪里以及如何创建另一个文件夹来放置文本文件,以便在我导出时它们可以工作?
- visual-studio-code - VS Code 中红色矩形内的文字是什么意思?
- nginx - Uvicorn 没有随机处理一些请求
- windows - 如何在系统启动时使用 c# 服务执行进程
- linux - 在 i3 中将触摸手势绑定到 gnome-terminal
- ios - 新的 React-Native 项目:构建失败 (ios)
- microsoft-cognitive - 努力让标记屏幕出现在 Forms Recognizer Sampler Labling Tool 的 Docker 容器中
- go - 如何使用其中一种方法返回同一接口的对象的接口?
- python - 通过最小化数据点之间的分布来降低维度
- vuetify.js - 如何自定义表头中的所有元素?