android - 在哪里放置我的 android 应用程序所需的 c++ .so 库
问题描述
我制作了一个基于 ndk 的 android 应用程序,当我通过单击 Android Studio 中的运行按钮运行它时,我发现该应用程序已安装并在我连接的 android 设备上运行。但它抱怨它无法加载一些 .so 文件,例如libc++_shared.so
and libomp.so
,我做了一些研究,并jniLibs
在我的app\src\main
文件夹中创建了一个,并将这两个 .so 文件复制到其中,现在一切正常。
但是,我仍然不清楚到底发生了什么:
- 当我单击运行按钮时,应用程序安装/保存在设备上,.so 文件是否复制到同一位置?
- 我怀疑将 .so 文件复制到 .so 文件是否是一种好习惯
jniLibs
,这样的 .so 文件可以由许多应用程序共享,如果每个应用程序都有自己的副本,更新它们变得很困难。有没有办法将它们存储在一个共同的地方以供应用程序共享? - 我还可以在不同的应用程序之间共享 android 设备上的 .so 文件吗?
解决方案
- 当我单击运行按钮时,应用程序安装/保存在设备上,.so 文件是否复制到同一位置?
应用程序保存在/data/app/your.app.name-cert-hash==
同一位置,.so 库存储在同一位置,例如/data/app/your.app.name-cert-hash==/lib/x86
(如果android:extractNativeLibs="true"
在 AndroidManifest.xml/application 中,否则库直接压缩为 .apk)。
要发现 Android 文件系统,您可以使用 ADB(也可以使用模拟器):
从 AS 运行您的应用程序
在 su 模式下运行 adb shell:
adb shell su ls -als /data/app
- 我怀疑将 .so 文件复制到 jniLibs 是否是一种好习惯,这样的 .so 文件可以由许多应用程序共享,如果每个应用程序都有自己的副本,更新它们变得很困难。有没有办法将它们存储在一个共同的地方以供应用程序共享?
由于 Android 安全方法,这是不可能的。
- 我还可以在不同的应用程序之间共享 android 设备上的 .so 文件吗?
不。
推荐阅读
- python - 如何在 keras fit_generator() 中定义 max_queue_size、workers 和 use_multiprocessing?
- c++ - Cannot Obtain Similar DL Prediction Result in Pytorch C++ API Compared to Python
- eclipse - 如何解决 jubula autagent“autagent 意外退出”的 mac'os 问题?
- html - 实现实时背景
- api - Twitter API 标准搜索:我可以获得隐藏的回复吗?
- python - 在 Docker 中的 Ubuntu 上使用 azure.storage.blob.BlockBlobService 运行 python 脚本时没有名为“_cffi_backend”的模块
- sql-server - How to get count of number of days left in month from given date
- git - WebStorm - how change CRLF line endings into LF
- c++ - 从二进制文件中保存的 4 字节双精度读取 8 字节双精度
- android - 插页式广告 kotlin