Добавить OpenSL на андроид

Я очень запутался с NDK и с OpenSL. Я пытаюсь добавить OpenSL в свой проект. И иметь некоторые проблемы. Когда я создаю проект ndk, у меня нет файла Android.mk, но есть CMakeList.

в учебниках везде говорится об android.mk, где нужно написать одну строку для реализации OpenSL в проекте.

здесь мой файл build.graddle(module)

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path 'CMakeLists.txt'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs 'imported-lib/src/', 'more-imported-libs/src/'
        }
    }
}

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

CMakeList.txt

cmake_minimum_required(VERSION 3.4.1)
add_library( # Specifies the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )

             # Specifies a path to native header files.
             include_directories(src/main/cpp/include/)

             # Include libraries needed for native-audio-jni lib
             target_link_libraries(native-audio-jni
                                   android
                                   log
                                   OpenSLES)

и простой тест на ndk

#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring JNICALL
Java_ndk_test_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

вызов функции stringFromJNI в порядке, я вижу эту строку в журналах. Но главный вопрос, что я делаю неправильно. Как внедрить OpenSL без Android.mk

В разделе google.devandroid говорится о добавлении LOCAL_LDLIBS += -lOpenSLES в Android.mk, в каждом руководстве все рассказывается об android.mk. Но у меня нет этого файла. Кто-нибудь может мне помочь? в примере gooссылка на пример< /а>


person Peter    schedule 18.09.2017    source источник
comment
Мне это кажется правильным. Какую ошибку вы видите?   -  person Dan Albert    schedule 18.09.2017
comment
я обнаружил ошибку, у меня есть файл cpp native-lib.cpp, но объявленный native-audio-jni   -  person Peter    schedule 19.09.2017


Ответы (1)


Я предлагаю добавить это в исходный файл или файл .h:

#include "OpenSLES.h"
#include "OpenSLES_Android.h"
#include "OpenSLES_AndroidConfiguration.h"

Я основывал свое решение на этом примере: https://android.googlesource.com/platform/system/media/+/bd2fc031926582ee8b0df40673c66dfa4cc45a61/opensles/tests/examples/slesTestRecBuffQueue.cpp

и в CMakeList.txt:

target_link_libraries(
                      android
                      OpenSLES)
person Community    schedule 29.09.2017