1

我的目标是编写一个可以列出调用者应用程序的所有资源(布局、drawables.ids 等)的 android 库。调用者应用程序需要传递给库,无非是 App Name 或包命名空间。例如:

MyLibrary 函数:

public void listDrawables(String namespace) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    String resourceNameSpace = namespace + ".R";
    String drawableNamespace = resourceNameSpace + ".drawable";

    final Class drawableClass = Class.forName(drawableNamespace);
    Object drawableInstance = drawableClass.newInstance();
    final Field[] fields = drawableClass.getDeclaredFields();

    for (int i = 0, max = fields.length; i < max; i++) {
        final int resourceId;
        try {
            resourceId = fields[i].getInt(drawableInstance);
            // Use resourceId further
        } catch (Exception e) {
            continue;
    }
}

调用者代码(来自 App Activity,比如说com.example.sample.MainActivity.java

mylibrary.listDrawables("com.example.sample");

我已将 MyLibrary 设置为示例应用程序的依赖 android 库。

当它运行时,我在Class.forName语句中的库中得到这个异常:

java.lang.ClassNotFoundException: com.example.sample.R.drawable

我无法完全理解,为什么库不能引用该类。可能是我错过了 Java 类路径的基本课程以及构建的工作原理,但是库运行时该类不是已经加载了吗?

我还想知道是否有任何替代方法可以在外部库中列出资源。

4

1 回答 1

0

由于 Drawable 是一个内部类,因此您需要使用$.

String resourceNameSpace = namespace + ".R";
String drawableNamespace = resourceNameSpace + "$drawable";
于 2013-08-31T15:16:40.957 回答