Tag: android ndk

android加载库失败

当我使用System.loadLibrary()加载我的so文件时,很少,它失败了,而Logcat说 Cannot load library: reloc_library[1286]: 121 cannot locate ‘__cxa_atexit’ java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 169 cannot locate ‘__cxa_atexit’… at java.lang.Runtime.loadLibrary(Runtime.java:370) at java.lang.System.loadLibrary(System.java:535) 在搜索互联网后,我没有找到任何有关的信息 cannot locate ‘__cxa_atexit’ (尤其是关键词__cxa_atexit)。 为什么找不到这个function? 这个函数似乎在libc.so中。 我不在我的本机代码中使用C ++,只有C.我的NDK版本是android-ndk-r10e。 我认为“找不到__cxa_atexit”可能是一个相对的线索。 大多数时候(也许数十亿的app开始),它可以很好地工作,但很少像上面那样崩溃。 换句话说,我不能让它在我的测试手机上崩溃,但是,它会在某些用户身上很少崩溃。 此问题可能与另一个问题相同。 UPDATE 这次崩溃发生的大多数手机都是android 4.0.3和android 4.0.4。 这两个版本都是API-15。 UPDATE 在阅读了一些Android的源代码后,我发现这个问题可能与dlopen有关。 错误消息“无法加载库:reloc_library …”来自在运行时被劫持的函数dlopen。 跟踪是运行时dlopen – > find_library – > init_library – > link_image – […]

我应该从getFft中看到什么样的输出?

好吧,所以我正在创建一个Android音频可视化应用程序。 问题是,我从getFft()方法得到的东西与google所说的应该产生的东西并不相符。 我一直追溯到C ++的源代码,但我不熟悉C ++或FFT来真正了解正在发生的事情。 我会尽力包含这里所需的一切: (Java)Visualizer.getFft(byte [] fft) /** * Returns a frequency capture of currently playing audio content. The capture is a 8-bit * magnitude FFT. Note that the size of the FFT is half of the specified capture size but both * sides of the spectrum are returned yielding in a number […]

更改包名称android清单会导致问题JNI

我一直在修改和玩这个项目: 源代码: https : //bitbucket.org/viet0904163136/gba-android/src 这是一个在GPLv2下获得许可的gameboy Advance模拟器。 在我更改android清单文件中的packagename之前,每件事都可以正常工作。 如果没有更改包名称,应用程序可以正常运行。 但是当包名更改时,SDLactivity将退出并显示以下消息:(我将其重命名为com.gba.emu) 09-01 12:23:16.409: I/SDL(884): SDL_Android_Init() 09-01 12:23:16.409: W/dalvikvm(884): JNI WARNING: received null jclass 09-01 12:23:16.419: W/dalvikvm(884):in Lorg/libsdl/app/SDLActivity;.nativeInit:()V (GetStaticMethodID) 09-01 12:23:16.419: I/dalvikvm(884): “SDLThread” prio=5 tid=17 NATIVE 09-01 12:23:16.419: I/dalvikvm(884): | group=”main” sCount=0 dsCount=0 obj=0x4183fc00 self=0x2a2b6f88 09-01 12:23:16.419: I/dalvikvm(884): | sysTid=1148 nice=0 sched=0/0 cgrp=apps handle=707490776 09-01 12:23:16.479: I/dalvikvm(884): […]

ReferenceTable溢出(最大= 1024)

在我的android应用程序中,我经常调用一个返回一些数据的本机函数。 经过多次通话后,我收到了一个显示以下跟踪的崩溃。 W/dalvikvm(14588): ReferenceTable overflow (max=1024) W/dalvikvm(14588): Last 10 entries in JNI pinned array reference table: W/dalvikvm(14588): 1014: 0x41f3b7a8 cls=[B (38036 bytes) W/dalvikvm(14588): 1015: 0x411c6f88 cls=[B (1620 bytes) W/dalvikvm(14588): 1016: 0x405b2f48 cls=[B (1052 bytes) W/dalvikvm(14588): 1017: 0x411c4be0 cls=[B (92 bytes) W/dalvikvm(14588): 1018: 0x41f44c40 cls=[B (38036 bytes) W/dalvikvm(14588): 1019: 0x411c5a78 cls=[B (60 bytes) W/dalvikvm(14588): 1020: 0x413ac4e8 […]

使用API​​21进行编译时出现UnsatisfiedLinkError

我的项目使用NDK r10d作为c ++代码。 当我使用API​​19编译项目时,它工作得很好,但是当我使用API​​21编译它时,它会在运行时崩溃。 当c lib被加载时,我得到: dlopen(“/ data / app-lib / com.my.app-2 / libMyCode.so”)失败:dlopen失败:找不到“libMyCode.so”引用的符号“stpcpy”… 然后它崩溃了: java.lang.UnsatisfiedLinkError:dlopen失败:无法找到“libMyCode.so”引用的符号“stpcpy”… 我使用运行Android4.4.4的OnePlus One在两种情况下进行测试。 有任何想法吗?

使用Android NDK构建Soundtouch

我正在尝试在我的Android项目中导入Soundtouch库,但我不是本机代码高级用户,所以这可能就是为什么我在理解构建应该完成的方式时遇到一些问题。 我试着遵循他的指导方针: Android:帮助编译Android中的SoundTouch lib 这意味着,我创建了2个文件夹( include /和SoundTouch / ),我分别插入了标题和.cpp文件。 之后,我使用了他的Android.mk ,当我尝试ndk-build时 ,我得到了这个: Android NDK: WARNING: Ignoring invalid values in LOCAL_CPP_FEATURES definition in /home/user/workspace/Player/jni/Android.mk: -fno-exceptions Android NDK: WARNING: Ignoring invalid values in LOCAL_CPP_FEATURES definition in /home/user/workspace/Player/jni/Android.mk: -fno-exceptions make: *** No rule to make target /home/user/Downloads/android-ndk-r8d/build/core/SoundTouch/AAFilter.cpp’, needed by /home/user/workspace/Player/obj/local/armeabi-v7a/objs/SoundTouch/SoundTouch/AAFilter.o’. Stop. 据我所知,我可以删除-fno-exceptions标志,因为在较新版本的NDK中,默认情况下禁用了exception处理,但我没有弄清楚make部分的错误。 提前致谢。

Android NDK。 找不到本机Lcom的实现

毕竟我已经设法“准备”我的NDK日食(至少我认为如此),它不再在c代码争论,但现在我得到“没有找到本机Lcom的实现”任何时候我执行任何本机代码。它也发生在NDK的样品上.. 我的.java … private native float pi(); static { System.loadLibrary(“shit”); } … System.out.println(pi()); … 我的.cpp #include jfloat Java_com_example_shit_MainActivity_pi(JNIEnv * env, jobject obj) { return 3.1415; } 我的.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := shit LOCAL_SRC_FILES := shit.cpp include $(BUILD_SHARED_LIBRARY) 我的错误日志 11-14 18:30:16.231: D/dalvikvm(1739): Trying to load lib /data/data/com.example.shit/lib/libshit.so 0x413b1fc8 11-14 18:30:16.241: D/dalvikvm(1739): Added […]

Android WebRTC Custom Capturer

我编译了webRTC演示应用程序。 我看到捕获帧是由VideoCaptureAndroid.java文件完成的,该文件与本机代码紧密耦合。 我需要添加一个function,将我自己的帧推送到webRTC库,以便在video通道上发送。 我可以用C ++或NDK或Java编写它。 但我无法弄清楚如何做到这一点。

如何在Android代码中使用.so文件来使用本机方法

我有libmath.so文件,其中包含本机方法。 我需要在我的android代码中调用本机方法。 我创建了一个示例android应用程序并在libs / armeabi文件夹中添加了libmath.so,然后运行“右键单击鼠标” – > Android工具 – >添加本机支持。 现在,在应用程序的jni文件夹中创建以下具有以下内容的文件。 Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libmath LOCAL_SRC_FILES := libmath.cpp include $(BUILD_SHARED_LIBRARY) libmath.cpp #include 当我将项目作为Android应用程序运行时,它在控制台中显示如下: – 17:58:41 **** Build of configuration Default for project math **** “F:\\Vinay\\Softwares\\android-ndk-r10d\\ndk-build.cmd” all [armeabi] Compile++ thumb: math libs/armeabi/libmath.so 17:58:53 Build Finished (took 11s.695ms) 以下是我如何加载库的代码: – public […]

Android L 5.0和libusb 1.0.9 – 没有权限?

我目前有一个Android应用程序通过USB OTG连接到设备。 使用libusb 1.0.9进行通信,并且它对于api级别<21的其他设备运行良好。(由于性能问题,通信必须是本机)在Android L下运行应用程序时,我从libusb_init收到以下错误(空值): type=1400 audit(0.0:107): avc: denied { read } for name=”usb” dev=”tmpfs” ino=24433 scontext=u:r:untrusted_app:s0 tcontext=u: object_r:usb_device:s0 tclass=dir A/libc(12605): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 12605 (mapp.sdk.sample) 我正在使用我的Nexus 5上的最新NDK 10c编译libusb 1.0.9。我不认为这是ART运行时问题,因为该应用程序适用于Android 4.4.4,启用ART而不是Dalvik。 有谁熟悉这个问题? ( 这看起来很相似)这可能与PIE有关吗? 谢谢。