我有一个Android库,我现在正在构建一个Unity3D插件。 Android库对R.Styleable类执行反射,以检索“declare-styleable”资源上的数据,以实现与this类似的功能。
第一步如下:
Field[] fields = Class.forName( context.getPackageName() + ".R$styleable" ).getFields();
当库作为Eclipse中原生Android项目的一部分运行时,上述行不会出现问题。但是,当通过Unity Android应用程序运行时,它会抛出NoClassDefFoundError。 (如果用上面简单的“.R”替换“.R& $ styleable”,也会发生同样的情况。)
我已经阅读过很多说明Unity不会生成R.class文件的帐户。这是真的?我知道至少在Unity的“StagingArea / gen”文件夹中生成一个R.java文件。如果是这样,除了通过Context.getResources()之外,没有其他方法可以动态访问Unity Android项目中的资源吗?
答案 0 :(得分:1)
您可以尝试以下代码。
final R.drawable drawableResources = new R.drawable();
final Class<R.drawable> c = R.drawable.class;
final Field[] fields = c.getDeclaredFields();
int resourceId;
for (Field field : fields) {
try {
resourceId = field.getInt(drawableResources);
//TODO do something
} catch (Exception e) {
continue;
}
}