相关疑难解决方法(0)

在包含下划线的Android包名称中调用JNI函数

我正在尝试使用LAME库在Android中实现MP3编码,遵循以下指南: Lame MP3 Encoder编译为Android http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on -Android与- JNI

但是我得到了一个java.lang.UnsatisfiedLinkError,我认为可能是因为我的包名包含一个下划线,它将其解释为句号.

看下面我的代码可能是这个问题,我该如何解决这个问题.或者是否有其他原因导致这种情况.在此先感谢您的帮助.

Record.java:

package co.uk.ing_simmons.aberdeensoundsites;

public class Record extends Activity implements OnClickListener {

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

private native void initEncoder(int numChannels, int sampleRate, int bitRate, int mode, int quality);

private native void destroyEncoder();

private native int encodeFile(String sourcePath, String targetPath);

[.....]
}
Run Code Online (Sandbox Code Playgroud)

wrapper.c:

void Java_co_uk_ing_simmons_aberdeensoundsites_Record_initEncoder(JNIEnv *env,
        jobject jobj, jint in_num_channels, jint in_samplerate, jint in_brate,
        jint in_mode, jint in_quality) {
[....]
Run Code Online (Sandbox Code Playgroud)

完整日志cat错误:

04-17 20:58:36.009: E/AndroidRuntime(26768): FATAL EXCEPTION: main
04-17 20:58:36.009: …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface android lame

19
推荐指数
2
解决办法
6677
查看次数

调用移植库的本机函数

我一直在关注如何使用Android NDK移植LAME库. http://blog.libertadtech.com/2011/02/porting-lame-encoder-to-android-arm.html

每个工作正常,我得到了libmp3lame.so文件.

现在进行第一次测试我想调用简单的函数:

 void get_lame_version(char *strbuf, size_t buflen, const char *prefix);
Run Code Online (Sandbox Code Playgroud)

我为LAME库编写了一个包装器:

package de.goddchen.android.youtubeconverter;

public class LameWrapper {

public static native void get_1lame_1version(char[] buf, int len,
        char[] prefix);
}
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

public class MainActivity extends Activity {

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

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        char[] buffer = new char[100];
        LameWrapper.get_1lame_1version(buffer, 100, "".toCharArray());
        ((TextView) findViewById(R.id.text)).setText(buffer.toString());
    }

}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

05-05 10:36:11.973: DEBUG/dalvikvm(199): Trying to load lib /data/data/de.goddchen.android.youtubeconverter/lib/libmp3lame.so …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk

5
推荐指数
1
解决办法
7553
查看次数

使用带有LAME的NDK的内置函数警告的不兼容的隐式声明

我正在尝试按照位于以下位置的教程进行操作

http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on-Android-with-JNI

其中的要点是它允许使用带有JNI的LAME MP3编码器.

我按照教程中提到的每个步骤进行操作.我的项目位于

C:\workspace\
Run Code Online (Sandbox Code Playgroud)

并被称为'LAME_Test'.根据教程中标有Compilation with NDK的部分,我继续编写了一个名为'Android.mk'的makefile,如下所示.

我在64位计算机上运行Windows 7.我安装了Cygwin和NDK,并测试了我的设置是否适用于我正在处理的另一个项目.但是,当我去

/cygdrive/c/workspace/LAME_Test/jni
Run Code Online (Sandbox Code Playgroud)

在Cygwin上发出以下命令

 /cygdrive/c/Android/android-ndk-r8b/ndk-build
Run Code Online (Sandbox Code Playgroud)

鉴于NDK位于

C:\Android\android-ndk-r8b
Run Code Online (Sandbox Code Playgroud)

编译吐出一堆像这样的警告

warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]                                                                                                   
Run Code Online (Sandbox Code Playgroud)

我在这篇帖子的底部附上了一小段警告(因为警告列表真的很大,可能只是增加了混乱 - 而不是增加价值).

想知道是否有一种灵巧的方法来解决这些警告并得到一个漂亮,干净,编译.

PS:我将补充一点,我能够在上面的链接(LAME4Android)中构建+运行示例项目.这需要编译本机代码.因此,看起来该项目实际上尽管发出了所有警告,但仍然很好.我最初认为它因为警告而被打破了.但是,如果有某种方法来修复警告,那确实会很棒.

Android.mk文件的内容

LOCAL_PATH := $(call my-dir)

    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 …
Run Code Online (Sandbox Code Playgroud)

java-native-interface mp3 android makefile lame

4
推荐指数
1
解决办法
2690
查看次数

如何使用NDK将Lame 3.99.5添加到Android Studio?

我是Android NDK的新手.我需要使用NDK将Lame库添加到Android Studio.我开始研究并找到一些有用的链接:

Lame MP3 Encoder编译为Android

如何将"跛脚"mp3编码器共享对象链接到Android工作室项目

我成功但只建立了"armeabi".我怎样才能构建另一个像:"arm64-v8a","armeabi-v7a","mips","mips64","x86","x86_64"?

先感谢您!

c java android android-ndk lame

3
推荐指数
1
解决办法
2688
查看次数

标签 统计

android ×4

java-native-interface ×3

lame ×3

android-ndk ×2

java ×2

c ×1

makefile ×1

mp3 ×1