我的目标是编写一个可以列出调用者应用程序的所有资源(布局、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 类路径的基本课程以及构建的工作原理,但是库运行时该类不是已经加载了吗?
我还想知道是否有任何替代方法可以在外部库中列出资源。