como criar um APK e separar bibliotecas que o aplicativo carrega dinamicamente

O resumo resumido é: Como criar um APK e separar bibliotecas (com o que quero dizer conjuntos de classes (e, idealmente, recursos também) de alguma forma, como arquivos JAR, AAR ou DEX), mas não incluir essas bibliotecas no APK; em vez disso, o aplicativo os carrega em tempo de execução?

Detalhe

Portanto, minha pergunta principal é como criar um aplicativo (por exemplo, configuração Gradle). Como especificar quais classes entram em quais arquivos JAR ou DEX? Crio um módulo do Android Studio para cada arquivo DEX com o qual quero terminar?

Uma questão intimamente relacionada é como o código Java deve carregar as bibliotecas externas e acessar suas classes em tempo de execução. Para este último, espero que a abordagem mostrada emacessando classes de aplicativo a partir do arquivo dex pelo classloader podia funcionar.

Eu tentei as instruções emhttps://developer.android.com/studio/projects/android-library.html, mas que cria um APK quefaz inclua a biblioteca de dependência.

Eu também tentei o Multidex (https://developer.android.com/studio/build/multidex.html), mas isso não parece deixar ao desenvolvedor controle sobre as classes em que arquivo DEX e, além disso, empacota todas elas em um único APK. AFAICT, não há como controlar o carregamento desses arquivos DEX em tempo de execução.

fundo

Existe a possibilidade do "Problema X-Y"aqui, então é melhor eu explicar o plano de fundo.

Estou criando um aplicativo para um cliente. Ele não será distribuído por meio de uma loja de aplicativos, portanto, não terá acesso ao mecanismo normal de atualizações. Em vez disso, o cliente deseja que o aplicativo possa se atualizar baixando novos componentes para substituir os antigos, sem a necessidade de carregar manualmente um novo APK. O motivo principal aqui é que as atualizações devem ser fáceis para usuários não técnicos. Se o aplicativo puder controlar o processo de atualização, poderá facilitar e orientar o usuário.

Além disso, o aplicativo será usado em áreas onde o acesso à Internet é escasso e caro; portanto, o cliente deseja emitir atualizações de aplicativos em blocos menores (por exemplo, 2 MB), em vez de forçar o usuário a baixar novamente o aplicativo inteiro para receber um pequena atualização.

Um aspecto dos requisitos que devo mencionar, caso isso importe, é que as bibliotecas a serem carregadas em tempo de execução devem viver em um cartão microSD. Isso também pode ajudar na distribuição de atualizações sem acesso à Internet.

O status atual do aplicativo é cerca de 50% gravado: ou seja, algumas versões anteriores foram lançadas, mas o aplicativo agora precisa ser modificado (reestruturado) para atender aos requisitos acima, além de outros.

questionAnswers(2)

yourAnswerToTheQuestion