有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从我的Android库访问app R类

我正在开发一个库,需要访问实现它的应用程序的布局项。我知道如何做的唯一方法就是反思。换句话说,如果我像这样创建库API的构造函数:

public MyLibraryAPI(String packageName) {
    Class appR = Class.forName(String.format("%s.R", packageName));
    ...
}

开发人员将用他的包名作为构造函数中的参数来实例化库

我最终需要的是让我的内部类知道开发者布局(.xml文件)中使用的Android视图——id和类型。有没有一种方法可以在没有反射的情况下实现这一点并避免性能开销?我肯定这是做不到的,但如果有专家看到我没有注意到的东西,我会询问

编辑:此外,proguard在默认情况下会混淆代码以进行保护,但结果是,无法为JVM提供在运行时实现反射的方法,因此如果我使用反射,我必须要求开发人员为他或她的R类关闭proguard混淆,这是一个麻烦


共 (1) 个答案

  1. # 1 楼答案

    对安卓系统的反思成本极高。像Roboguice这样的一些善意的和流行的库已经崩溃,部分原因是反射的性能成本

    我怀疑某种代码生成是正确的解决方案Dagger 2Butter KnifeData Binding Library是采用代码生成的Android库的成功例子。由于数据绑定库对XML执行检查,因此在构建的那个阶段,它必须对代码生成库可用,并且您可以基于此实现:下面是到source jars at Maven Central的链接

    除此之外,是的,在易用性和实现难度之间似乎会有一些折衷。如果您强制消费者使用注释对其类进行注释,则使用起来会更困难,但实现起来可能会更容易。如果您仅限于检查XML和生成的R文件并从中生成代码,那么我认为您的工作将困难得多。另一方面,使用注释已变得相当普遍,用户可能不会遇到这样的问题

    祝你好运