Articles of android ndk

Android-Ndk与交叉编译? 这两个工作,那么Android NDK的需求是什么?

我可以交叉编译任何C / C ++应用程序,静态链接它的Linux库,并在android上运行它。然后,Android-ndk的需求是什么?Android-ndk限制我们仿生,其中有一小部分gnu libc.Isn直接交叉编译应用程序并通过Android shell运行它更好吗?交叉编译是否有任何限制,我看不到? 这个URL: Linux应用程序可以在Android中运行吗? 在一定程度上回答了我的问题,但最终让我感到困惑和不清楚。

Ashmem保留政策

所以在Android上,既没有POSIX共享内存,也没有SysV共享内存,但是还有ashmem 。 我想用它从本地子系统中的崩溃中收集一些事后的信息(如在这里 )。 问题 – 当处理他们的过程死亡时,我可以让一个灰烬区域持续吗? ashmem在哪里logging?

当调用read()和write()时,strerror(errno)返回“无效参数”

我尝试通过本地方法访问android中的文件,但是在调用读取或写入函数后,我得到了“无效参数”。 data_ptralignment到512字节,并在java中声明为字节数组。 JNIEXPORT jint JNICALL Java_com_aa_bb_NativeRead(JNIEnv* env, jobject clazz, jbyteArray data_ptr, jint length){ int ret=0; jsize len = (*env)->GetArrayLength(env, data_ptr); jbyte *body = (*env)->GetByteArrayElements(env, data_ptr, 0); fd = open(filePath, O_CREAT | O_RDWR | O_DIRECT | O_SYNC, S_IRUSR | S_IWUSR); ret = read(fd, body, length); if(ret<0){ LOGE("errno: %s\n", strerror(errno)); } (*env)->ReleaseByteArrayElements(env, data_ptr, body, 0); return ret; […]

如何在Android应用程序(通过C ++)打开设备节点(/ dev / hidraw0)?

我目前使用JNI / NDK将一个C ++通信库从Linux移植到Android。 该设备是一个用于进行科学测量的USB检测器。 这只是一个原始的HID,它以“/ dev / hidraw0” 我需要得到一个文件描述符('_fileHandle')到设备,我正在通过: _fileHandle = open(_devicePath.c_str(), O_RDONLY | O_NONBLOCK); 其中“_devicePath”是设备节点“/ dev / hidraw0”。 不幸的是,我遇到了Android(Permissions / SELinux,很可能)的问题,并且在尝试执行open(…)命令后,我的logcat中出现以下错误: type=1400 audit(0.0:41): avc: denied { read } for name="hidraw0" dev="tmpfs" ino=229381 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0 “/ dev / hidraw0”的“ls -l”是: crw——- 1 root root 229 我怎样才能让设备打开? 我试图只是chmod在节点上的权限和变化不坚持(Android立即恢复他们)。 谢谢!

针对GLIBCbuild立一个NDK库

我有兴趣构build一个开源项目,它需要GNU库GLIBC和GLIBM。 如果我要在Linux下(我使用Ubuntu 11.10作为主机)交叉编译共享(.so)甚至静态(.a)对象,使用ARMv7-a neon体系结构,使用API​​-9作为一个图书馆来调用Java的JNI,最终编译成一个APK的分布,将采取什么步骤来实现这一结果? 鉴于我已经尝试过Google NDK工具链(根据文档设置$ PATH和$ CC),各种自定义工具链, Code Sourcery工具链以及使用crosstool-ng在XDA论坛上build议的工具链是有可能实现一个可以从JNI调用的共享对象文件,并可以访问非根Android设备上的完整GLIBC库? 我已经search了一个这个答案,最近的我是在本地构buildGLIBC和GLIBM,并使用NDK的arm-linux-androideabi-ld手动复制相关对象(.o)文件和手动链接。 当使用Java的System.LoadLibarary()调用库时,Crosstool-ng和CodeSourcery中的libc.so.6文件不能工作,因为重定位失败(给出错误未知的reloctypes19)。 我的重定位知识不是最好的,但是从我读到的这个需要更改/linux/elf.h头文件,但我不确定从哪里去。 我相信从我已经读到,有可能做一个静态的可执行文件,当链接解决所有的依赖关系,但不能将它打包为一个APK文件,据我所知。 当然,我不可能是第一个想要针对Android平台上的仿生以外的东西编译C代码吗? 有很多C项目可以移植到Android上,显然GLIBC在iPhone上已经有了相当长的一段时间了。

如何在Fedora中安装NDK?

我想安装和configurationNDK在我的系统有Linux操作系统。 我已经研究了这个关于NDK的链接。 http://developer.android.com/tools/sdk/ndk/index.html ,从中我已经得到了有关NDK的基本知识,但没有得到任何关于如何安装 , configuration和使用NDK的具体答案,我是NDK的新手所以我很困惑,我怎么能接下来的事情。

为第三方守护进程重新编辑android init.rc

我有一个在Android上的背景上运行的C ++编写的守护进程。 我希望守护进程在发生崩溃或意外事件时重新启动,而不添加独立的崩溃保护。 做这个的最好方式是什么 ? 我希望编辑init.rc.

为什么我的Android应用程序(具有root权限)无法访问/ dev / input?

我的应用程序针对根源Android设备,它有root权限,需要访问目录/dev/input ,但为什么它会抛出opendir failed, Permission denied甚至/dev/input已经被chmod到777 ? 我使用下面的代码来获得root权限: Process root = Runtime.getRuntime().exec("su"); 并使用下面的代码来更改/dev/input的权限: Shell.runCommand("chmod 777 /dev/input"); 上述两个步骤都是成功的,但为什么我的应用程序仍然无法访问? 从search中,有人说应用程序的运行时权限与文件系统中文件的权限无关。 Android运行时的权限系统是什么? 我怎样才能让应用程序能够访问/dev/input ? 加成: 我的testing环境是Android 5.1.1,主要部分代码是: jint Java_com_foo_funnyapp_Native_scanInputDevicesJNI(JNIEnv* env, jclass clazz) { const char *dirname = "/dev/input"; DIR *dir; dir = opendir(dirname); // opendir failed, Permission denied if(dir == NULL) return -1; …… return 0; } 来自/prog/kmsg SELinux错误 […]

Linux和Android上的CoreFoundation Lite

我想在linux和android上使用Apple的CoreFoundation库。 这里提供了源代码,但是关于如何在Linux上构build它的文档却很less。 据我所知,构build是通过一个名为BuildCFLite的脚本来完成的。 我grepped DEPLOYMENT_TARGET ./CFUtilities.c:#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD Linux似乎是通过设置-DDEPLOYMENT_TARGET_LINUX来支持的,但是该脚本中的一些编译器标记在linux上是不可用的,所以当我尝试构build的时候,我得到一个错误。 有没有人有build立最新版本的CoreFoundation for Linux的经验? 还有什么是build立CoreFoundation的依赖? 在Android NDK中使用它是否可行?

NDK去除debugging信息?

我正在build立一个静态库(.a)作为其中一个input的NDK共享库。 静态库具有GDB格式的debugging信息。 debugging信息是否在最终的.SO中结束? 我如何检查?