草庐IT

android - 如何获取 NDK 应用程序中写入的 "printf"消息?

如果我在java文件中定义这样的函数/***Addstwointegers,returningtheirsum*/publicnativeintadd(intv1,intv2);所以我需要在c文件中编码JNIEXPORTjintJNICALLJava_com_marakana_NativeLib_add(JNIEnv*env,jobjectobj,jintvalue1,jintvalue2){printf("\nthisislogmessge\n");return(value1+value2);}那么这个printf将从哪里打印它的消息?在logcate中我不明白吗?如何通过放置日志消

Android ndk-build 忽略 APP_ABI := x86

我正在尝试运行NDK来编译native代码以在Atom(x86)处理器和ARM上运行。无论我如何设置APP_ABI,NDK都在生成armeabi库。即使我只为APP_ABI放置x86。并且文件大小始终相同。这是我的Application.mk文件:LOCAL_PATH:=$(callmy-dir)APP_ABI:=x86include$(CLEAR_VARS)LOCAL_LDLIBS:=-L$(SYSROOT)/usr/lib-llogLOCAL_MODULE:=myjni-jniLOCAL_SRC_FILES:=myjni-jni.cinclude$(BUILD_SHARED_LIB

Eclipse 中的 Android NDK 调试 - 如何停止仅在步入 native 代码时发生的段错误/SIGILL

我已经使用AndroidNDK(在WindowsXP上,使用Cygwin)在Eclipse中为native代码设置了调试,现在我可以在Java和native代码中设置断点,并且调试器将正确地中断它们。我的问题是,在单步执行native代码时,我经常会遇到段错误/SIGILL,而这些错误在继续越过断点时不会发生。我的应用程序是可调试的,如AndroidManifest.xml中定义的那样我已更改(NDK)/build/core/build-binary.mk以防止它在APP_OPTIM被定义为调试时删除调试符号,它位于Application.mk我的jni目录中的文件我在Android.

android - NDK - 如何在另一个项目中使用生成的 .so 库

我已成功使用ndk在一个项目中构建和使用.so文件。我需要在另一个项目中使用这个库。我宁愿不在那里复制源代码,而只是使用库。尝试将整个libs/armeabi/libcommon.so复制并粘贴到项目根目录不起作用,我认为是因为libs/armeabi是android生成的路径.那么最好的方法是什么?我正在使用Eclipse-Galileo和ndk5。 最佳答案 有一种更简单的方法可以完成所有这些操作。假设您的预构建库名为“libprebuilt.so”在您只想包含预建库的新项目的项目文件夹中,执行以下操作:mkdir-pjni/l

android - 为多种架构生成优化的 NDK 代码?

我有一些用于Android的C代码,可以进行大量低级数字运算。我想知道我应该使用哪些设置(例如,对于我的Android.mk和Application.mk)文件,以便生成的代码可以在所有当前的Android设备上运行,而且还可以利用针对特定芯片组的优化。我正在寻找好的默认Android.mk和Application.mk设置来使用,我想避免在我的C代码中乱扔#ifdef分支。例如,我知道ARMv7具有浮点指令,并且一些ARMv7芯片支持NEON指令,而默认的ARM不支持这些指令。是否可以设置标志以便我可以使用NEON构建ARMv7、没有NEON的ARMv7和默认的ARM构建?我知道如何

android - Android NDK 的字节顺序

我正在使用我的新应用程序来处理从手机摄像头捕获的图像。我的手机是NexusS,2.3.4。我用捕获的数据创建了一个ARGB_8888位图。我知道ndk镜像库,但它只支持2.2及更高版本。于是我把Bitmap的int[]传给NDK,发现颜色字节序是little-endian。我搜索了wiki,发现arm架构是双端的。http://en.wikipedia.org/wiki/Endianness#Bi-endian_hardware我的问题是如果arm是双端的,如何判断特定设备中的字节顺序?每次访问数据之前是否应该测试字节顺序? 最佳答案

android - 如何在 C/C++ 文件中检测 Android NDK 的编译?

是否有一个预处理器宏可以让我知道NDK正在编译我的代码?我可以手动定义自己的,但如果可能的话我宁愿不要。 最佳答案 通过运行预处理器可以看到#ifdef__ANDROID__:~$/usr/local/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc-E-dM-输出是:#define__ANDROID__1无需依赖在项目中定义内容,尤其是在您跳过NDK构建系统时。

升级到 Lollipop 后,Android NDK mmap 调用在 32 位设备上中断

我正在尝试获取784MiB的内存。是的,我知道这对于32位手机来说很多,但以下调用在Android5.0之前有效:mmap(0,0x31000000,PROT_NONE,MAP_ANON|MAP_SHARED,-1,0);但是,在来自不同制造商的三款不同设备上,升级到Android5.0打破了这一点。我认为这是5.0中内存分配功能的一些变化;也许需要传入不同的标志?这是logcat中返回的错误消息:E/libc﹕mmapfail(pid9994,tid10125,size822083584,flags0x21,errno12(Outofmemory)) 最佳

android - 将 STL 链接到独立的 Android NDK 可执行文件

以下代码在打印字符串后导致段错误:#includeusingnamespacestd;intmain(){cout如果我将cout更改为printf,它不会崩溃。如果我在main以外的其他函数中调用cout,那么函数永远不会被访问,它仍然会崩溃。它在Froyo上崩溃,但不是ICS。作为引用,这是我的Android.mk:LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE:=ndktestLOCAL_SRC_FILES:=main.cppinclude$(BUILD_EXECUTABLE)和Application.mk:AP

Android NDK chrono epoch 不正确(std::chrono::high_resolution_clock)

下面的代码不打印epoch。typedefstd::chrono::high_resolution_clockClock;typedefstd::chrono::millisecondsMilliseconds;autores=std::chrono::duration_cast(Clock::now().time_since_epoch()).count();std::stringstreamss;ss>>>>>>>>>>TimeUtiles::getTimestamp%s",ss.str().c_str());我使用NDKr9d并且选择的NDK工具链版本是4.8!编辑:将std::