Tag: android ndk

Android中支持的OpenSL ESfunction

Android应该通过可通过NDK访问的OpenSL es API支持3D音频。 这或多或少有效,我设法通过创建的播放器和输出组合播放声音。 但是当我尝试使用3D位置接口(SL_IID_3DLOCATION常量)来实现一个听众时,这是播放3D声音所必需的。 但是当我尝试将常量设置为SL_BOOLEAN_TRUE时,CreateListener方法的结果为12传递给LogCat。 12是OpenSL es常量SL_RESULT_FEATURE_UNSUPPORTED的值。 您可以在下面找到代码的一小部分,任何人都可以确认我是否做错了或者该function是否真的未报告,这意味着OpenSL es实现不支持3D音频? #define SL_RESULT_FEATURE_UNSUPPORTED ((SLuint32) 0x0000000C) const SLInterfaceID listener_ids[] = {SL_IID_3DLOCATION}; const SLboolean listener_req[] = {SL_BOOLEAN_TRUE}; result = (*engine)->CreateListener(engine, &listenerObject, 1, listener_ids, listener_req); __android_log_print(ANDROID_LOG_VERBOSE, DEBUG_TAG, “CREATE: [%i]”, result); assert(SL_RESULT_SUCCESS == result); result = (*listenerObject)->Realize(listenerObject, SL_BOOLEAN_FALSE); __android_log_print(ANDROID_LOG_VERBOSE, DEBUG_TAG, “REALIZE: [%i]”, result); assert(SL_RESULT_SUCCESS == result);

如何使用NDK编译Android的现有C程序?

我正在编写一个Android应用程序来测试网络性能,我想在应用程序中使用iPerf。 我可以找到已经为Android编译的二进制iPerf文件(然后我可以在手机上运行iPerf并收集其输出)但我有兴趣自己编译文件。 在这里,有人提供了可用于编译程序的脚本: http : //sourceforge.net/tracker/index.php?func = enter&aid = 3533374&group_id = 128336 &atid = 711373 我知道它需要NDK,但我不知道从哪里开始。 是否有任何好的资源或建议可以帮助指导我自己编译(在Windows上,但我也有Cygwin)。 我知道C以及如何在linux上使用GCC,但我不知道从哪里开始。 在此先感谢您的帮助!

使用ffmpeg 2.1.1 for Android时未定义的引用

我正在按照与halfninja构建相同的模式构建 ffmpeg:通过JNI从Java获取ffmpeg的main 。 我使用以下选项构建了ffmpeg: ./configure \ –prefix=$PREFIX \ –disable-shared \ –enable-static \ –disable-doc \ –disable-ffmpeg \ –disable-ffplay \ –disable-ffprobe \ –disable-ffserver \ –disable-doc \ –disable-symver \ –cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ –target-os=linux \ –arch=arm \ –enable-cross-compile \ –sysroot=$SYSROOT \ –extra-cflags=”-Os -fpic $ADDI_CFLAGS” \ –extra-ldflags=”$ADDI_LDFLAGS” $PREFIX , TOOLCHAIN ,…从我的NDK设置为相应的文件夹。 $ADDI_CFLAGS设置为-marm , $ADDI_LDFLAGS和$ADDITIONAL_CONFIGURE_FLAGS $ADDI_LDFLAGS设置。 生成的静态库: $ ls -1 android / […]

使用Android NDK中的系统function在Android嵌入式设备上运行Shell脚本文件

所有 在这里,我想通过android NDK中的系统调用运行.sh文件。 我可以通过系统调用运行cp,rm命令。 但是sh命令不能通过系统调用工作。 我还在android上安装了busy-box。我正在使用下面的代码。我在test.sh上设置了所有权限。 代码: #include #include #include #include #define LOG_TAG “Demo” #define LOGD(…) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) void Java_com_ndkdemo_NDKdemoActivity_systemcall(JNIEnv * env, jobject obj) { int result; result = system(“cp /mnt/sdcard/test /Download”); LOGD(“result is cp %d”, result); result = system(“sh ./test.sh”); LOGD(“result of test.sh is %d”, result); } 输出: result is cp 0. result of test.sh […]

如何知道我正在使用ndk-build构建哪个API级别?

我正在尝试更好地理解在使用ndk-build时如何选择api级别。 我知道我可以在Application.mk中明确设置APP_PLATFORM ,否则ndk-build将使用android:minSdkVersion来定位清单中指示的api,但是如果我的应用程序的清单同时包含android:minSdkVersion和android:targetSdkVersion ,那么这是高于minSdkVersion? ndk-build会定位targetSdkVersion吗? 我怎么检查呢? 如果它针对更高的api级别,我想我将能够使用仅适用于该级别的本机apis进行构建,但是如果我在具有较低api级别的设备上运行该应用程序,它应该很难失败,所以在这种情况下我应该实现某种api级别的检查,这是正确的吗?

使用Android NDK和C文件,Eclipse ADT“无法解决”

我的NDK项目的Eclipse索引器出了问题。 那里有很多类似的线程,但似乎都没有触及相同的问题来源。 我有一个OpenGL ES应用程序,我需要移植到Android上纯粹用C编写,我想作为NativeActivity运行,最好没有附加Java。 在经过大量重写后,代码使用ndk-build编译得很好,但是从IDE中出现了很多错误,例如Type ‘GLfloat’ could not be resolved 。 一个APK生成,我可以用adb和all安装它,但我希望能够使用IDE,特别是用于调试。 如果我在上下文菜单中为#include 这样的行选择’Open Declaration’,那么Eclipse能够显示该文件,我看到GLfloat定义在那里,但是当我将#include hover在任何东西上时我都没有信息在那个文件中所以我猜索引器只是以某种方式跳过它? 不在Android NDK目录中的头文件被编入索引就好了,例如jni文件夹和jni/png等子文件夹中的文件。 我在C/C++ Build -> Environment下定义了NDKROOT根,这是一个具有本机function并使用CDT视图的项目。 我注意到的一件事是,当我最初设置项目时,我有一个.cpp文件,索引器提供Android NDK信息没有问题,但是一旦我将其更改为.c ,错误就开始出现了。 我的印象是Android NDK是与C一起使用的,只有基本的C ++支持,但在样本中查看,我只看到一堆.cpp文件,所以我很困惑。 我已经尝试在我的Android.mk设置LOCAL_CPP_EXTENSION += .c但是这会导致Eclipse在构建期间挂起。 我还没有尝试过的最后一件事就是重命名所有文件,以便用C ++编译器编译,但我不明白为什么这应该是必要的,我有一些第三方库,比如zlib包括来源,我是而不是小提琴。 Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) define all-cpp-files-under $(patsubst ./%, %, \ $(shell cd $(LOCAL_PATH) ; \ find $(1) -name “*.c” […]

CvCaptureFromAVI问题 – OpenCV Android

我需要逐帧捕获存储在Android设备的SD卡中的video(在本例中为我的模拟器)。 我通过NDK使用Android和OpenCV。 我通过DDBS(eclipse)的文件浏览器在sdcard中手动推送文件“SinglePerson.avi”,我使用下面的代码来读取文件: JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial4_Sample4Mixed_VideoProcessing(JNIEnv*, jobject) { LOGI(“INSIDE VideoProcessing “); CvCapture* capture = cvCaptureFromAVI(“/mnt/sdcard/SinglePerson.avi”); IplImage* img = 0; if(!cvGrabFrame(capture)){ // capture a frame LOGI(“Inside the if”); printf(“Could not grab a frame\n\7”); exit(0); } img=cvRetrieveFrame(capture);// retrieve the captured frame cvReleaseCapture(&capture); } 问题是cvGrabFrame(捕获)结果总是错误的。 有任何建议正确打开video并抓住帧吗? 提前致谢

Android NDK使用来自JNI内部c代码的.so库

我在SO上发现了类似的问题,但没有一个是相同的工作流程。 我的项目中有一个.so库(libcurl)。 该项目构建但我需要在JNI中的c代码中获取curl.h。 这是我的Android.mk文件: LOCAL_PATH:= $(call my-dir) LIBS_PATH := libs/$(TARGET_ARCH_ABI) include $(CLEAR_VARS) LOCAL_MODULE := libcurl LOCAL_SRC_FILES := $(LIBS_PATH)/libcurl.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := testLib LOCAL_SRC_FILES := lib.c LOCAL_SHARED_LIBRARIES += libcurl include $(BUILD_SHARED_LIBRARY) 这是我的c类: #include “curl/curl.h” #include “lib.h” JNIEXPORT jint JNICALL Java_com_example_test_1libcurlandroidlib_Lib_getTestNumber (JNIEnv *env , jclass clazz) { return 99; } 问题在于“curl / curl.h”include命令。 我也试过,但它也找不到: […]

Android – 从JNI获取MEID

我正在使用Android,编写一些JNI代码,我正在寻找一种从设备查询移动设备标识符(MEID)的方法。 http://en.wikipedia.org/wiki/Mobile_equipment_identifier 我正在尝试编写可以在Android设备上自行运行的C或C ++代码,所以我认为我不能使用Java(即从TelephonyManager获取MEID)。 搜索StackOverflow发现: 是否有一个android shell或adb命令,我可以使用它来获取设备的IMEI / MEID? 好的, dumpsys iphonesubinfo可以获得我需要的信息。 它的工作原理! 除了作为Android源代码的一部分之外,我找不到dumpsys的源代码。 所以我下载了…我的硬盘在下载完成之前已经填满了,但我确实得到了dumpsys的源代码。 这是一个令人惊讶的短C ++文件。 它只是查询Android的IBinder界面。 所以,我的问题: 0)有没有什么办法可以IBinder使用NDK中的东西来编写对IBinder的查询? dumpsys.cpp使用的包含文件不在NDK中,并且NDK目录中的grep在任何包含文件或代码示例中都找不到IBinder ,所以我的猜测是“不”(但我想错了)。 1)有没有其他好的方法来获得MEID? 我认真考虑我应该只使用system(“dumpsys iphonesubinfo > /tmp/myprogname_dumpsys.tmp”然后打开生成的文件并解析它。这应该可行,但我很难称之为优雅…而且我是不确定每个Android设备上是否有dumpsys可用。 编辑:使用system()运行dumpsys将无法正常工作,因为dumpsys需要android.permission.DUMP和Android不再允许非系统应用程序拥有该权限。 在Java中Dumpsys权限拒绝

Android NDK分段错误

在我的应用程序中,当我尝试在那个时间面向分段错误时将我的日志打印到文件中。 我正面临致命信号11。 我的日志function是Native部分,我从Java调用它。 logcat的: 01-01 00:09:38.968: A/libc(3905): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 01-01 00:09:38.976: D/Random(2185): Trip In List :false 01-01 00:09:38.976: D/Random(2185): Odometer :0 01-01 00:09:38.976: D/abc(3905): PreCheck conditions satisfied for WIFI Searching Timer 01-01 00:09:39.601: I/DEBUG(1285): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** […]