在 Android 上使用 Java 进行开发时,“共享库”到底意味着什么? (`*.jar` 或 `*.so`)

问题描述 投票:0回答:1

我的第一个猜测是

*.so
(unix) 或
*.dll
(win) 是一个共享库。至少这是我用 C 编写代码的用法。

现在上下文正在为Android开发,是用Java->Dalvik风格完成的。

我对“

shared library
”这个词感到不明确。在 java 中,
*.jar
文件或
*.dex
文件似乎包含共享代码和库代码。

有没有参考资料可以告诉我

shared library
是什么意思?

一个非常具体的问题是 Android 开发者

aapt
打包东西有选项
--shared-lib

--共享库 制作一个共享库资源包,应用程序可以在运行时加载该资源包来访问库资源。暗示 --非常量 ID。

我现在不知道共享库是什么意思。我知道有这个

JNI
界面,一些
Android NDK
东西可能也有
*.so
文件,这可能意味着,但我真的不确定。

java android android-ndk shared-libraries terminology
1个回答
0
投票

在使用 Java 编写代码的 Android 开发人员中,他编写的类被编译为 Java 字节码(与构建过程中自动创建的其他类一起捆绑在 jar 中)。创建后,该字节码将转换为 Dalvik 字节码 (.dex),该字节码包含在应用程序包 (apk) 中。

除了 Java 代码之外,还可以使用用 C 代码编写的“本机库”对应用程序进行编程,并使用针对设备特定架构的 android-ndk 进行编译,生成 .so 文件(动态链接)或 .a 库(静态链接) 。通常这样做是为了解决性能问题或重用用 C 编写的库并避免将它们移植到 Java。正如您在问题中所说,此绑定是通过 JNI 库完成的。

这些库必须包含在应用程序包 (apk) 中,并由应用程序在运行时使用 System.loadLibrary() 加载。

© www.soinside.com 2019 - 2024. All rights reserved.