Android Studio 找不到 Oboe headers,但应用程序仍在运行
Android Studio cannot find Oboe headers, but app still runs
我正在尝试将双簧管本机库合并到我正在制作的 DAW 中。它似乎在工作,该应用程序似乎可以正常运行。问题是,Android Studio 似乎无法从双簧管目录中找到 headers。这导致我无法使用 Android Studio 中的许多功能,例如预测等。
看起来像这样(无法上传图片):
#include <jni.h>
#include <string>
#include <android/log.h>
#include <oboe/Oboe.h>
using namespace std;
extern "C" JNIEXPORT void JNICALL
Java_com_ralleq_nsynth_MainActivity_buildAudioStream(JNIEnv *env, jclass /* this */) {
oboe::AudioStreamBuilder builder;
oboe::AudioStream *stream = nullptr;
oboe::Result result = builder.openStream(&stream);
__android_log_print(ANDROID_LOG_VERBOSE, "NATIVE", "Didn't crash", 0);
}
除非我每次引用 "oboe",否则文本会变红。
将鼠标悬停在红色文本上会显示一个弹出窗口:“找不到 'oboe'”。这很奇怪,因为该项目在编译和 运行 编写代码时没有问题。
我认为这可能与 Android Studio 中未正确定义的路径有关。我尝试创建一个共享库来模仿双簧管存储库中给出的示例代码,并尝试将其实现为库而不是 CMakeList 文件中的子目录,但最终返回到引用我的 git-imported 项目项目文件夹作为子目录。
Oboe在makefile中的实现:
set(OBOE_DIR /AndroidStudioProjects/oboe)
add_subdirectory(${OBOE_DIR} ./oboe)
include_directories(${OBOE_DIR} ./include)
target_link_libraries( # Specifies the target library.
native-lib
oboe
log
# Links the target library to the log library
# included in the NDK.
${log-lib})
我注意到,在我刷新 C++ 项目时添加了对库的引用,但我似乎无法访问它们。
我就是不明白,怎么 Android Studio 找不到 headers.
我一直在四处寻找有同样问题的其他人,但它一直是关于崩溃而不是 Android Studio 软件本身的问题。
在此先感谢您的帮助。
- 拉斯穆斯
我经常遇到这种情况。这令人沮丧,我永远无法弄清楚到底是什么原因(除了明显的 "the indexer is borked"),但是,通常有一些事情可以解决它。以下是我尝试的方法,按照对我工作日的时间影响排序:
- 构建 -> 刷新链接的 C++ 项目
- 关闭项目,重新打开它
- 文件 -> 使缓存无效并重新启动
- 关闭Android 工作室。删除 ~/Library/Caches/AndroidStudio 中的 "hidden" 缓存文件夹。重新打开 Android Studio。
- 检查 Android Studio 的新版本,如果可用更新当前版本。
您的 gradle 脚本中可能缺少预制件声明
buildFeatures {
viewBinding true
prefab true
}
或Gradle属性
android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
kotlin.code.style=official
android.prefabVersion=1.0.+
# Workaround bug in AGP where the prefab dependency is being resolved from a
# non-Gradle thread when enableParallelJsonGen is enabled.
# https://issuetracker.google.com/149575364
android.enableParallelJsonGen=false
android.buildFeatures.prefab = true
我正在尝试将双簧管本机库合并到我正在制作的 DAW 中。它似乎在工作,该应用程序似乎可以正常运行。问题是,Android Studio 似乎无法从双簧管目录中找到 headers。这导致我无法使用 Android Studio 中的许多功能,例如预测等。 看起来像这样(无法上传图片):
#include <jni.h>
#include <string>
#include <android/log.h>
#include <oboe/Oboe.h>
using namespace std;
extern "C" JNIEXPORT void JNICALL
Java_com_ralleq_nsynth_MainActivity_buildAudioStream(JNIEnv *env, jclass /* this */) {
oboe::AudioStreamBuilder builder;
oboe::AudioStream *stream = nullptr;
oboe::Result result = builder.openStream(&stream);
__android_log_print(ANDROID_LOG_VERBOSE, "NATIVE", "Didn't crash", 0);
}
除非我每次引用 "oboe",否则文本会变红。
将鼠标悬停在红色文本上会显示一个弹出窗口:“找不到 'oboe'”。这很奇怪,因为该项目在编译和 运行 编写代码时没有问题。 我认为这可能与 Android Studio 中未正确定义的路径有关。我尝试创建一个共享库来模仿双簧管存储库中给出的示例代码,并尝试将其实现为库而不是 CMakeList 文件中的子目录,但最终返回到引用我的 git-imported 项目项目文件夹作为子目录。
Oboe在makefile中的实现:
set(OBOE_DIR /AndroidStudioProjects/oboe)
add_subdirectory(${OBOE_DIR} ./oboe)
include_directories(${OBOE_DIR} ./include)
target_link_libraries( # Specifies the target library.
native-lib
oboe
log
# Links the target library to the log library
# included in the NDK.
${log-lib})
我注意到,在我刷新 C++ 项目时添加了对库的引用,但我似乎无法访问它们。 我就是不明白,怎么 Android Studio 找不到 headers.
我一直在四处寻找有同样问题的其他人,但它一直是关于崩溃而不是 Android Studio 软件本身的问题。
在此先感谢您的帮助。
- 拉斯穆斯
我经常遇到这种情况。这令人沮丧,我永远无法弄清楚到底是什么原因(除了明显的 "the indexer is borked"),但是,通常有一些事情可以解决它。以下是我尝试的方法,按照对我工作日的时间影响排序:
- 构建 -> 刷新链接的 C++ 项目
- 关闭项目,重新打开它
- 文件 -> 使缓存无效并重新启动
- 关闭Android 工作室。删除 ~/Library/Caches/AndroidStudio 中的 "hidden" 缓存文件夹。重新打开 Android Studio。
- 检查 Android Studio 的新版本,如果可用更新当前版本。
您的 gradle 脚本中可能缺少预制件声明
buildFeatures {
viewBinding true
prefab true
}
或Gradle属性
android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
kotlin.code.style=official
android.prefabVersion=1.0.+
# Workaround bug in AGP where the prefab dependency is being resolved from a
# non-Gradle thread when enableParallelJsonGen is enabled.
# https://issuetracker.google.com/149575364
android.enableParallelJsonGen=false
android.buildFeatures.prefab = true