Android Studio——链接一个包含.so的.aar



我正在将一个现有的工作项目从Eclipse迁移到Android Studio。代码库由一个用NDK构建的本地c++库(libMylib.so),一个包装所有本地代码的Java类(MyClass.java)和一个测试工具(MyApp)组成。

在Android Studio中,我创建了一个独立的项目(不只是一个模块)来构建"MyClass",该项目有一个"src/main/jniLibs"文件夹,我在那里放置了"libMyLibrary.so"。

项目构建并生成"MyClass"。

我的测试应用程序导入这个.aar文件作为一个新的依赖"模块"。它构建并部署到设备,但在尝试调用.so文件中包含的本机方法时遇到运行时异常。

Trying to load lib /data/data/com.mycompany.webview/lib/libMylib.so 0x4131cd18
Added shared lib /data/data/com.mycompany.webview/lib/libMylib.so 0x4131cd18
nativeCalls.cpp﹕ JNI_OnLoad() called successfully.
No implementation found for native Lcom/mycompany/Mylib/MyClass;.nativeInit
Shutting down VM

在"JNI_OnLoad()"中打印的调试语句是我的,所以我知道正确的。so正在加载而没有问题。但是随后调用'nativeInit()'时出现了问题。

什么样的事情会导致这种失败?

谢谢。

1) JNI_OnLoad()返回什么值?在我拥有的代码中,它是JNI_VERSION_1_6

2)函数名是否正确?

cd bin/classes
javah com.example.MyClass com.example.OneMoreClass

这将为您的本机函数生成正确的C/c++头文件。

相关内容

最新更新