我已经在Eclipse中设置了使用Android NDK(在Windows XP和Cygwin上)的本地代码的debugging,到了可以在Java和本机代码中设置断点的阶段,debugging器将正确地中断它们。 我的问题是,当通过本机代码的时候,我经常会遇到分段错误/ SIGILL,而不是在经过断点时不会发生。 我的应用程序是AndroidManifest.xml中定义的可debugging应用程序 我已经改变了(NDK)/build/core/build-binary.mk,以防止在APP_OPTIM被定义为debugging时剥离debugging符号,它在我的jni目录下的Application.mk文件中 我已经在Android.mk文件中定义了LOCAL_CFLAGS := -g -O0 ,并且我也尝试了每个这些标志 我已经读过,这个问题是关于生成的优化代码,但是使用-O0closures优化对我的问题没有影响。 在构build时,我也碰到过使用NDK_BUILD=1标志,但是在AndroidManifest.xml中定义debuggable=true显然有相同的效果。 我已经在模拟器(运行2.3.3)和设备上运行(运行2.2 – 这令人惊讶的没有我期望的线程问题),类似的结果(虽然如果我没记错的话,失败发生在不同的点代码)。 有没有人对我可以尝试的可能的修补程序/步骤有所了解,并且/或者已经能够顺利地通过本地代码而没有问题? 非常感谢 编辑:这从来没有真正解决,但任何人想看看我的指导NDKdebugging,你可以在这里find它。 编辑2:一旦NDK的新版本出来,我得到这个问题的答案来了,这个问题现在可能是多余的。 我的向导可能仍然有效,但我一直没有使用NDK,所以我不能保证它的持续正确性。 我已经接受了我所有的答案,因为三者基本上都是这样说的,这是第一个提交的答案。
我已经成功地使用ndk在一个项目中构build和使用.so文件。 我需要在另一个项目中使用这个库。 我宁愿不在那里复制源代码,只是使用库。 试图复制和粘贴整个libs / armeabi / libcommon.so到项目根目录不起作用,我想因为libs / armeabi是一个android生成的path。 那么最好的办法是什么? 我正在使用Eclipse-Galileo&ndk5。
我正在与我的新应用程序处理从手机相机拍摄的图像。 我的手机是Nexus S 2.3.4。 我用捕获的数据创build一个ARGB_8888位图。 我知道ndk图像库,但它只支持2.2及以上。 所以我把Bitmap的int []传给NDK,发现颜色字节顺序是小尾数。 我search了维基,发现arm架构是双端的。 http://en.wikipedia.org/wiki/Endianness#Bi-endian_hardware 我的问题是如果arm是双端的,如何判断特定设备中的字节顺序? 每次访问数据之前,我应该testing字节顺序吗?
我正在尝试使用NDK构build一个简单的Android应用程序。 这里是我的Android.mk的内容 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_LDLIBS := -llog LOCAL_MODULE := myNDK LOCAL_SRC_FILES := native.c include $(BUILD_SHARED_LIBRARY) 当我运行ndk-build时,我得到: make: *没有规则来制作目标'/native.c', needed by '/Users/ivan/Documents/workspace/TestNDK/obj/local/armeabi/objs/myNDK/native.o' '/native.c', needed by的。 停止。 所以问题很明显,make是search根目录中的源文件,如果我将native.c复制到我的根文件夹,一切正常。 问题是:我应该在Android.mk中指定LOCAL_PATH到我工作的jni文件夹。
我试图用ndk构build一个Android项目,但是我遇到了一些麻烦。 这是Android.mk文件的作品: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mylib LOCAL_CFLAGS := -Werror LOCAL_SRC_FILES := main.cpp, Screen.cpp, ScreenManager.cpp LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY) 有没有一种方法可以指定目录中的所有* .cpp文件,而不需要在LOCAL_SRC_FILES下手动列出它们? 到目前为止,我尝试使用LOCAL_SRC_FILES = $(通配符* .cpp),但现在确实工作,似乎没有文件被选中。
我在eclipse上有两个项目,一个是产生这样的,另一个是使用它的Android应用程序我试图在使用本指南的时候debugging本地代码。 我设置我的应用程序可debugging 我在debugging模式下开始我的应用程序 我运行ndk-gdb 当我运行本地debugging器时,我得到: Error in final launch sequence Failed to execute MI command: -gdb-set target-async off Error message from debugger back end: Cannot change this setting while the inferior is running. Cannot change this setting while the inferior is running.
当我在Android L(Nexus 5)上运行本机代码时,出现错误。 错误:只支持与位置无关的可执行文件(PIE)。 我的三星Galaxy S3(Android 4.3)上正确执行相同的代码。 这是我的Application.mk APP_PROJECT_PATH := $(call my-dir)/.. APP_ABI := armeabi NDK_TOOLCHAIN_VERSION := 4.7 APP_PLATFORM := android-9 APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti 然而,当我用APP_PLATFORM := android-16replaceAPP_PLATFORM := android-9 (正如我在这里阅读的,PIE支持出现在Jelly Been(API级别16))中,相同的可执行文件在Android L上正常工作。 有没有办法使用APP_PLATFORM := android-9编译本机代码APP_PLATFORM := android-9并在Android L上运行它?
我想从另一个 Android项目中使用现有的本地库,所以我只是将NDK构build的库( libcalculate.so )复制到我的新Android项目中。 在我的新Android项目中,我创build了一个文件夹libs/armeabi/并将libcalculate.so放在那里。 没有 jni /文件夹。 我的testing设备有ARM架构。 在我的Java代码中,我通过以下方式加载库: static{ System.loadLibrary("calculate"); } 当我运行我的新的android项目,我得到错误: java.lang.UnsatisfiedLinkError: … nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so" 所以,如错误所述,复制的本地库不在/ verdor / lib或/系统/ lib,如何解决这个问题在我的情况? (我unziped的apk包,下lib /有libcalculate.so) ==== UPDATE ===== 我也尝试在项目根目录下创build一个jni /文件夹,并在jni /下添加一个Android.mk文件。 Android.mk的内容是: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libcalculate LOCAL_SRC_FILES := libcalculate.so include $(PREBUILT_SHARED_LIBRARY) 然后,在项目根目录下,我执行了ndk-build。 之后,armeabi /和armeabi-v7a /目录由ndk-build(在libcalculate.so文件夹内)生成。 然后我运行我的maven构build项目成功。 在最终的apk包中,有: […]
是否有一个预处理macros,让我知道ndk编译我的代码? 我可以手动定义我自己的,但我宁愿不可能。
我在sharedUserID困惑。什么是使用sharedUserId?如何使用?在Android中使用?