Получение списка классов из пакета в проекте Android - PullRequest
9 голосов
/ 13 февраля 2012

Я знаю, что нелегко собрать все классы в пакете с помощью отражения, но мне интересно, знает ли кто-нибудь о хорошем решении / обходном пути, особенно для проекта Android?

Учитывая пакет, мне нужно иметь возможность извлекать из него все классы и обрабатывать аннотации с помощью рефлексии.

Кто-нибудь знает способ сделать это?Есть ли в наличии библиотеки?

Ответы [ 3 ]

3 голосов
/ 05 января 2013

Сканирование файловой системы, так как большинство решений для не-Android Java не помогают на Android. Вот (теоретическое) решение, которое зависит от Android: http://mindtherobot.com/blog/737/android-hacks-scan-android-classpath/

Однако это остается хаком, поскольку Java, к сожалению, не поддерживает это напрямую.

0 голосов
/ 15 февраля 2012

Я думаю, вы можете найти ответ здесь https://stackoverflow.com/a/1457971/1199538 прикреплен java-файл, поэтому вы можете скачать его и попробовать

короткий фрагмент из ответа следующего:

Этот метод можно использовать только когда:

У вас есть класс, который находится в том же пакете, который вы хотите обнаружить. Этот класс называется SeedClass. Например, если вы хотите перечислить все классы в java.io, начальный класс может быть java.io.File.

Ваши классы находятся в каталоге или в файле JAR, в котором есть информация об исходном файле (не файл исходного кода, а просто исходный файл). Насколько я пытался, он работает почти на 100%, за исключением класса JVM (эти классы поставляются с JVM).

Ваша программа должна иметь разрешение на доступ к ProtectionDomain этих классов. Если ваша программа загружена локально, проблем не должно быть.

0 голосов
/ 15 февраля 2012

Существующие решения для внедрения зависимостей используют отражение для обработки аннотаций, но все еще нуждаются в ресурсах для объявления. См. этот пример DI с использованием отражения .

Если вы используете Ant для создания своих артефактов, вы можете прочитать содержимое вашего исходного каталога, используя Bash или Java, и использовать это для автоматического восстановления полной иерархии классов во время каждой сборки. Это может усложнить ситуацию, если вы сильно полагаетесь на Eclipse IDE, поскольку список может быть устаревшим, пока вы не запустите другую сборку Ant. (Примечание: согласно Pyscho вы можете настроить Eclipse на использование Ant, изменив конфигурацию проекта, см. Комментарии)

Другим вариантом может быть обработка файла AndroidManifest с использованием AssetManager, но вы будете ограничены ресурсами, объявленными в этом файле. Сами скомпилированные классы встроены и оптимизированы в файле classes.dex, и поэтому вы вряд ли получите от него много полезной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...