Articles of c ++

使用Java for Android编写的程序是否比嵌入到Objective-C for iOS中的C编写的程序慢?

为了确定开始将现有的iOS应用程序(用C语言编写)移植到Android是否合理,我必须估计如果用Java实现它的速度有多快。 一些问题是Java代码必须多次翻译(到字节码,然后到使用JIT的本机代码)。 它可能会对实时属性(响应性)产生负面影响,对吧? 生成代码的质量如何? 它在某种程度上与gcc / llvm生成的代码相当吗? 如果是,您是否参考了比较结果(纸张)?

为Android NDK R10e编译和使用boost

如何为Android NDK编译和使用Boost? 我已经尝试过我在网上find的所有内容,从Boost for Android到使用bjam文件自行编译。 但是,我没有成功。 当我尝试使用bjam编译它时,我收到以下错误: error: toolset gcc initialization: error: version ‘androidR10e’ requested but ‘g++-androidR10e’ not found and version ‘4.2.1’ of default ‘g++’ does not match error: initialized from /path/to/android-ndk-r10e/sources/boost/tools/build/v2/user-config.jam:86 有没有人成功使用过Android NDK R10e的Boost? 当我可以编译它时,我该如何在我的Android应用程序项目中使用它?

通过JNI从不同的线程调用保存的java对象

我有一个java对象,它通过JNI调用C ++共享对象。 在C ++中,我保存了对JNIEnv和jObject的引用。 JavaVM * jvm; JNIEnv * myEnv; jobject myobj; JNIEXPORT void JNICALL Java_org_api_init (JNIEnv *env, jobject jObj) { myEnv = env; myobj = jObj; } 我还有一个GLSurface渲染器,它最终在另一个线程GLThread上调用上面提到的C ++共享对象。 然后我尝试使用我最初保存的jobject回调到我的原始Java对象,但我想因为我在GLThread上,我得到以下错误。 W/dalvikvm(16101): JNI WARNING: 0x41ded218 is not a valid JNI reference I/dalvikvm(16101): “GLThread 981″ prio=5 tid=15 RUNNABLE I/dalvikvm(16101): | group=”main” sCount=0 dsCount=0 obj=0x41d6e220 self=0x5cb11078 I/dalvikvm(16101): […]

如何在实验gradle中排除cpp文件?

我正在尝试使用Android Studio 1.3.1使用实验gradle语法编译NDK项目。 我的build.gradle看起来非常像Teapot示例中的那个 除了我的源代码树有一些我不想包含在构建中的文件。 我无法删除这些文件,所以我需要gradle来忽略它们。 我尝试添加exclude定义: android.sources { main { jni { source { srcDirs ‘src/main/jni’ excludes += “src/main/jni/FileToExclude.cpp” } } } } 但这并没有影响结果 。 gradle仍尝试编译此文件。 我试过excludes ,用= , += exclude ,什么都没有,但没有排列有效。

如何将OpenCV集成到Qt Creator Android项目中

我使用Qt Creator编译Android应用程序。 我需要将OpenCV集成到其中,我花了半天的时间来正确配置它,所以我想记录我在这里采取的步骤,以防其他人必须这样做。

我们可以访问我的Android手机的麦克风驱动程序

我们可以使用Android NDK访问我的Android手机的麦克风驱动程序吗?如果有,那我该怎么办? 我可以将驱动程序设置为禁用一段时间吗? 我可以检测使用手机麦克风的手机的应用程序名称吗? 根据Android多媒体框架,MediaServer负责打开设备,基于Java的音频应用程序将其作为客户端连接。 数据传输发生在Binder上。 因此,只有一个进程可以打开音频设备。 现在我想知道如何从MediaServer获取信息? 任何人都知道这个或任何其他想法,find哪个应用程序正在使用我的手机麦克风,我不能使用root权限。

在Win / Linux / MacOSX / Android / IOS上寻找用于跨平台开发的OpenGL ES框架

我必须开发一个可在Windows,Linux,MacOSX,Android和IOS上运行的跨平台多媒体应用程序。 此应用程序必须能够播放音频/video内容,显示照片和图形,并可能显示简单的2Danimation。 经过大量的搜索,似乎问题的“最便携的方法”是使用C++作为语言和OpenGL ES作为绘图API,因为几乎任何一对设备/操作系统都支持它们,性能水平会很好,每个(一组)设备的视觉外观应该接近相同。 显然,我知道我必须调整应用程序的外观,以便在具有不同显示尺寸和分辨率的不同设备上“缩放”。 我也知道,对这种不同架构的任何代码要求完全相同的行为是不现实的。 我只想最小化编写的代码(例如,首先在C ++中重写一个接口,然后在Java中必须避免)。 我不是OpenGL ES编程的专家,但是看一些示例,似乎我需要一个框架来制作一些现成的小部件(菜单,按钮,文本框)。 我宁愿不重新发明轮子。 这是一个低预算项目,所以我需要一个完全免费且开源的框架。 后一个要求还允许在重要缺失或行为不端时添加/修改框架的API。 我不是要求多用途框架(例如Qt),能够处理输入,网络,存储等,只是因为我强烈怀疑我提到的平台不存在这样的框架。 我只想要一种OpenGL包装器能够抽象出它的许多低级细节,但也提供了一些像Qt那样的UI小部件。 我将分别处理输入,网络,存储,传感器,可能使用其他跨平台开源库,如此处所示 。 我在Stackoverflow和Gamedev上已经阅读了很多类似的问题,我听说过很多框架( Unity , Corona SDK , LÖVE , LibGDX , Ogre , Cocos2D-x ),主要是为游戏开发而创建的。 例如,Ogre和Cocos2D-x似乎符合我的一些要求,但如果我决定使用其中一个,我将不得不编写几乎所有的UI元素(没有这么大的负担,有人可能会争辩)。 几点评论: 应用程序是2D,因此OpenGL可能看起来有点过分。 但是,选择OpenGL ES是因为它具有非常好的可移植性和高性能水平,即使在旧硬件上也是如此。 我基本上是一个Linux C ++开发人员,所以我不希望切换到HTML5(仍然太年轻)或.NET / Mono(效率较低)而没有显着的优势。 而且,我无法在短时间内掌握这些语言。 我对本文中的故事印象深刻。 我相信这可能是正确的方法:开源工具和适合项目需求的库的混合。 但我仍然缺少最重要的部分:图形框架。 写下这个问题,我发现了这个令人沮丧的答案 。 我希望我的要求不会产生空集。 我真的无法在不同的平台上维护n个不同的用户界面。 我真的需要一些与平台无关的东西。 任何帮助或建议将不胜感激。

为什么eglMakeCurrent()失败了EGL_BAD_MATCH?

我正在使用opengl / egl为Android开发。 我的应用程序需要第二个上下文来从第二个线程加载纹理。 我的代码在android 2.3上工作正常,但是当我在4.0.3 android设备或模拟器上尝试代码时,eglMakeCurrent()在EGL_BAD_MATCH失败。 第二个上下文和它的像素缓冲区的初始化也都可以正常工作,所以我不知道从哪里开始寻找这个错误。 这是初始化代码: ANativeWindow *window = (ANativeWindow*)displaySurface; EGLint dummy, format; display = eglGetDisplay(EGL_DEFAULT_DISPLAY); eglInitialize(display, 0, 0); EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; const EGLint configAttribs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_BLUE_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_RED_SIZE, 8, EGL_ALPHA_SIZE, 8, EGL_BUFFER_SIZE, 32, EGL_DEPTH_SIZE, 24, EGL_NONE }; EGLint numConfigs; […]

如何将预建的共享库链接到Android NDK项目?

这里我在jni/文件夹中使用了这个Android.mk文件。 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Here we give our module name and source file(s) LOCAL_MODULE := offlineDownload LOCAL_SRC_FILES := offline_download.c LOCAL_SHARED_LIBRARIES :=../lib/libpackext.so.1.0 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog include $(BUILD_SHARED_LIBRARY) 并在项目目录中创建一个lib文件夹并放入我的预构建.so库并制作一个包含以下内容的Android.mk文件 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := packext LOCAL_SRC_FILES := libpackext.so.1.0 LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include include $(PREBUILT_SHARED_LIBRARY) […]

启用exceptionC ++

我正在尝试为Android制作APP原生代码。 Native代码在cplusplus中。 每当我尝试制作时,都会出现以下错误。 H236Plus.cpp:135:错误:禁用exception处理,使用-fexceptions启用 如何使用-fexceptions启用exception处理,以及在哪里使用它?