如果多个活动和服务需要,在 Android 中加载本机库的位置
Where to load a native library in Android if required by multiple activies and services
我的一些 Kotlin classes 是由本地库(Rust 使用 jni)实现的。这些 classes 在大多数活动中使用,并由一个同步服务使用(第二个服务可能稍后出现)。
加载此库和处理加载错误的推荐解决方案是什么(例如,如果加载失败则发送错误报告)?
基本示例加载 MainActivity.onCreate
中的库。或者我经常在 MainActivity class 中看到一个静态块。
另一种方法可能是从 Application
派生的 class 中加载库。但我不确定是否只有一个 Application
实例用于所有活动和服务,或者是否为每个服务创建一个 ``Application``` 实例,为所有活动创建另一个实例。
所以我的问题是:放在哪里 System.loadLibrary()
?
是的,该应用程序是整个 Android 应用程序的单例。但您不必担心,如果库之前已加载,LoadLibrary() 将不执行任何操作。因此,最佳做法是在所有依赖此库的 类 的静态块中添加 LoadLibrary。
考虑使用 ReLinker 库,该库提供日志记录以及加载本机库时一些普遍存在的问题的解决方法。
我的一些 Kotlin classes 是由本地库(Rust 使用 jni)实现的。这些 classes 在大多数活动中使用,并由一个同步服务使用(第二个服务可能稍后出现)。
加载此库和处理加载错误的推荐解决方案是什么(例如,如果加载失败则发送错误报告)?
基本示例加载 MainActivity.onCreate
中的库。或者我经常在 MainActivity class 中看到一个静态块。
另一种方法可能是从 Application
派生的 class 中加载库。但我不确定是否只有一个 Application
实例用于所有活动和服务,或者是否为每个服务创建一个 ``Application``` 实例,为所有活动创建另一个实例。
所以我的问题是:放在哪里 System.loadLibrary()
?
是的,该应用程序是整个 Android 应用程序的单例。但您不必担心,如果库之前已加载,LoadLibrary() 将不执行任何操作。因此,最佳做法是在所有依赖此库的 类 的静态块中添加 LoadLibrary。
考虑使用 ReLinker 库,该库提供日志记录以及加载本机库时一些普遍存在的问题的解决方法。