gpt4 book ai didi

java - 注解处理时获取Android应用包名

转载 作者:搜寻专家 更新时间:2023-11-01 07:49:04 25 4
gpt4 key购买 nike

我正在开发一个库,该库在编译时(点击构建时)基于带注释的类和字段生成类文件。到目前为止一切都很好(可以生成类)。但是,我遇到了一个问题,就是如何在启动应用程序时找到这样一个生成的类(需要在 ApplicationonCreate 方法中访问该类)。

代码看起来像这样:

- Application class of an Android app -
@Override
public void onCreate() {
super.onCreate();
MyLib.setup(this);
}

MyLib 类中,需要做这样的事情:

public void setup(Application app) {
String className = String.format("%s.%s", "packageName", "generatedClassName");
Class<?> myGeneratedClass = Class.forName(className);
...
}

问题是我不知道如何在不知道类的包名的情况下找到该类,也不知道如何找到它的包名。

我能想到一种方法是将包名称传递到一个注解中,例如 @MyAnnotation("package_name"),以便在编译时生成类并在运行时获取该类时使用它。

但是我只是想知道是否还有其他更简洁的方法来实现这一目标。有没有办法:1.注解处理时获取Application包名2.在不知道它的包(只知道Application包)的情况下,在运行时寻找一个类。我确实在 MyLib.setup() 中尝试了 Package.getPackages()。但是,这会返回一个空数组。

最佳答案

这是一个经过深入研究的问题。最简单的方法是让您的用户注释应用程序包(是的,annotating a package is possible)或通过 javac parameter 传递应用程序包的名称。 (android-apt 和新版本的 Android Gradle 插件对这些有原生支持)。这很便宜,可以让您快速行动。

启发式获取包名是可能的,AndroidAnnotations 有一大块代码(更准确地说,是 finding AndroidManifest.xmllocating R.java ),它们都可以给出应用程序包。当心,这些方法并不漂亮。请注意,AndroidAnnotations 具有插件系统,因此您无需重新编写插件并声明对其主处理器的依赖即可访问该功能。

最后,您可以编写自己的 Gradle 插件并直接访问此类信息。

关于java - 注解处理时获取Android应用包名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38005102/

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