我正在尝试编写一个使用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'
}
正如我之前所说,任何帮助都将不胜感激!
感谢您的反馈。我终于成功了。关键在于“构建”。gradle’-文件。
在“defaultConfig”部分,你必须告诉Android studio你想要链接lame。因此,添加
ndk{
moduleName "Lame"
ldLibs "log"
}
这对我来说很有用:-)。
干杯
马丁
野驴猜猜...
您的构建没有像应该的那样连接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链接。我怎样才能做到这一点?