Questions tagged «android-ndk»

Android本机开发工具包(NDK)是Android SDK的配套工具,可用于以本机代码构建应用程序的性能关键部分,或将C / C ++中的现有库移植到Android。当使用C / C ++编程时,它提供了标头和库,这些标头和库允许构建活动,处理用户输入,使用硬件传感器,访问应用程序资源等。

11
Android NDK C ++ JNI(未找到本机实现…)
我正在尝试将NDK与C ++一起使用,并且似乎无法正确使用方法命名约定。我的本机方法如下: extern "C" { JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni (JNIEnv* env, jclass c) { // } } 标题包装在extern“ C” {} aslo中。 一切都可以正常编译,创建一个.so文件,然后复制到我项目下的libs文件夹中,但是当我在Eclipse中调试并运行时,我不断收到一条日志消息,内容为“未找到针对本机的实现...”。因为所有NDK示例都在C中,所以我缺少什么吗? 谢谢。

8
无法在Android NDK中包含像vector这样的C ++标头
当我尝试在我的Android NDK项目中使用vector之类的C ++类(使用最新的NDK r5b)时,出现如下错误: Compile++ thumb : test-libstl <= test-libstl.cpp /Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory 其他在线上报告此问题的人通过添加 APP_STL := stlport_static 到他们的Application.mk文件。我已经做到了这一点,并尝试了APP_STL的所有其他可能值。我已经清理了项目,运行了ndk-build clean,删除了obj和libs文件夹,但是当我编译时仍然找不到向量类。自从NDK r5推出以来,我已经为此工作了几个星期,如果有人提出任何建议,我将非常感激。谢谢!



2
Android AudioRecord强制另一个流到MIC音频源
更新3:我已经与另一位开发人员建立了合作伙伴关系,我们似乎发现有人可以为此花很多钱。他们给我们发送了一个测试apk,它似乎有效。我们将继续购买源。我希望我们不会被骗。我一发现就会更新 更新2:仍在努力。经过更多痛苦的日子后,我现在认为没有什么幻想了,但他们只是在本机端使用AudioFlinger(请参阅链接)来调用AudioFlinger :: setParameters 我现在正在寻找如何编写一个简单的JNI来使用audio_io_handle_t ioHandle,const String8&keyValuePairs调用AudioFlinger :: setParameters 我知道keyValuePairs可以是什么,但不是关于audio_io_handle_t的线索 更新:我现在相信其他应用程序可能会在CAF中使用QCOM音频。见audio_extn_utils_send_audio_calibration在链接相同 和voice_get_incall_rec_snd_device在链接相同 我没有C / ++知识。如何确定是否可以从本机端调用这些方法?由于其他应用程序可以,因此必须有一种方法。 我每天至少要花5-6个小时来努力解决40余天。我不确定SO是否允许,但我也很乐意为正确答案捐款。 我有一个使用VOICE_CALL音频源的通话记录应用程序。尽管ASOP并未实现/授权它,但大多数制造商已经实现了VOICE_CALL,并且使用VOICE_CALL音频源的应用程序在许多设备上都能正常工作。直到Android 6。 Google使用Android 6更改了此行为。现在,打开VOICE_CALL音频源需要android.permission.CAPTURE_AUDIO_OUTPUT,该权限仅授予系统应用程序。 这实质上会停止通话录音,或者应该停止通话录音。好吧,它适用于我的和200多个其他通话记录应用程序,其中3个已经找到解决此限制的方法。 我一直在使用Android 6的许多不同手机上尝试这些应用程序,并发现它们在记录方式上的某些特征。 它们都使用Android AudioRecord类并打开MIC音频源。我也做; 但是在我的应用程序上,我只能从MIC而不是从对方获得音频。我发现告诉他们在开始录制之前或之后,他们正在发出某种系统调用。 查看以下日志表格,其中一个成功记录VOICE_CALL的应用程序之一,即使它使用MIC进行记录也是如此。看起来应用程序似乎是一些如何将VOICE_CALL音频源混入/路由/流/合并到MIC的方式。 - D/audio_hw_primary: in_set_parameters: enter: kvpairs=input_source=1;routing=-2147483644 - D/PermissionCache: checking android.permission.MODIFY_AUDIO_SETTINGS for uid=10286 => granted (432 us) - D/audio_hw_primary: in_set_parameters: enter: kvpairs=input_source=4;routing=-2147483584;format=1 - D/audio_hw_primary: select_devices: …

2
如何在Android中使用addr2line
我坚持使用我的应用程序,因为我无法调试,因为它是多线程应用程序,崩溃并出现错误SIGSEGV。我从LogCat获得了很多信息,这使我可以在本机库中找到地址。如果可以将这些地址转换为代码,将很有帮助。 有人知道如何使用android-ndk随附的addr2line吗?

7
有任何简单的登录Android NDK代码的方法吗?
我正在寻找一种使用Eclipse在Android NDK应用程序中轻松调试C代码的方法。我已经阅读了使用gdb或类似工具调试应用程序的方法,但是我想要的是以某种方式将消息推送到Eclipse的方法。 我正在寻找一种简单的解决方案,就像在C语言中使用打印功能并在DDMS日志或类似工具中看到它一样。有没有人有这样做的经验?

13
在Android Studio中找不到CMake
我需要在需要LLDB,CMake和NDK的Android程序中添加C / C ++代码。我在SDK管理器中找到了LLDB和NDK,但是在那里缺少CMake。我尝试从CMake官方网站手动下载它,发现对于Android,我们需要SDK定制的CMake。 如您所见,没有像CMake这样的选项。 在哪里可以找到适用于Android的CMake版本? 我已经从网站上尝试了CMake,并在ndk-bundle / build文件夹中找到了它,但是两者都给出了如下相同的错误。从中可以得出什么结果以及如何解决该问题? Build command failed. Error while executing 'C:\Users\amishr33\AppData\Local\Android\sdk\cmake\bin\cmake.exe' with arguments {-HC:\Users\amishr33\AndroidStudioProjects\MyApplication\app\src\main\jni -BC:\Users\amishr33\AndroidStudioProjects\MyApplication\app\.externalNativeBuild\cmake\debug\armeabi -GAndroid Gradle - Ninja -DANDROID_ABI=armeabi -DANDROID_NDK=C:\Users\amishr33\AppData\Local\Android\sdk\ndk-bundle -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=C:\Users\amishr33\AndroidStudioProjects\MyApplication\app\build\intermediates\cmake\debug\obj\armeabi -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=C:\Users\amishr33\AppData\Local\Android\sdk\cmake\bin\ninja.exe -DCMAKE_TOOLCHAIN_FILE=C:\Users\amishr33\AppData\Local\Android\sdk\ndk-bundle\build\cmake\android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=15 -DCMAKE_CXX_FLAGS=-std=c++11 -DANDROID_TOOLCHAIN=clang -DANDROID_STL=gnustl_static} CMake Error: Could not create named generator Android Gradle - Ninja Generators Visual Studio 15 2017 …

4
如何在JNI中将C结构来回传递给Java代码?
我有一些通过JNI调用的C函数,这些函数带有指向结构的指针,还有一些其他函数将分配/释放指向相同类型结构的指针,因此处理包装程序要容易一些。令人惊讶的是,JNI文档很少介绍如何处理C结构。 我的C头文件如下所示: typedef struct _MyStruct { float member; } MyStruct; MyStruct* createNewMyStruct(); void processData(int *data, int numObjects, MyStruct *arguments); 相应的JNI C包装文件包含: JNIEXPORT jobject JNICALL Java_com_myorg_MyJavaClass_createNewMyStruct(JNIEnv *env, jobject this) { return createNewMyStruct(); } JNIEXPORT void JNICALL Java_com_myorg_MyJavaClass_processData(JNIEnv *env, jobject this, jintArray data, jint numObjects, jobject arguments) { int *actualData = (*env)->GetIntArrayElements(env, …

6
Android:没有NDK版本与要求的版本相符
在更新为Android Gradle插件 3.6.0(于2020年2月24日发布)之后,几个项目独立地开始失败,并出现以下问题: No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.0.6113669 通过安装较早的预期ndk版本,在本地“修复”此问题非常简单: sdkmanager 'ndk;20.0.5594570' 但是,我的问题是:此旧版本在哪里以及如何指定?以及如何更新它使其与最新版本匹配21.0.6113669?

4
Catalina升级后,由于新的安全性,无法使用旧的NDK(android-ndk-r17c)
升级到macOS Catalina后,我的项目将不再构建。这是由于Catalina认为'android-ndk-r17c'中的二进制文件不是来自受信任的开发人员。 您会收到以下消息:““ ld”无法打开,因为无法验证开发人员。” “ macOS无法验证此应用程序没有恶意软件” 由于本机openCV库SDK和较新的NDK出现问题,我不得不使用旧的NDK。他们正在努力,但是较新的SDK对我来说还不够稳定。 通过转到安全窗格并在安全警报上单击“仍然允许”,我可以解决“ clang”和“ clang ++”无法工作的问题。但是,当使用“ Id”尝试此操作时,我可以通过单击“仍然允许”来跳过第一个警告,但它似乎随后被调用,而在随后的调用中,我没有允许它打开的选项。 确实没有代码。我只是(并且已经有很长时间了)通过配置指向旧NDK的Android Studio NDK参考。 在NDK的IDE中,它无法加载“ Id”: ““ ld”无法打开,因为无法验证开发人员。” “ macOS无法验证此应用程序没有恶意软件”

1
Crashlytics不显示本机崩溃
在将此标记为重复之前,我已经尝试了所有可能出现的问题的所有内容。已正确报告Java崩溃,但是来自本机库的崩溃没有调试符号。 我试过的 ./gradlew crashlyticsUploadSymbolsDevDebug // to upload the symbols manually androidNdkOut 'build/intermediates/ndkBuild/devDebug/obj/local' //specify the ndk paths manually androidNdkLibsOut 'build/intermediates/merged_native_libs/devDebug/out/lib'` //specify the ndk paths manually 当前设置: 依存关系: implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') { transitive = true } implementation 'com.crashlytics.sdk.android:crashlytics-ndk:2.1.1' android.applicationVariants.all { variant -> def variantName = variant.name.capitalize() def task = task("ndkbuild${variantName}") task.finalizedBy("crashlyticsUploadSymbols${variantName}") } crashlytics { …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.