Я работаю над библиотекой, которая генерирует файл класса на основе аннотированных классов и полей во время компиляции (при ударе по сборке). Пока все прекрасно (класс может быть сгенерирован). Однако у меня возникла проблема с тем, как найти такой сгенерированный класс при запуске приложения (к классу необходимо получить доступ в методе onCreate
для Application
).Получить имя пакета приложения Android во время обработки аннотаций
код выглядит примерно так:
- 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 («имя_пакета»), чтобы использовать ее при создании класса во время компиляции и получении этого класса во время выполнения.
Однако мне просто интересно, есть ли другие более чистые способы достижения этого. Есть ли какой-либо способ: 1. Получить имя пакета приложения во время обработки аннотации 2. Ищите класс во время выполнения, не зная его пакета (знаете только пакет приложений). Я попробовал Package.getPackages()
в пределах MyLib.setup()
. Однако это возвращает пустой массив.
Большое спасибо за ваш ответ. Очень информативно. Я рад узнать, что у AndroidAnnotations есть эти методы. Я нашел вариант плагина очень интересным. Не могли бы вы дать немного больше информации об этом? благодаря –