当前位置: 首页 > 知识库问答 >
问题:

如何将“蹩脚”mp3编码器共享对象链接到Android Studio项目

晋功
2023-03-14

我正在尝试编写一个使用Lame mp3编码器的Android应用程序。我的开发环境是Android Studio 1.1。

根据Lame MP3编码器编译Android下的提示,我成功安装了Android NDK并编译了Lame。在/app/src/main/libs/armeabi下,我获得了共享对象“libmp3lame.so”,其中

libmp3lame.so:ELF 32位LSB共享对象,ARM,版本1(SYSV),动态链接(使用共享库),剥离。

但是,尝试在一个简单的Android Studio项目中加载此文件,利用

static {
    System.loadLibrary("mp3lame");
}

始终会导致以下错误:

java.lang.无法满足LinkError:dalvik.system.PathClassLoader[DexPathList[[zip file"/data/app/.../base.apk"], nativeLibraryDirectory=[/data/app/.../lib/arm64, /vendor/lib64, /system/lib64]]]找不到libmp3lame.so

我还尝试用

System.load(*full file name*);

但这导致了同样的错误。

从目前为止我读到的内容来看,我认为这是一个gradle问题,但我不知道如何解决这个问题。任何帮助都将不胜感激!

我的ndroid.mk长这样

本地路径:=$(调用我的目录)

    include $(CLEAR_VARS)

    LOCAL_MODULE        := libmp3lame
    LOCAL_SRC_FILES     := \
    ./libmp3lame/bitstream.c \
    ./libmp3lame/encoder.c \
    ./libmp3lame/fft.c \
    ./libmp3lame/gain_analysis.c \
    ./libmp3lame/id3tag.c \
    ./libmp3lame/lame.c \
    ./libmp3lame/mpglib_interface.c \
    ./libmp3lame/newmdct.c \
    ./libmp3lame/presets.c \
    ./libmp3lame/psymodel.c \
    ./libmp3lame/quantize.c \
    ./libmp3lame/quantize_pvt.c \
    ./libmp3lame/reservoir.c \
    ./libmp3lame/set_get.c \
    ./libmp3lame/tables.c \
    ./libmp3lame/takehiro.c \
    ./libmp3lame/util.c \
    ./libmp3lame/vbrquantize.c \
    ./libmp3lame/VbrTag.c \
    ./libmp3lame/version.c

    LOCAL_LDLIBS := -llog

    include $(BUILD_SHARED_LIBRARY)

这是我的身材。格拉德尔

应用插件:com.android.application

android{CompileSDK版本21 buildToolsVersion“21.1.2”

defaultConfig {
    applicationId "eu.martinloeser.android.lamefromscratch"
    minSdkVersion 15
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

正如我之前所说,任何帮助都将不胜感激!

共有2个答案

宇文俊明
2023-03-14

感谢您的反馈。我终于成功了。关键在于“构建”。gradle’-文件。

在“defaultConfig”部分,你必须告诉Android studio你想要链接lame。因此,添加

        ndk{
        moduleName "Lame"
        ldLibs "log"
    }

这对我来说很有用:-)。

干杯

马丁

龚凯泽
2023-03-14

野驴猜猜...

您的构建没有像应该的那样连接ndk-build。因此...阅读AS/ndk集成

按照他的指示进行更改,以保留您的Android。mk和不被分流到自动发电。

在你的构建Gradle中包含他的东西,以表明你没有使用jni默认值。

包括针对JNI文件夹运行ndk-build的显式步骤。

看看你在apk中没有libmp3lame.so...

 类似资料:
  • 我有一个链接到我的Firebase帐户的Flutter项目(使用< code>FlutterFire CLI)。< br >现在我已经完成了这个项目,我想卖掉源代码。< br >如何更改与此项目关联的Firebase帐户? 当使用时,它会生成一个名为包含每个平台的Firebase选项,如下所示: 我必须改变这些值吗?如果是,我在哪里可以找到所有这些? 我试图更改值(在中),这导致了此错误: 它抛出

  • 我正在尝试将Firebase DataSnapshot对象保存到SharedReferences。 请看这篇文章,我在其中设计了一种方法来实现这一点。 ... 到目前为止,我已经尝试了: > 使用Gson。Json方法。结果:似乎不起作用。。。我不认为DataSnapshot类是“POJO”类型的类。。。至少没有一个能与gson合作。 使用此方法: 私有静态字符串toString(可序列化o)引发

  • 我有一个Laravel项目,我想把它部署到服务器上,问题是我们通常都有索引。php和。htaccess在公共文件夹中,但在我的例子中,我将这两个文件放在根目录中。所以我想知道,发球需要做哪些改变? 我怎样才能把它上传到服务器上?

  • 问题内容: 我正在尝试使用集成使用我的应用程序编写的第三方库。我已经为测试编写了所有的python代码。我很难找到设置此示例的方法。 我有一个手动创建的文件。第三方给了我a和a 。据我所知,没有其他依赖项。有人可以提供使用和进行设置的示例吗? 谢谢 问题答案: 当然可以! (在下文中,我假设你已经知道如何处理之间和交互和,如果这不是完全的情况下,只问我会开发部分以及) 示例(来自我的C ++项目,

  • 我试图将我编译的简单共享库(libhello.so)链接到我的本机C++代码中。库libhello.so文件是: 1。Get13.h 2.get13.cpp Android文件是: 1。myapplication/jni/android.mk 问题是,在gradle构建过程中,我在文件native-lib.cpp中得到了这个错误: 我使用android NDK包中包含的make_standalon

  • 问题内容: 我正在尝试建立一个共享库。让我们说libabc.so。它使用另一个.so文件,例如lib123.so(/ usr / local / lib中的一个lib)。现在我在我的应用程序中使用共享的liblibabc.so。说我的应用程序。我想知道我应该如何链接这些二进制文件?我不想直接将我的应用程序与lib123.so链接。my- app应该仅与libabc.so链接。我怎样才能做到这一点?