06-02 13:35:26.867: DEBUG/dalvikvm(211): Trying to load lib /data/data/com.example/lib/libexample-class-jni.so 0x44c06878 06-02 13:35:26.907: DEBUG/dalvikvm(211): Added shared lib /data/data/com.example/lib/libexample-class-jni.so 0x44c06878 06-02 13:35:26.907: DEBUG/dalvikvm(211): No JNI_OnLoad found in /data/data/com.example/lib/libexample-class-jni.so 0x44c06878 06-02 13:35:27.047: DEBUG/dalvikvm(96): GC freed 639 objects / 37376 bytes in 288ms 06-02 13:35:27.087: DEBUG/dalvikvm(211): +++ not scanning '/system/lib/libwebcore.so' for 'generate' (wrong CL) 06-02 13:35:27.107: DEBUG/dalvikvm(211): +++ not scanning '/system/lib/libmedia_jni.so' for 'generate' (wrong CL) 06-02 13:35:27.107: DEBUG/dalvikvm(211): +++ not scanning '/system/lib/libexif.so' for 'generate' (wrong CL) 06-02 13:35:27.107: DEBUG/dalvikvm(211): +++ not scanning '/system/lib/libsrec_jni.so' for 'generate' (wrong CL) 06-02 13:35:27.107: WARN/dalvikvm(211): No implementation found for native Lcom/example/ExampleClass;.generate ([SI)I 06-02 13:35:27.107: WARN/dalvikvm(211): threadid=15: thread exiting with uncaught exception (group=0x4001b188) 06-02 13:35:27.107: ERROR/AndroidRuntime(211): Uncaught handler: thread thread1 exiting due to uncaught exception 06-02 13:35:27.126: ERROR/AndroidRuntime(211): java.lang.UnsatisfiedLinkError: generate 06-02 13:35:27.126: ERROR/AndroidRuntime(211): at com.example.ExampleClass.generateTone(Native Method) 06-02 13:35:27.126: ERROR/AndroidRuntime(211): at com.example.ExampleClass.run(ExampleClass.java:27) 06-02 13:35:27.126: ERROR/AndroidRuntime(211): at java.lang.Thread.run(Thread.java:1096) 06-02 13:35:27.238: DEBUG/dalvikvm(51): GC freed 6464 objects / 342984 bytes in 852ms 06-02 13:35:27.607: INFO/Process(51): Sending signal. PID: 211 SIG: 3 package com.example; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack; public class ExampleClass implements Runnable { static private final int mBufferSize = 8000; private AudioTrack mTrack; private short mBuffer[] = new short[mBufferSize]; private int mSample; public ExampleClass() { mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, mBufferSize * 2, AudioTrack.MODE_STREAM); mSample = 0; } public void run() { mTrack.play(); while(true) { // fill the buffer generate(mBuffer, mBufferSize); mTrack.write(mBuffer, 0, mBufferSize); } } static { System.loadLibrary("example-class-jni"); } public native int generate(short [] data, int size); } Android.mk: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := example-class-jni LOCAL_SRC_FILES := example-class-jni.cpp # for logging LOCAL_LDLIBS += -llog include $(BUILD_SHARED_LIBRARY) example=class-jni.cpp: #include #include #include #include #include #include #include // for native asset manager #include #define SUCCESS 1 extern "C" { JNIEXPORT jint JNICALL Java_com_example_ExampleClass_generate(JNIEnv *env, jobject thiz, jshortArray data, jint size); } JNIEXPORT jint JNICALL Java_com_example_ExampleClass_generate(JNIEnv *env, jobject thiz, jshortArray data, jint size) { return SUCCESS; }