我的目标是编写一个可以列出调用者应用程序的所有资源(布局,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有没有其他方法可以在外部库中列出资源。
答案 0 :(得分:0)
由于Drawable是一个内部类,因此您需要使用$
来访问它。
String resourceNameSpace = namespace + ".R";
String drawableNamespace = resourceNameSpace + "$drawable";