Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载一个自定义。所以在Android中_Android_File Io_Android Ndk_Filesystems_Shared Libraries - Fatal编程技术网

加载一个自定义。所以在Android中

加载一个自定义。所以在Android中,android,file-io,android-ndk,filesystems,shared-libraries,Android,File Io,Android Ndk,Filesystems,Shared Libraries,我目前正在将一个库从Linux移植到Android,我遇到了一些问题 lib有一个扩展系统:它将查找文件夹/usr/local/lib/{thelibname}/extensions/中具有特定扩展名的所有文件,检查它们是否是动态库,如果是,则加载它们并调用处理程序 然而,我认为在Android中修补基本文件系统文件夹是不可能的。 我调查了资产,但他们没有说服我,看起来他们更倾向于图像、音频等 是否有另一种方法将一些文件嵌入.apk中,然后通过枚举DIR*并调用dlopen加载它们 另一种可能是

我目前正在将一个库从Linux移植到Android,我遇到了一些问题

lib有一个扩展系统:它将查找文件夹
/usr/local/lib/{thelibname}/extensions/
中具有特定扩展名的所有文件,检查它们是否是动态库,如果是,则加载它们并调用处理程序

然而,我认为在Android中修补基本文件系统文件夹是不可能的。 我调查了资产,但他们没有说服我,看起来他们更倾向于图像、音频等

是否有另一种方法将一些文件嵌入.apk中,然后通过枚举
DIR*
并调用
dlopen
加载它们


另一种可能是将扩展与应用程序数据放在一起,但我不知道是否有一个标准路径可以在库中硬编码,是吗?我不知道在安装apk时如何在数据中添加一些内容?(我使用QtCreator生成APK)

好的,我发现了另一个问题,它帮助我解决了我的问题:


您可以轻松地从文件系统中的任何位置加载扩展库,包括共享文件夹,如
/sdcard/
和她的孩子。任何应用程序(以及其中的本机库)都可以获得对
/sdcard/
的完全读取权限

通过这种方式,您可以建立一个文件夹,在该文件夹中扩展不一定由单个APK更新(请注意KitKat中的更改)

如果要将所有扩展库部署为APK的一部分,最简单的方法是将它们放在用于打包APK的标准文件夹中(对于ADT,它是
${project\u root}/libs/armeabi
),然后它们将自动安装在
/data/app lib/${app\u package}
中。这种方法允许为多个体系结构准备APK,在
${project_root}/libs/x86
等中准备适当的文件

请注意,所有库必须具有lib前缀和.so后缀,例如
mylib.so
libcrypto.so.6
将不起作用,即使理论上这些库可以通过
dlopen()
加载

您的应用程序具有对
/data/app lib/${app_package}
目录的读取权限,因此您可以从C代码或Java对其进行扫描。在Java中,解析
${app_package}
很容易,即使您不想硬编码这个名称。只需调用
getApplicationContext().getPackageName()


在C语言中,您可以使用
/proc/${pid}
找到共享库的完整路径,这样您还可以知道扩展的路径。

如果标记了android ndk,您会得到更好的服务。