gpt4 book ai didi

android - 如何将 JNI 部分与 Android 应用程序分开?

转载 作者:行者123 更新时间:2023-11-30 04:13:17 26 4
gpt4 key购买 nike

我正在编写一个 Android 应用程序。我正在使用 JNI 在 C++ 中实现一些应用程序。有没有办法真正将 JNI (C++) 代码与 Java Android 代码完全分开?像创建一个 JNI 项目之类的?因为我的 C++ 代码将成为一个小库,我将在另一个应用程序中使用它。我尝试创建一个 C++ 项目,但无法使用 ndk-build 进行编译。

最佳答案

实际上,Java 代码和 native 代码之间的联系相当松散,因为它是在运行时通过方法的名称完成的。

NDK 只是 C 编译器的特殊环境和库。必须生成合适的动态库文件,但这可以使用 ndk 脚本、使用 ndk 生成的“独立工具链”甚至在 java 项目构建之前(或之后,见下文)完成,在另一台机器上完成,等

通常情况下,.so 动态库会被复制到应用程序项目树中的适当位置,这样它最终会打包在 .apk 中并安装在可以通过 System.loadLibrary() 方法自动找到的设备上.但是您可以将它插入到其他完成的 .apk 中(这是一个具有特殊对齐和 jarsigner 签名的 zip 文件)。但即使是 .pak 实际上也不是将其传送到设备的唯一方式(尽管它是唯一推荐的方式)- 库也可以存储在应用程序的私有(private)文件夹等位置并使用 System.load( ) 它采用完整路径名而不是库名。

hotverspicy 确实有一点,即 java 代码需要一个本地方法“声明”来声明在 jni 库中实现的内容,并且这需要与本地函数实现名称中编码的实际包名称相匹配。但是,该包名称不必与其余 java 代码相同 - 它可以是可重用 C/C++ 库的通用名称,这只需要在匹配的 java 包中有一个简短的匹配 java 类文件姓名。

但除了 Neevek 的使用一个本地库与另一个本地库接口(interface)的想法之外,还可能使用对象工厂机制在运行时连接任意本地函数,只要在编译时设置一个关联 - 参见C/C++ Reflection and JNI - A method for invoking native code which hasn't been written yet的相关回答

关于android - 如何将 JNI 部分与 Android 应用程序分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10476585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com