gpt4 book ai didi

java - 列出 Android 库中的所有应用程序资源

转载 作者:行者123 更新时间:2023-12-01 04:25:27 26 4
gpt4 key购买 nike

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

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;
}
}

调用者代码(来自应用程序 Activity ,例如com.example.sample.MainActivity.java)

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

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

运行时,我在库内的 Class.forName 语句中收到此异常:

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

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

我还想知道是否有其他方法可以列出外部库中的资源。

最佳答案

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

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

关于java - 列出 Android 库中的所有应用程序资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18549226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com