Como criar um projeto de biblioteca no Android Studio e um projeto de aplicativo que usa o projeto de biblioteca

164

Eu sou novo no sistema de compilação gradle e no IntelliJ.

Então, como eu crio um Projeto de Biblioteca Android (por exemplo, com.myapp.lib1) e o projeto do aplicativo (por exemplo, com.myapp.app) e faço o sistema de compilação incluir com.myapp.lib1 no projeto do aplicativo?

Fui ao projeto Estrutura do projeto -> Módulos -> Meu aplicativo e adicionei uma dependência ao projeto lib. O IntelliJ agora pode reconhecer classes do projeto lib quando usado no projeto do aplicativo, mas quando executo o projeto do aplicativo, existem erros como:

Gradle: error: package com.myapp.lib1 does not exist
Randy Sugianto 'Yuku'
fonte
1
Eu estava usando as Bibliotecas do Android para criar versões gratuitas / pagas do meu aplicativo. O novo sistema de construção Gradle torna essa abordagem obsoleta com o conceito Build Variants. Agora você pode criar automaticamente APKs assinados diferentes com o mesmo código. Eu gostaria de ter sabido disso antes.
Theczechsensation
1
@ theczechsensation - você pode elaborar? Depois de fazer o upload do APK para a versão completa, tentei fazer o upload do APK para a versão gratuita, mas usando o mesmo nome de pacote. A Google Play Store (GPS) me deu uma mensagem dizendo que eu já havia usado o nome do pacote. O que você diz sobre gradle significa que não preciso de dois aplicativos separados em dois pacotes separados?
DSlomer64
Aqui está a resposta perfeita stackoverflow.com/a/31366602/1118772 . Aqib Mumtaz mencionado nas respostas, mas é finalmente. Em vez de perder tempo de outras maneiras, você pode ir com isso. Você está em
Home''Notícias''Nenhum comentário
Tópico interessante adicionando Bibliotecas .com explicação pictórica.
Harish

Respostas:

111

Para criar uma biblioteca:

Arquivo> Novo Módulo

selecione Biblioteca Android

Lib

Para usar a biblioteca, adicione-a como uma dependência:

Arquivo> Estrutura do projeto> Módulos> Dependências

dep

Em seguida, adicione o módulo (biblioteca android) como uma dependência do módulo.

adicionar módulo

Execute seu projeto. Isso vai funcionar.

Blundell
fonte
194
Isso cria os arquivos do módulo dentro do projeto. E se você quiser que o módulo seja externo ao projeto para que possa ser usado com outro aplicativo?
Rdbrambley
2
@rrbrambley: Encontrei uma maneira de reutilizar um módulo em vários projetos. Criei links de pasta (NTFS Junction) usando um aplicativo chamado link winbolic para Windows. Quando tenho um módulo que gostaria de reutilizar em vários projetos, crio um link de pasta para o projeto a ser reutilizado dentro do diretório de cada projeto no qual usá-lo. Depois disso, adiciono a dependência do módulo (no Andr. Studio). Agora eu posso usar / editar o módulo em cada projeto enquanto estiver sincronizado. Não tenho certeza se é o caminho certo a seguir, mas por enquanto parece funcionar muito bem! Isso funciona melhor do que um repositório maven local.
Peter Peter
1
Infelizmente, a partir de julho de 2014, não há mais configurações do Projeto como as mostradas no screenie. Eu tive que editar os arquivos .grade como na resposta do GrkEngineer abaixo.
Tim Bray
24
Isso deve ser recusado, pois isso cria um módulo a partir de um projeto existente
Jonathan
2
Se você deseja usar a mesma lib em outros projetos, é necessário copiar o módulo da biblioteca para esse projeto e configurar o settings.gradle e o build.gradle do módulo principal manualmente.
hanoo
114

Eu me pergunto por que não há exemplo de projeto jar independente.

No eclipse, basta marcar a caixa "Is Library" na caixa de diálogo de configuração do projeto.
No estúdio Android, segui estas etapas e obtive um arquivo jar.

  1. Crie um projeto.

  2. abra o arquivo no menu esquerdo do projeto. (app / build.gradle): Scripts Gradle> build.gradle (Módulo: XXX)

  3. alterar uma linha: apply plugin: 'com.android.application'->'apply plugin: com.android.library'

  4. remova applicationId no arquivo: applicationId "com.mycompany.testproject"

  5. construir projeto: Construir> Reconstruir projeto

  6. então você pode obter o arquivo aar: app> build> outputs> pasta aar

  7. alterar aaro nome da extensão do arquivo parazip

  8. descompacte e você pode ver classes.jarna pasta renomeie e use-o!

De qualquer forma, não sei por que o Google torna a criação de jarros tão problemática no Android Studio.

Jinbom Heo
fonte
1
Funciona para mim no Android Studio 2.2.2 dec. 2016.
Herman
95

O modo recomendado pelo plugin Gradle do Google para configurar seus arquivos gradle para criar vários projetos tem algumas falhas Se você tiver vários projetos dependendo de um projeto de biblioteca, este post explica brevemente a configuração recomendada do Google, suas deficiências e recomenda uma maneira diferente de configurar seus arquivos gradle para suporta configurações de vários projetos no Android Studio:

Uma configuração alternativa de multiprojetos para o android studio

Uma maneira diferente:

Acontece que há uma maneira melhor de gerenciar vários projetos no Android Studio. O truque é criar projetos separados do Android Studio para suas bibliotecas e informar ao gradle que o módulo da biblioteca da qual seu aplicativo depende está localizado no diretório do projeto da biblioteca. Se você quiser usar esse método com a estrutura do projeto que descrevi acima, faça o seguinte:

  1. Crie um projeto do Android Studio para a biblioteca StickyListHeaders
  2. Crie um projeto do Android Studio para App2
  3. Crie um projeto do Android Studio para App1
  4. Configure App1 e App2 para criar os módulos no projeto StickyListHeaders.

O quarto passo é a parte mais difícil, então esse é o único passo que descreverei em detalhes. Você pode fazer referência a módulos externos ao diretório do seu projeto adicionando uma instrução de projeto no arquivo settings.gradle e definindo a propriedade projectDir no objeto ProjectDescriptor retornado pela instrução do projeto:

insira a descrição da imagem aqui

O código que é necessário inserir settings.gradle:

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

Se você fez isso corretamente, notará que os módulos referenciados pelo seu projeto aparecerão no navegador do projeto, mesmo que esses módulos sejam externos ao diretório do projeto:

insira a descrição da imagem aqui

Isso permite que você trabalhe no código da biblioteca e no código do aplicativo simultaneamente. A integração do controle de versão também funciona bem quando você faz referência a módulos externamente dessa maneira. Você pode confirmar e enviar suas modificações ao código da biblioteca, assim como confirmar e enviar modificações ao código do aplicativo.

Essa maneira de configurar vários projetos evita as dificuldades que afetam a configuração recomendada do Google. Como estamos fazendo referência a um módulo que está fora do diretório do projeto, não precisamos fazer cópias extras do módulo de biblioteca para cada aplicativo que depende dele, e podemos fazer a versão de nossas bibliotecas sem nenhum tipo de bobagem do sub-módulo git.

Infelizmente, é muito difícil encontrar essa outra maneira de configurar vários projetos. Obviamente, não é algo que você descobrirá olhando para o guia do Google e, neste momento, não há como configurar seus projetos dessa maneira usando a interface do usuário do Android Studio.

Aqib Mumtaz
fonte
4
Esta é a resposta perfeita. Obrigado.
Noundla Sandeep
1
Boa resposta, mas você deve copiar os bits relevantes da postagem para a sua resposta, caso o link seja quebrado.
Greyson Parrelli #
2
NOTA: para avaliação corda em Gradle você deve usar aspas ( "), salvo o dia 'para mim ligados a este.'. Presente
Solata
1
Como referenciamos o código da biblioteca a partir do código do aplicativo? Depois de seguir as instruções de configuração, o código do aplicativo ainda não pode se referir a um pacote no código da biblioteca. Existe uma etapa extra que precisa ser feita?
CEGRD 18/03/16
2
@CEGRD Você precisa ir para Arquivo> Estrutura do Projeto e clicar no nome do módulo em que está trabalhando. Em seguida, vá para a guia dependências> clique no '+' e depois em 'Dependência do módulo' no menu suspenso. Você deve poder adicionar o módulo library1 ao seu projeto atual.
OliasailO
45

Confira este link sobre configurações de vários projetos .

Algumas coisas a salientar, verifique se o settings.gradle está atualizado para fazer referência aos módulos do aplicativo e da biblioteca.

settings.gradle: include ':app', ':libraries:lib1', ':libraries:lib2'

Verifique também se o build.gradle do aplicativo tem o seguinte:

dependencies {
     compile project(':libraries:lib1')
}

Você deve ter a seguinte estrutura:

 MyProject/
  | settings.gradle
  + app/
    | build.gradle
  + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

O build.gradle do aplicativo deve usar o com.android.applicationplug - in, enquanto o build.gradle de qualquer biblioteca deve usar o com.android.libraryplug - in.

O Android Studio IDE deve ser atualizado se você puder construir a partir da linha de comando com esta configuração.

GrkEngineer
fonte
O plug-in definido em build.gradle é a única diferença? Você pode alterar um módulo existente em uma biblioteca Android alterando essa linha?
Enrico
22
Um dia, clicaremos em um botão de importação e a biblioteca funcionará, depois começaremos a digitar o código no editor.
Steve M
6
Essa abordagem parece incluir as bibliotecas no projeto real. O que o OP queria era saber como criar um projeto de biblioteca Android separado que mora em seu próprio projeto / espaço e incluído apenas no projeto principal do aplicativo como uma lib
Jonathan
@SteveM Esse tem sido o meu problema ao longo da minha carreira. Eu apenas começo a codificar sem nenhum design. E depois passe horas depurando e refatorando.
rajkiran
13

Para o Intellij IDEA (e o Android Studio), cada biblioteca é um módulo. Pense em um módulo no Android Studio como um equivalente ao projeto no Eclipse. Projeto no Android Studio é uma coleção de módulos. Os módulos podem ser aplicativos executáveis ​​ou módulos de biblioteca.

Portanto, para adicionar um novo projeto de biblioteca Android, você precisa criar um módulo do tipo "Biblioteca Android". Em seguida, adicione este módulo da biblioteca à lista de dependências do seu módulo principal (módulo Aplicativo).

Simon-Droid
fonte
12

A maneira mais simples de criar e reutilizar um projeto de biblioteca:

  1. Em um projeto aberto file > new > new module(e responda às perguntas da interface do usuário)

insira a descrição da imagem aqui

  1. verifique / ou adicione se estiver no arquivo settings.gradle :include ':myLibrary'
  2. verifique / ou inclua se no arquivo build.gradle :

    dependencies { ... compile project(':myLibrary') }

  3. Para reutilizar este módulo de biblioteca em outro projeto, copie sua pasta no projeto em vez da etapa 1 e execute as etapas 2 e 3.

Também é possível criar um novo projeto de aplicativo de estúdio É possível alterar facilmente um módulo de aplicativo existente para um módulo de biblioteca, alterando a atribuição do plug-in no arquivo build.gradle para com.android.library.

apply plugin: 'com.android.application'

android {...}

para

apply plugin: 'com.android.library'

android {...}

mais aqui

hanoo
fonte
Se você alterar um módulo de aplicativo existente para um módulo de biblioteca, alterando a atribuição do plug-in, também será necessário remover a linha `applicationId" com .... "do arquivo gradle.
TDG
"AVISO: A configuração 'compilar' é obsoleta e foi substituída por 'implementação' e 'api'."
slhck 25/01/19
9

Você pode adicionar um novo módulo a qualquer aplicativo, como Blundell diz em sua resposta e, em seguida, referenciá-lo de qualquer outro aplicativo.

Se você deseja mover o módulo para qualquer lugar no seu computador, basta mover a pasta do módulo (os módulos são completamente independentes), será necessário fazer referência ao módulo.

Para fazer referência a este módulo, você deve:

  • No arquivo build.gradle do seu aplicativo, adicione:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • No arquivo settings.gradle, adicione o seguinte:

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    
Julian
fonte
por exemplo, project(':library').projectDir = new File('../library')onde libraryestá o nome da pasta em paralelo com a pasta do projeto Android.
Alguém em algum lugar
5

Não se esqueça de usar apply plugin: 'com.android.library'no seu build.gradleplugin em vez de aplicar:'com.android.application'

Ryan R
fonte
4

Maneira da documentação

Essa é a maneira recomendada, de acordo com as recomendações fornecidas na documentação do Android Studio.

Crie um módulo de biblioteca

Crie um novo projeto para incluir sua biblioteca. Clique em Arquivo> Novo> Novo Módulo> Biblioteca Android> Avançar> (escolha o nome)> Concluir . Em seguida, adicione as classes e recursos desejados à sua biblioteca.

Quando você constrói o módulo, um arquivo AAR será criado. Você pode encontrá-lo project-name/module-name/build/outputs/aar/.

Adicione sua biblioteca como uma dependência

Você pode adicionar sua biblioteca como uma dependência a outro projeto como este:

  1. Importe o arquivo AAR da sua biblioteca com Arquivo> Novo Módulo> Importar Pacote .JAR / .AAR> Próximo> (escolha o local do arquivo)> Concluir . (Não importe o código, caso contrário, ele poderá ser editado em muitos lugares.)
  2. No arquivo settings.gradle, verifique se o nome da sua biblioteca está lá.

    include ':app', ':my-library-module'
    
  3. No arquivo build.gradle do aplicativo, adicione a linha de compilação à seção dependências:

    dependencies {
        compile project(":my-library-module")
    }
    
  4. Você será solicitado a sincronizar seu projeto com o gradle. Faça.

É isso aí. Agora você deve poder usar sua biblioteca.

Notas

Se você deseja disponibilizar sua biblioteca facilmente para um público maior, considere usar o JitPac ou o JCenter .

Suragch
fonte
3

Tinha a mesma pergunta e resolvia da seguinte maneira:

Situação inicial :

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

Alvo : deseja adicionar um módulo chamadodataformats

  1. Adicione um novo módulo (por exemplo Java Library:)
  2. Verifique se a sua settings.gradleaparência é esta (normalmente automaticamente):

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. Certifique-se ( manualmente ) de que os build.gradlearquivos dos módulos que precisam usar sua biblioteca tenham a seguinte dependência:

    dependencies { ... compile project(':dataformats') }

Matthias
fonte
2

Como o comentário da análise de tcheco acima, tento pesquisar sobre o Gradle Build Varians e encontrei este link: http://code.tutsplus.com/tutorials/using-gradle-build-build-variants--cms-25005 Essa é uma solução muito simples. Isto é o que eu fiz: - No build.gradle:

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

Depois, tenho mais duas versões do meu aplicativo: pro e trial com 2 packageName diferentes, que são 2 applicationId no código acima, para que eu possa fazer o upload dos dois para o Google Play. Ainda codifico na seção "main" e uso o getpackageName para alternar para a versão. Basta ir ao link que eu dei para detalhes.

Hai nguyen thanh
fonte
1

Existem duas maneiras mais simples, se uma não funcionar, tente a outra.

  1. Adicione dependência da biblioteca dentro da dependência dentro do arquivo build.gradle da biblioteca que você está usando e cole sua biblioteca em Bibliotecas externas.

OU

  1. Basta ir à sua pasta libs dentro da pasta do aplicativo e colar todos os seus arquivos .jar, por exemplo, arquivos de biblioteca lá. Agora, o truque é que agora vá para o arquivo settings.gradle e adicione esta linha "include ': app: libs'" after "include ': app '"Definitivamente funcionará ........... :)
Sudhanshu Gaur
fonte
1

No meu caso, usando o MAC OS X 10.11 e o Android 2.0, e fazendo exatamente o que Aqib Mumtaz explicou.

Mas, toda vez, recebi a seguinte mensagem: " Ocorreu um problema ao configurar o projeto ': app'.> Não é possível avaliar o módulo xxx: a configuração com o nome 'padrão' não foi encontrada ."

Descobri que o motivo desta mensagem é que o Android 2.0 não permite criar uma biblioteca diretamente. Então, decidi primeiro criar um projeto de aplicativo e depois modificar o build.gradle para transformá-lo como uma biblioteca.

Esta solução não funciona, porque um projeto de Biblioteca é muito diferente de um projeto de aplicativo.

Então, resolvi meu problema assim:

  • Primeiro, crie um aplicativo padrão (se necessário);
  • Em seguida, escolha 'Arquivo / Criar módulo'
  • Vá para o localizador e mova a pasta do módulo criada recentemente em seu diretório de estrutura

Continue com a solução proposta por Aqib Mumtaz.

Como resultado, a fonte da sua biblioteca será compartilhada sem a necessidade de duplicar os arquivos de origem a cada vez (foi uma heresia para mim!)

Esperando que isso ajude você.

Chrstph SLN
fonte