Android NDK, cannot call C method in Java -
i'm trying work android ndk libary called opensles. when try call in soundplayer class not find methods looking @ nativeaudio example @ github im doing correct or maybe skipped cannot find out.
i have following method in native-lib-jni.c file :
// create engine , output mix objects void java_com_example_gebruiker_drumioremastered_soundplayer_createengine(jnienv* env, jclass clazz) { slresult result; // create engine result = slcreateengine(&engineobject, 0, null, 0, null, null); assert(sl_result_success == result); (void)result; // realize engine result = (*engineobject)->realize(engineobject, sl_boolean_false); assert(sl_result_success == result); (void)result; // engine interface, needed in order create other objects result = (*engineobject)->getinterface(engineobject, sl_iid_engine, &engineengine); assert(sl_result_success == result); (void)result; // create output mix, environmental reverb specified non-required interface const slinterfaceid ids[1] = {sl_iid_environmentalreverb}; const slboolean req[1] = {sl_boolean_false}; result = (*engineengine)->createoutputmix(engineengine, &outputmixobject, 1, ids, req); assert(sl_result_success == result); (void)result; // realize output mix result = (*outputmixobject)->realize(outputmixobject, sl_boolean_false); assert(sl_result_success == result); (void)result; // environmental reverb interface // fail if environmental reverb effect not available, // either because feature not present, excessive cpu load, or // required modify_audio_settings permission not requested , granted result = (*outputmixobject)->getinterface(outputmixobject, sl_iid_environmentalreverb, &outputmixenvironmentalreverb); if (sl_result_success == result) { result = (*outputmixenvironmentalreverb)->setenvironmentalreverbproperties( outputmixenvironmentalreverb, &reverbsettings); (void)result; } // ignore unsuccessful result codes environmental reverb, optional example } my class called soundplayer (i don't know if has implement activity work? don't think right? )
my cmakelists.txt:
# sets minimum version of cmake required build native library. # ensures set of cmake features available # build. cmake_minimum_required(version 3.4.1) set(cmake_c_flags "${cmake_c_flags} -std=c99 -wall") add_library( native-lib-jni shared c:/users/gebruiker/androidstudioprojects/drumioremastered/ app/src/main/cpp/native-lib-jni.c ) include_directories(c:/users/gebruiker/androidstudioprojects /drumioremastered/app/src/main/cpp) target_link_libraries(native-lib-jni android log opensles) and androidmanifest:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.gebruiker.drumioremastered"> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundicon="@mipmap/ic_launcher_round" android:supportsrtl="true" android:theme="@style/apptheme"> <activity android:name=".drumplayeractivity"> android:screenorientation="portrait" <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> here drumplayer : package com.example.gebruiker.drumioremastered; import android.os.bundle; import android.support.v7.app.appcompatactivity; import android.widget.button; import com.example.gebruiker.drumioremastered.eventbus.messageevent; import com.example.gebruiker.drumioremastered.utilities.playbutton; import org.greenrobot.eventbus.eventbus; import butterknife.bindview; import butterknife.butterknife; import butterknife.onclick; public class drumplayeractivity extends appcompatactivity { @bindview(r.id.playbutton1) playbutton mplaybutton; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); butterknife.bind(this); } @onclick(r.id.playbutton1) public void playclicked(){ mplaybutton.changebuttonstate(); eventbus.getdefault(). post(createstatemessage(mplaybutton.getbuttonstate())); } public messageevent createstatemessage(boolean buttonstate){ messageevent message = new messageevent(); if(buttonstate){ message.setplayerstate(true); mplaybutton.settext("play"); } else{ message.setplayerstate(false); mplaybutton.settext("stop"); } return message; }
so @nikis basicly right put there wrong path class , forgot import libary , didnt wrote native methods in java class itself. :)
Comments
Post a Comment