Articles of android ndk

尝试使用NDK为Android构建PocketSphinx时出现问题

我正在尝试使用PocketSphinxAndroidDemo项目为Android构建PocketSphinx。 我放弃了使用Cygwin和Windows构建它并安装了Ubuntu VM的任务。 我正在取得进步,但我似乎陷入困境,我似乎无法弄明白。 它必须是我想念的简单事物。 ndk-build提供以下输出(剪切): Compile thumb : pocketsphinx_jni <= pocketsphinx_wrap.c /home/user/development/PocketSphinxAndroidDemo/jni/pocketsphinx_wrap.c:760:26: error: pocketsphinx.h: No such file or directory /home/user/development/PocketSphinxAndroidDemo/jni/pocketsphinx_wrap.c:761:28: error: sphinxbase/err.h: No such file or directory 头文件(显然)与JNI文件不在同一文件夹中。 已在Android.mk文件中设置LOCAL_C_INCLUDES标志以包含所需的标头 – include $(CLEAR_VARS) LOCAL_C_INCLUDES := $(SPHINX_PATH)/sphinxbase/include/android \ $(SPHINX_PATH)/sphinxbase/include/sphinxbase \ $(SPHINX_PATH)/sphinxbase/include \ $(SPHINX_PATH)/pocketsphinx/include 我应该注意到我的SPHINX_PATHvariables看起来像这样,而且它是正确的 – SPHINX_PATH := ~/development 如果我将头文件复制到/ jni /文件夹中,我会更远但是编译器开始对我大喊大叫,因为其他位置缺少头文件。 当然我错过了一些简单的事情。 是不是在某处我可以设置“在炸毁之前查看头文件的这些位置”标志? 我不是一个C / C […]

保持从Android JNI调用java方法

我正试图通过Proguard混淆Android应用程序代码。 在使用proguard处理之后,应用程序自行工作,但是从c到java的本机调用失败了java.lang.NoSuchMethodError 。 此代码来自本机部分,其中调用java类实例,名为EngineStarted: void callEngineStarted( JNIEnv* env, bool isStreamOne ) { jclass cls; if(isStreamOne == true) { cls = ( *env )->GetObjectClass( env, currentObjectOne ); } else { cls = ( *env )->GetObjectClass( env, currentObjectTwo ); } jmethodID midCallBack = ( *env )->GetMethodID( env, cls, “EngineStarted”, “(I)V” ); if (0 == midCallBack) { LOGW(“Could […]

在Android上从Java调用C ++类方法或函数,而无需在每次调用时重新创建类/variables

我有一个非常复杂的NLP代码用C ++编写,现在我想从我的Android应用程序中使用它。 我的想法是使用客户端 – 服务器架构构建应用程序,其中客户端是android java应用程序,服务器是C ++面向对象的代码。 但对我来说主要的问题是,C ++组件非常繁重(标记器,矢量化器,语料库数据等),我不能在每次调用时重新创建它们,我需要的是创建它们一次(在第一次请求时),然后将它们放在内存中,当应用程序处于活动状态时,来自java端的handlind请求。 你能不能给我一些如何实现这一点的指导,因为我之前从未使用过Android的C ++? 提前致谢。 Java和C ++代码不是远程的,没有涉及http或其他远程请求,它是相同的应用程序。 但是为了减少Java / C ++通信间的开销,我NlpEngine.sendRequest(string textToProcess, int processingWorkflowId)在java代码中有单点联系,比如NlpEngine.sendRequest(string textToProcess, int processingWorkflowId) ,然后是基于processingWorkflowId识别的C ++代码,它是什么呢应该用文字。

使用Linphone的Android SIP应用程序

我正在研究SIP应用程序和使用Linphone库我在设置库来运行项目时有点困惑。 第1步:首先,我使用新的Android SDK pkg在我的Mac上下载了NDK。 然后在ADT -> Preferences -> Android -> NDK给出了我的NDK文件夹的PATH 第2步:然后我使用此链接安装了Autotools(仅按照以下命令编写:2.3如何安装Autotools(作为用户)?)ndk_build 第3步:之后我使用终端下载linphone–android使用 – git clone git://git.linphone.org/linphone-android.git –recursive 现在我想按照以下步骤操作: 步骤4:使用终端上的命令转到下载项目的根目录: $ cd /home/my_downloaded_project_path/linphone-android 然后第5步: $ ./prepare_sources.sh /home/android-ndk-r7b/ndk_build 我想那时构建就准备好了。 第6步:在eclipse中导入linphone-android项目,然后运行该项目。 现在我正在做第5步:我收到错误 -bash: ./prepare_sources.sh: No such file or directory 我搜索了我的整个Mac,但我找不到这个文件(那么它将如何运行?) 任何人都可以告诉我我错过了什么或做错了什么。 我的步骤是否正确(如果你的步骤中有任何修改,请告诉我) 我尝试的另一种方法是 : 从这里下载的Linphone Lib for Android复制./prepare_sources.sh文件并粘贴到我使用terminal命令下载代码的目录中,如上面的步骤3所述。 现在运行此命令 ./prepare_sources.sh /home/android-ndk-r7b/ndk_build 它在终端上工作但最后它向我展示了这些消息: . . . er.bat inflating: […]

cmake用android ndk失败了

我正在尝试使用Android NdK独立工具链构建一些东西。 但是,我遇到了这些错误。 CMake Warning at cmake/android.toolchain.cmake:387 (message): Using value of obsolete variable ANDROID_NDK_TOOLCHAIN_ROOT as initial value for ANDROID_STANDALONE_TOOLCHAIN. Please note, that ANDROID_NDK_TOOLCHAIN_ROOT can be completely removed in future versions of the toolchain. Call Stack (most recent call first): cmake/android.toolchain.cmake:476 (__INIT_VARIABLE) /usr/local/Cellar/cmake/2.8.10.2/share/cmake/Modules/CMakeDetermineSystem.cmake:86 (include) CMakeLists.txt:16 (PROJECT) CMake Error at cmake/android.toolchain.cmake:412 (FILE): file STRINGS file “/Users/vgokhale/Desktop/android-ndk-r8e/sysroot/usr/include/android/api-level.h” cannot […]

混合Android插件从gradle和gradle-experimental

是否有任何方法或变通方法或只是提示从gradle和gradle-experimental一起工作的插件? 例如,混合这两个版本: com.android.tools.build:gradle:1.3.1 com.android.tools.build:gradle-experimental:0.3.0-alpha4 我有一个使用一些外部插件的现有项目( app/build.gradle ): apply plugin: ‘com.android.model.application’ apply plugin: ‘com.android.databinding’ apply plugin: ‘com.jakewharton.hugo’ 在我的root build.gradle我有: com.android.tools.build:gradle-experimental:0.3.0-alpha4 我有的问题: * What went wrong: A problem occurred evaluating project ‘:app’. > Failed to apply plugin [id ‘com.android.databinding’] > java.lang.NullPointerException (no error message) 要么 * What went wrong: A problem occurred evaluating project ‘:app’. > Failed […]

使用Android NDK使用-fsigned-char构建是否安全?

为了与其他平台保持一致,我需要在我正在使用的一些本机代码中使用signed char 。 但默认情况下,Android NDK上的chartypes是unsigned 。 我曾尝试显式使用signed chartypes,但是当涉及字符串常量/库函数时,它会产生太多differ in signedness警告,因此我希望使用-fsigned-char构建我的代码。 我现在正试图在使用-fsigned-char时预测Android ARM ABI和API的问题,但我还没有发现任何问题。 在ARM体系结构的过程调用标准ABI(AAPCS) ,7.1.1算术types和ARM体系结构的C库ABI ,5.6 inttypes.h中, char被认为是unsigned 。 在Android NDK中启用-fsigned-char时,您是否知道在使用C库(Android上可用的其他库)时是否会出现问题?

使用Android的巨大UDP延迟/延迟

我正在开发一个Android应用程序,它通过WLAN向Windows端点发送/接收大量UDP流量(不,我不能使用TCP)。 问题是,当我增加流量时,我开始看到当我调用sendto(应用程序是用NDK写入)和我看到数据包到达Windows端点之间的巨大延迟。 在10秒左右 ! 反过来也是如此:我发现Windows端点发送的数据包与recvfrom()接收的数据包之间存在巨大延迟。 更改SO_SNDBUF无效,因此我认为这不是应用程序级缓冲控制的问题。 我已经validation了各种Android设备上存在的问题,所以我不认为这是硬件/无线驱动程序的问题 使用嗅探器并关联时间戳,我确认在调用sendto()和从Android设备发送的数据包之间发生了延迟,因此缓冲不会发生在AP或Windows端点 所以在这一点上我只是出于想法。 事实会让我相信缓冲是在Android OS层上发生的,但10秒的10Mbps流量呢? 对于内存占用非常大的操作系统来说,这似乎太高了。 此外,如果问题是我发送的数据太快并且压倒了操作系统,那么我希望sendto()返回ENOMEM或ENOBUFS …但是没有迹象表明Android应用程序级别出现任何问题。 所以我的问题是:导致这种延迟的原因是什么? 有没有办法缓解它,或者我是否需要更改我的应用程序以获得更长的超时或某种方式在它变坏之前检测到这种情况?

Android上的分形应用程序

在android上生成分形曲线的最佳方法是什么? 我应该使用NDK吗? 如果不 什么是扩展View或SurfaceView的正确类 我生成了两个分形扩展View并覆盖onDraw() ,当迭代次数很大且曲线比率太小时,生成太慢

哪些Android设备支持jni?

我开发了一个Android应用程序,它使用Archos 43的JNI( java本机接口 )。 没有问题,我能够顺利运行应用程序。 后来我尝试在三星I9100G Galaxy S II以及三星I9100 Galaxy S II上运行相同的应用程序。 我能够在I9100G上运行该应用程序,但不能在I9100上运行。 原因是I9100不支持应用程序的JNI部分。 我确实试图了解其原因并且能够发现I9100G使用Ti OMAP 4430 chipset和PowerVR SGX540 as GPU whereas I9100 uses Exynos 4210 chipset and Mali-400MP as GPU. 我怀疑原因可能是芯片组的变化(因为Archos 43也使用了Ti OMAP)。 但是我的搜索无法获得任何进一步的结果。 更新该应用程序使用蓝牙。 在尝试连接到自定义硬件(CH)时,在I9100上运行应用程序时无法从CH获得任何响应。 蓝牙通信部分使用jni编写。 所以我的问题是,由于芯片组,我是否无法在I9100上使用JNI运行我的应用程序,如果是这样,为什么呢? 另外一个更普遍的问题是哪些设备支持Android JNI应用程序以及设备运行Android JNI应用程序所需的基本function是什么? (我花了相当多的时间试图find所有这些问题的答案,我们将非常感谢任何帮助。) 谢谢。