将OpenSL添加到Android

问题描述:

即时通讯与NDK和OpenSL 我很困惑我试图将OpenSL添加到我的项目。并有一些问题。当我创建ndk项目 - 我没有文件Android.mk 但我有CMakeList将OpenSL添加到Android

在教程处处谈论android.mk在哪里需要写一个字符串实现OpenSL的项目。

这里我build.graddle(模块)文件

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是好的,我看到这条线在日志中。 但主要问题什么即时做错了。如何在没有Android.mk

实施OpenSL在google.devandroid部分其告诉 添加LOCAL_LDLIBS += -lOpenSLES在每一个教程的所有讲述android.mk到的Android.mk 。但我没有这个文件。任何帮助我吗? 例如咕link to example

+0

这看起来很适合我。你看到什么错误? –

+0

我发现错误我有cpp文件native-lib.cpp,但宣布native-audio-jni – Peter

在我建议增加这源文件或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)