如何在 Android 中从 NDK 访问可绘制文件

Posted

技术标签:

【中文标题】如何在 Android 中从 NDK 访问可绘制文件【英文标题】:How to access drawable file from NDK in Android 【发布时间】:2017-07-31 08:35:13 【问题描述】:

在我的 android 项目中,我想使用 android-ndk 中的 c/c++ 访问可绘制文件,例如 R.drawable.some_drawable.xml。

我怎样才能实现这样的功能?

【问题讨论】:

你不能,你想这样做是为了什么? 我有一个不喜欢放入资产或原始文件夹的文件。有什么建议吗? 所以使用完整路径从 c/c++ 读取它,但您将可以访问原始数据,而不是任何 Drawable 对象 只是想确定是否有任何 api 可用。原始数据就好了。 这里有所有的 API:developer.android.com/ndk/guides/stable_apis.html 【参考方案1】:

AFAIK,使用 JNI 您仅限于某些原始数据类型:

Java 数据类型和本机代码中使用的数据类型之间的映射非常简单。命名方案保持不变:本机数据类型名称前面是字符“j”,后面是与 Java 等效的所有小写数据类型名称。 JNI 还包括另一种名为 jsize 的数据类型,它存储长度或数组或字符串。

void -> void : None
byte -> jbyte : 8-bit signed. Range is -27 to 27 - 1
int -> jint : 32-bit signed. Range is -231 to 231 - 1
float -> jfloat : 32 bits. Represent a real number as small as 1.4 x 10-45 and as big as 3.4 x 1038 (approx.), positive or negative
double -> jdouble : 64 bits. Represent a real number as small as 4.9 x 10-324 and as big as 1.7 x 10308 (approx.), positive or negative
char -> jchar : 16-bit unsigned. Range is 0 to 65535
long -> jlong : 64-bit signed. Range -263 to 263 - 1
short -> jshort : 16-bit signed. Range is -215 to 215 - 1
boolean -> jboolean : Unsigned 8 bits. true and false

您的解决方案是将您的 Drawable 保存在缓存文件夹中,并将文件地址传递给您的 NDK 代码并用 C/C++ 读取它。

How can I write a Drawable resource to a File?

【讨论】:

以上是关于如何在 Android 中从 NDK 访问可绘制文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中按名称访问可绘制资源

如何在 Android NDK 项目中包含二进制文件?

Eclipse、Android NDK、android.mk - 访问被拒绝

如何设置环境变量以便NDK中的CMakelists.txt可以访问?

如何确定 C 代码是为 Android/NDK 还是 iOS 编译的

如何定位Android NDK开发中遇到的错误