java - 将 OpenSL 添加到安卓

标签 java android android-ndk opensl

我对 NDK 和 OpenSL 很困惑 我正在尝试将 OpenSL 添加到我的项目中。并且有一些问题。当我创建 ndk 项目时-我没有文件 Android.mk 但我有 CMakeList

在教程中到处都在谈论 android.mk,其中需要编写一个字符串来实现 OpenSL 到项目。

这里是我的 build.gradle(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 没问题我在日志中看到了这一行。 但主要问题是我做错了什么。如何在没有Android.mk的情况下实现OpenSL

在 google.devandroid 部分它告诉 添加 LOCAL_LDLIBS += -lOpenSLES 到 Android.mk 在每个教程中都讲述了 android.mk。但是我没有这个文件。有什么可以帮助我的吗? 在 goo 的例子中 link to example

最佳答案

我建议将其添加到源文件或 .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)

关于java - 将 OpenSL 添加到安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46275819/

相关文章:

java - 如果我们不生成窗口,为什么 Timer 不工作?

android - 使用 ViewPager 检测滑动并自动切换

java - 小部件是什么意思并解释使用小部件

android - 如何在android.mk文件中指定c头文件

android - 适用于 Android Studio 的 GStreamer 教程

android - 在 android 中从 native 代码显示位图时出现问题

java - 基于时区存储晚或晚五小时的日期

Java编译时找不到类错误

java - 如何将 jar 文件添加到 Linux 的 CLASSPATH 中?

android - 应用程序版本 INSTANT_RUN?