超级动力库链接不起作用

时间:2016-04-18 23:39:44

标签: java android c++ audio android-ndk

我尝试将超级动力库添加到新的android工作室项目中,我按照Android的示例,但我仍然遇到链接库的问题。

我有这个错误:

  

java.lang.UnsatisfiedLinkError:找不到void com.xxx.audiomixprototype.MainActivity.AudioMixPrototype(java.lang.String,long [])的实现(尝试过Java_com_xxx_audiomixprototype_MainActivity_AudioMixPrototype和Java_com_xxx_audiomixprototype_MainActivity_AudioMixPrototype__Ljava_lang_String_2_3J)

我遵循Superpowered github自述文件的简短教程 https://github.com/superpoweredSDK/Low-Latency-Android-Audio-iOS-Audio-Engine

一切都很清楚,但我不明白最后一点:

  

创建自定义.cpp和.h文件,然后不要忘记在Android.mk中正确设置LOCAL_MODULE和LOCAL_SRC_FILES

可能这就是我无法正确链接此库的原因。任何解决方案如何正确设置LOCAL_MODULE和LOCAL_SRC_FILES?

2 个答案:

答案 0 :(得分:1)

我在这里做了一些猜测,所以我将概述我对你的项目的假设。

1)你有一个带有以下行的Java文件:

private native void AudioMixPrototype(String apkPath, long[] offsetAndLength);

2)你在src / main / jni / filename.cpp中有这个方法的JNI实现

如果您未在Android.mk中正确设置LOCAL_MODULE和LOCAL_SRC_FILES,则Java无法解析对此方法的JNI调用,从而导致链接错误。您需要将以下内容添加到Android.mk中:

include $(CLEAR_VARS)

# name your JNI module
LOCAL_MODULE := audio-mix-prototype 

# assuming your Android.mk is also in src/main/jni, 
# provide the filename to the JNI implementation of your method
LOCAL_SRC_FILES := filename.cpp

# add your flags, other libraries, etc. here

include $(BUILD_SHARED_LIBRARY)

Superpowered SDK中有一些很好的例子。您可以根据Superpowered here查看项目的Android.mk文件示例。

答案 1 :(得分:1)

好的,我找到了解决方案。当我复制SuperpoweredExample.cpp文件时,我没有在此文件中更改JNIEXPORT。

我有这个:

JNIEXPORT void Java_com_superpowered_crossexample_MainActivity_SuperpoweredExample(JNIEnv *javaEnvironment, jobject self, jstring apkPath, jlongArray offsetAndLength);

取而代之的是:

JNIEXPORT void Java_com_xxx_audiomixprototype_MainActivity_SuperpoweredExample(JNIEnv *javaEnvironment, jobject self, jstring apkPath, jlongArray offsetAndLength);

我知道愚蠢的错误,但也许别人会遇到同样的问题。