Articles of Android的NDK

如何在NDK上将本机运行时库与dlopen集成?

对于我的本机c ++项目,我将设置预编译共享库的运行时加载,可以在启动时使用配置由客户端更改。 在android上调用dlopen的正确方法是什么? 无论我做什么,dlopen永远不会打开任何共享库,如果我没有在我的Android.mk文件中将此库定义为预编译库,如下所示: LOCAL_PATH := $(call my-dir) LOCAL_CFLAGS += -DDEBUG LOCAL_CFLAGS += -DANDROID include $(CLEAR_VARS) LOCAL_MODULE := bar LOCAL_SRC_FILES := bar/bar.cpp LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := native_activity LOCAL_SRC_FILES := main.cpp LOCAL_LDLIBS := -llog LOCAL_LDLIBS += -landroid LOCAL_SHARED_LIBRARIES := bar LOCAL_STATIC_LIBRARIES += android_native_app_glue include $(BUILD_SHARED_LIBRARY) $(call import-module, android/native_app_glue) 在我的本机活动主类中,我尝试加载库: void* lib […]

使用Android NDK和C ++

我得到了示例HelloJni项目,它使用C文件作为本机代码。 我无法使用C ++获得任何简单的示例。 采用以下JNI代码: #include #include JNIEXPORT void JNICALL Java_com_test_testActivity_doSomething(JNIEnv * env, jobject obj) { } 如果我在.c文件中有代码,它工作正常。 如果我将扩展名更改为.cpp,它编译得很好,但在运行时会爆炸(强制关闭)。 由于库和方法签名在任何一种方式都是相同的,我不怀疑问题是在Java端。

Android NDK for x86_64没有bcopy和index的参考

我正在尝试使用Android NDK为x86_64架构编译Lame声音库。 我得到以下链接错误未定义引用bcopy和index : jni/libmp3lame/encoder.c:471: error: undefined reference to ‘bcopy’ jni/libmp3lame/encoder.c:476: error: undefined reference to ‘bcopy’ jni/libmp3lame/id3tag.c:1125: error: undefined reference to ‘index’ jni/libmp3lame/newmdct.c:1036: error: undefined reference to ‘bcopy’ jni/libmp3lame/util.c:685: error: undefined reference to ‘bcopy’ 代码成功编译了x86和arm架构。 所以我稍微bcopy了NDK的libs并注意到bcopy和index都是在libc.so导出的x86和arm平台,但不是x86_64(参见下面的objdump输出)。 $> objdump -d android-ndk-r10d/platforms/android-21/arch-arm/usr/lib/libc.so | grep bcopy -A 6 0000b000 : b000: e52db004 push {fp} ; (str fp, [sp, […]

蓝牙4.0设备可以将数据发送到蓝牙2.0设备吗?

蓝牙4.0芯片是否可以通过支持蓝牙的Android SDK与具有蓝牙2.0的Android手机进行交互?

无法加载类com.android.build.gradle.managed.NdkConfig $ Impl

我刚刚升级到AS 2.0 Preview 8,我正在尝试构建我的旧项目。 我更新了它 classpath ‘com.android.tools.build:gradle-experimental:0.6.0-alpha8’ 并更新了gradle-wrapper.properties以使用gradle-2.10-all.zip ,但是当我尝试构建我的项目时,我得到一个Java stactrace说: Unable to load class com.android.build.gradle.managed.NdkConfig$Impl 我正在使用Java 8来启动AS,并将其设置为项目的JDK。 我也遇到了与Java7相同的问题。 我错过了什么?

我们可以在android NDK代码中使用System IPC吗?

在这里,我想使用系统IPC方法 /* SysV message queues */ /* General IPC definitions */ 这里我的android NDK代码是用C语言编写的,我使用消息队列IPC机制进行其他C应用程序的通信。 那么请让我知道有没有办法实现这个IPC目标? 如何在android NDK代码中实现这个IPC机制?

JmethodID的NewGlobalRef

我有一个问题,否则似乎是一件容易的事。 我有一个本机方法,它返回一个Java类(自定义)实例的jobjectArray。 我所做的是获取我的类的jclass我要实例化并返回,然后获取它的构造函数的jmethodID。 本机方法的签名是: JNIEXPORT jobjectArray JNICALL Java_com_mn_rootscape_utils_NativeMethods_getFilesPermissions( JNIEnv* env, jobject thizz, jobjectArray filePathsArray ) 命名空间和构造函数签名定义如下: const char* kFilePermissionInfoPath = “com/mn/rootscape/utils/FilePermissionInfo”; const char* kFilePermInfoConstructorSig = “(IIIIIJJJLjava/lang/String;Ljava/lang/String;ZLjava/lang/String;)V”; 对于jclass和jmethodID,我按照这里发布的说明操作。 所以我得到他们的全球参考,以便我以后可以使用它们。 请注意,我的lib中还没有oninit,代码仅供测试。 问题是当我尝试检索jmethodID的全局引用时,我遇到了分段错误。 执行此操作的代码是: jclass filePermInfoCls = (*env)->FindClass(env, kFilePermissionInfoPath); if(!filePermInfoCls) { LOGE(“getFilesPermissions: failed to get class reference.”); return NULL; } gFilePermInfoClass = (jclass)(*env)->NewGlobalRef(env, filePermInfoCls); LOGI(“got gFilePermInfoClass”); jmethodID filePermInfoClsConstructor […]

错误:’to_string’不是’std’的成员

它可能是重复的,但我尝试了我在StackOverflow上find的所有解决方案。 我正在使用OpenCV在C ++上创建一个库,并尝试为Android编译它。 我不能使用to_string(int)但我不能。 我试图修改我的makefile太多次了。 我的最后一个配置就是: Android.mk LOCAL_PATH:= $(调用my-dir) 包括$(CLEAR_VARS) OPENCV_CAMERA_MODULES:=关闭 OPENCV_INSTALL_MODULES:=上 包括$(LOCAL_PATH)/jsoncpp/Android.mk include /Users/rafaelruizmunoz/Desktop/AndroidDevelopment/OpenCV-2.4.9-android-sdk/sdk/ native / jni / OpenCV.mk OPENCV_LIB_TYPE:=共享 LOCAL_C_INCLUDES + = $(LOCAL_PATH) LOCAL_C_INCLUDES + = / Users / rafaelruizmunoz / opencvscan / OpenCVtry / LOCAL_C_INCLUDES + = / Users / rafaelruizmunoz / Desktop / RD / OpenCVtry / Libraries / jsoncpp- master […]

ExceptionInInitializerError – ZBar Android

所以我刚刚创建了Android应用程序的一个分支,然后重新构建并运行它。 当我尝试加载使用ZBar的屏幕时,一切都很好,我得到了ExceptionInInitializerErrorexception。 罪魁祸首代码似乎如下: static { System.loadLibrary(“iconv”); } 我试过调试这个,但我似乎无法捕捉到上述exception。 阅读后,它似乎与无法find本地库有关。 任何想法如何解决这一问题?

构建Android NDK项目的问题

我尝试在Linux Ubuntu上用Eclipse构建项目。 Eclipse显示错误消息: **** Build of configuration Default for project FFVideo **** /home/art/android-ndk-r7b/ndk-build V=1 Cannot run program “/home/art/android-ndk-r7b/ndk-build”: Unknown reason Error: Program “/home/art/android-ndk-r7b/ndk-build” is not found in PATH PATH=[/home/art/android-ndk-r7b:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games] **** Build Finished **** 为什么会这样?