列出Android库中的所有App资源

时间:2013-08-31 14:28:48

标签: java android classnotfoundexception android-resources

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

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设置为Sample app的依赖android库。

运行此操作时,我在Class.forName语句中的库中获得此​​异常:

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

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

我还想知道id有没有其他方法可以在外部库中列出资源。

1 个答案:

答案 0 :(得分:0)

由于Drawable是一个内部类,因此您需要使用$来访问它。

String resourceNameSpace = namespace + ".R";
String drawableNamespace = resourceNameSpace + "$drawable";