Implementando a varredura do pacote Spring-like no Android

Estou tentando implementar um recurso de varredura de pacotes, semelhante ao da Springcomponent-scan, para o framework Android que estou desenvolvendo. Basicamente, eu gostaria de poder especificar um pacote básico, por exemplocom.foo.bar e recuperar tudoClass instâncias que possuem uma anotação específica. Eu não quero ter que registrar todos os componentes com a minha estrutura, pois isso frustraria o propósito da varredura automática.

Baseado em minha pesquisa, parece que não é possível com Java recuperar recursos dado um nome de pacote usando reflexão. No entanto, olhei brevemente para oQuadro de reflexões, e eu estou querendo saber se existe um equivalente compatível com o Android. Se não, talvez exista uma maneira um pouco menos óbvia de realizar o que quero fazer.

Eu olhei para a fonte da Primavera um pouco para ver como eles conseguiram isso, mas eu não acho que o que eles estão fazendo funcionaria dentro do tempo de execução da Dalvik.

Atualizar

Atualmente, o código abaixo tem sido o melhor que posso fazer para recuperar todas as classes que contêm uma anotação específica, mas, francamente, é uma solução muito ruim. Faz algumas suposições realmente inseguras sobre oClassLoader Além disso, ele verifica (e carrega) todas as classes de aplicativos.

public Set<Class<?>> getClassesWithAnnotation(Class<? extends Annotation> annotation) {
    Set<Class<?>> classes = new HashSet<Class<?>>();
    Field dexField = PathClassLoader.class.getDeclaredField("mDexs");
    dexField.setAccessible(true);
    PathClassLoader classLoader = (PathClassLoader) Thread.currentThread().getContextClassLoader();
    DexFile[] dexs = (DexFile[]) dexField.get(classLoader);
    for (DexFile dex : dexs) {
        Enumeration<String> entries = dex.entries();
        while (entries.hasMoreElements()) {
            String entry = entries.nextElement();
            Class<?> entryClass = dex.loadClass(entry, classLoader);
            if (entryClass != null && entryClass.isAnnotationPresent(annotation)) {
                classes.add(entryClass);
            }
        }
    }
    return classes;
}

questionAnswers(5)

yourAnswerToTheQuestion