Tag: android ndk

设置CMAKE_PREFIX_PATH不能使用Android工具链

我正在使用Android CMake工具链将CMake C和C ++游戏移植到Android。 项目的库依赖项存储在PROJECTDIR/android_dependencies ,我已将以下代码添加到CMake文件中以使用它们(我检查了目录和文件是否存在)。 set(CMAKE_PREFIX_PATH “${PROJECT_SOURCE_DIR}/android_dependencies/${ANDROID_ABI}”) 但我的项目仍然说它无法找到像OpenAL这样的依赖项(所有的库都被复制了)。 如果我将库复制到$NDK/platforms/android-9/usr/lib并将文件包含到$NDK/platforms/android-9/usr/include ,项目将正确编译。 我能做错什么? 我正在使用64位的Ubuntu 16.04

_vscprintf相当于Android?

_vscprintf在Android上不可用。 另外vsprintf(NULL, fmt, ap)不起作用(产生seg错误),所以似乎无法计算vsnprintf成功所需的缓冲区大小? Android 源代码表明__android_log_print函数只是使用vsnprintf将字符串截断为1024 … 你如何处理这种情况?

Android gcc sysroot和链接器

我正在使用Ubuntu Linux 10.0.4上的Android NDK Linux构建编译一个简单的程序。 //no includes!!! int main() { int a = 1, b = 2, c = -1; return a + b + c – ( a + b + c); } 当我为gcc运行这个bash脚本时, bin=’/media/sdb/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin’ rm -r ./obj/*.* $bin/arm-linux-androideabi-gcc -c ./main.c -o ./obj/main.o $bin/arm-linux-androideabi-gcc ./obj/main.o -o ./obj/main.exe gcc的输出给出了来自ld ( arm-linux-androideabi-ld )的消息,它终止为7(第二个以逗号分隔的是ARM)信号。 这个简单的程序甚至不会在Linux上编译,请帮忙!

是否可以直接从本机代码记录Android systrace事件,而不使用JNI?

Android systrace日志记录系统非常棒,但它只能在代码的Java部分工作,通过Trace.beginSection()和Trace.endSection() 。 在代码的C / C ++ NDK(本机)部分中,它只能通过JNI使用,JNI在没有Java环境的线程中很慢或不可用… 是否有任何方法可以将事件添加到主systrace跟踪缓冲区,甚至从本机C代码生成单独的日志? 这个较老的问题提到atrace / ftrace是Android的systrace使用的内部系统。 这可以(轻松)进入吗? BONUS TWIST:由于跟踪调用通常位于性能关键部分,理想情况下应该可以在实际事件时间之后运行调用。 即我一个人宁愿能够指定记录的时间,而不是自己轮询的呼叫。 但那只会锦上添花。

我可以在NDK应用程序中使用本机库(安装在Android堆栈中)吗?

从这篇文章 http://marakana.com/forums/android/examples/49.html 我已经看到在NDK的帮助下构建应用程序会做以下事情 1>它编译所有c代码(在jni文件夹中)并使库保留在libs文件夹中 2>在.apk包里面,该库也保留在lib文件夹中 在java文件中,我可以使用以下代码加载该库 static { System.loadLibrary(“ndk_demo”); } 问题1:所以现在有可能不是将该库保留为.apk的一部分而是可以在android系统中安装它并且我的应用程序从系统加载? 问题2:同样的方式我可以使用其他一些已经准备好安装在Android中的库,如open GL , sqLite ?

将C程序迁移到Android NDK

我是C / C ++和Android NDK的初学者,我在尝试创建本机库时遇到了问题。 我的代码在CDT上使用MinGW进行编译,但是当我在JNI文件上编写相同的代码时,会出现错误。 我的代码是: int n = 7; int positions[n]; int final_order[n]; memcpy(positions, final_order,sizeof(final_order)); 插件告诉我: Invalid arguments ‘Candidates are: void * memcpy(void *, const void *, ?)’ 这是CDT上MinGW的标题: _CRTIMP void* __cdecl __MINGW_NOTHROW memcpy (void*, const void*, size_t); 这是来自Android NDK的标题: extern void* memcpy(void *, const void *, size_t);

如何将st_mtime(从stat函数获取)转换为string或char

我需要将st_mtime转换为字符串格式以将其传递给java层,我尝试使用此示例http://www.cplusplus.com/forum/unices/10342/但编译器会产生错误 从’long unsigned int *’到’const time_t * {aka long int const *}’的无效转换 初始化’tm * localtime(const time_t *)'[-fpermissive]的参数1 我做错了,如何在字符串表示中使用stat函数获取文件的时间。 请帮忙。

如何使用OpenCv叠加图像?

如何叠加两张图片? 基本上我有一个没有alpha通道的背景,而不是一个或多个alpha通道需要叠加在一起的图像。 我尝试了以下代码,但覆盖结果很可怕: // create our out image Mat merged (info.width, info.height, CV_8UC4); // get layers Mat layer1Image = imread(layer1Path); Mat layer2Image = imread(layer2Path); addWeighted(layer1Image, 0.5, layer2Image, 0.5, 0.0, merged); 我也试过使用合并,但我在某处读到它不支持alpha通道?

从JNI / NDK返回从C到Java的2D原始数组

我已经找到了大量关于如何在JNI中生成2D原始数组并将其返回给Java的文档。 但是这些信息无法描述如何在C中给定上下文传递已经存在的 2D浮点数组(float **)。 为了明确地描述我的问题,我将添加一些我想要实现的C伪代码: // Returns a 2D float array from C to Java jfloatArray ndk_test_getMy2DArray(JNIEnv* env, jobject thiz, jlong context) { // Cast my context reference MyContextRef contextRef = (MyContextRef) context; // In case we need it below unsigned int length = MyContextGet1DLength(contextRef); // Get the 2D Array we want to “Cast” float** […]

是否可以在Android中设置与sched_setaffinity的亲和力?

是否可以在使用Android NDK编译的本机C代码中设置CPU亲和力? 由于系统使用的是Linux内核,因此应该可以使用sched_setaffinity / sched_getaffinity函数,但是当我使用NDK进行编译时,我会收到错误抱怨cpu_set_t类型未知(用作函数的参数) 。 有没有其他方法可以实现这一目标? 当我使用CodeSourcerys ARM编译器(arm-none-linux-gnueabi-gcc)编译时,这似乎不是问题,因此系统显然支持所需的系统调用。