Incluindo uma biblioteca / JAR em um projeto Android do Eclipse

130

Esta é uma pergunta em duas partes sobre como adicionar uma biblioteca de terceiros (JAR) a um projeto Android no Eclipse.

A primeira parte da pergunta é: quando tento adicionar um JAR (biblioteca) de terceiros ao meu projeto Android, primeiro encontro o problema de

Erro ao analisar XML: prefixo não acoplado

porque estou tentando usar uma classe desse JAR (e preciso do prefixo de alguma forma definido). O que está acontecendo?

Segundo, (depois de corrigir isso - a resposta é dada abaixo), meu aplicativo não funciona no Android e eu descobri através do depurador (LogCat) que a classe que estou tentando consumir não existe.

Causado por: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

Por que, quando não recebo erro de compilação ou vinculador no Eclipse, ele tem esse problema no emulador?

Essas duas perguntas são retóricas, pois eu mesmo vou respondê-las abaixo. Outras postagens neste fórum abordam o problema e em outros lugares há discussões, mas sinto que posso ser mais explicitamente útil para o próximo cara.

Russ Bateman
fonte

Respostas:

316

Agora, para o problema de classe ausente.

Sou desenvolvedor Java EE do Eclipse e há muitos anos que adiciono bibliotecas de terceiros por meio do mecanismo "User Library" no Build Path. Claro, existem pelo menos três maneiras de adicionar uma biblioteca de terceiros, a que eu uso é a mais elegante, na minha humilde opinião.

Isso não funcionará, no entanto, para Android, cuja Dalvik "JVM" não pode manipular uma classe comum compilada em Java, mas deve convertê-la para um formato especial. Isso não acontece quando você adiciona uma biblioteca da maneira que costuma fazer.

Em vez disso, siga as instruções (amplamente disponíveis) para importar a biblioteca de terceiros e, em seguida, adicioná-la usando o Build Path (que a torna conhecida no Eclipse para fins de compilação). Aqui está o passo a passo:

  1. Faça o download da biblioteca para o seu sistema de desenvolvimento host.
  2. Crie uma nova pasta, libs , no seu projeto Eclipse / Android.
  3. Clique com o botão direito do mouse em libs e escolha Importar -> Geral -> Sistema de arquivos e, em seguida, Avançar, navegue no sistema de arquivos para encontrar o diretório pai da biblioteca (por exemplo: para onde o fez o download).
  4. Clique em OK, depois clique no nome do diretório (não na caixa de seleção) no painel esquerdo e, em seguida, verifique o JAR relevante no painel direito. Isso coloca a biblioteca em seu projeto (fisicamente).
  5. Clique com o botão direito do mouse em seu projeto, escolha Build Path -> Configure Build Path, clique na guia Libraries, Add JARs ..., navegue até o novo JAR no diretório libs e adicione-o. (Aliás, é o momento em que seu novo JAR é convertido para uso no Android.)

NOTA

A etapa 5 pode não ser necessária, se a biblioteca já estiver incluída no seu caminho de construção. Apenas certifique-se de que a sua existência primeiro antes de adicioná-lo.

O que você fez aqui realiza duas coisas:

  1. Inclui um JAR convertido em Dalvik em seu projeto Android.
  2. Disponibiliza as definições de Java para o Eclipse para localizar as classes de terceiros ao desenvolver (ou seja, compilar) o código-fonte do seu projeto.
Russ Bateman
fonte
Russ, você provavelmente deveria começar outra pergunta em separado. Essa "resposta" parece meio estranha aqui.
Paul Gregoire
3
Então, reescrevi partes da pergunta um pouco. Eu resisti à tentação de fazer a coisa mais fácil (o que você sugere aqui) porque eu realmente acho que os dois problemas surgem ao tentar adicionar uma biblioteca de terceiros e estou apostando que qualquer um que tenha o segundo problema provavelmente terá o primeiro também. Obrigado.
Russ Bateman
Eu gostaria que houvesse algo mais explícito sobre isso nos documentos formais do Android (ainda não o encontrei) e que outras respostas em outros fóruns tenham chegado, mas nunca vislumbre o problema. Observe que, no BlackBerry, esse mesmo problema é um pesadelo enorme, sem ninguém dando informações confiáveis ​​sobre como resolvê-lo - sem saber o que farei lá.
Russ Bateman
2
Olá, @RussBateman Tentei as etapas que você mencionou acima e foi capaz de incluir com êxito o jar da biblioteca no meu projeto Android e, portanto, as classes da biblioteca estavam acessíveis ao meu projeto no momento da compilação. no meu console: "A conversão para o formato Dalvik falhou com o erro 1" .. e meu projeto não foi iniciado!
Zeba
Sob certas circunstâncias, isso não funciona ... Não me lembro exatamente o que fiz, excluí a pasta libs, a li ... agora fiz tudo o que você disse, adicione libs, importe o jar, adicione ao build path .. erros do compilador desapareceram, mas ainda obtém a exceção de tempo de execução que a classe não foi encontrada :(
Ixx
20

Verifique se os seus jars de terceiros estão na pasta "libs" dos projetos e serão colocados no .apk quando você empacotar o aplicativo. Você pode ver erros de tempo de execução no dispositivo se algo no jar não for suportado, mas, além disso, tive grande sucesso com isso.

Paul Gregoire
fonte
1
É tudo sobre a experiência, eu tive o mesmo problema antes :)
Paul Gregoire
Obrigado, senhor, mas é uma pena ver que a pasta libs precisa da cópia de arquivos Jar externos que já temos no repositório Maven ou em algum outro lugar.
ASGs
1
Infelizmente, isso não funciona mais automaticamente, você também precisa dizer ao eclipse para incluir as bibliotecas nos arquivos do pacote.
Neil Townsend
Quando isso mudou? Esta é uma grande mudança para o que estamos acostumados.
Paul Gregoire
5

Configurando um Projeto de Biblioteca

Um projeto de biblioteca é um projeto Android padrão, portanto, você pode criar um novo da mesma maneira que faria com um novo projeto de aplicativo.

Ao criar o projeto da biblioteca, você pode selecionar qualquer nome de aplicativo, pacote e definir outros campos, conforme necessário, conforme mostrado na figura 1.

Em seguida, defina as propriedades do projeto para indicar que é um projeto de biblioteca:

No Package Explorer, clique com o botão direito do mouse no projeto da biblioteca e selecione Propriedades. Na janela Propriedades, selecione o grupo de propriedades "Android" à esquerda e localize as propriedades da Biblioteca à direita. Marque a caixa de seleção "é biblioteca" e clique em Aplicar. Clique em OK para fechar a janela Propriedades. O novo projeto agora está marcado como um projeto de biblioteca. Você pode começar a mover o código-fonte e os recursos para ele, conforme descrito nas seções abaixo.

koke
fonte
4

Se você estiver usando a versão 22 do ADT, precisará verificar as dependências do Android e as bibliotecas privadas do Android na guia Ordem e exportação no caminho de construção do projeto

ajaykoppisetty
fonte
2

Primeiro, o problema do prefixo ausente.

Se você consumir algo em seu arquivo de layout proveniente de terceiros, também poderá ser necessário consumir seu prefixo, algo como "droidfu:", que ocorre em vários locais na construção XML abaixo:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

Isso sai do JAR, mas você também precisará adicionar o novo "xmlns: droidfu"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

ou você recebe o erro de prefixo ilimitado. Para mim, houve uma falha ao copiar e colar todo o exemplo fornecido das páginas da biblioteca de terceiros.

Russ Bateman
fonte
1

Erro ao analisar XML: prefixo não acoplado

O recurso '/ playteddy / res' não existe.

Eu obtive os dois erros acima e finalmente resolvi.

Clique com o botão direito do mouse em seu projeto -> propriedades -> caminho de construção java -> googleadmobadsdk (selecione e coloque-o no topo) e execute e resolva o problema. Foi resolvido meu erro de tempo de execução.

sujan
fonte
0

Coloque a fonte em uma pasta fora do seu espaço de trabalho. Clique com o botão direito do mouse no explorador de projetos e selecione "Importar ..."

Importe o projeto no seu espaço de trabalho como um projeto Android. Tente compilá-lo e verifique se está marcado como um projeto de biblioteca. Verifique também se ele é compilado com o suporte da API do Google. Caso contrário, você receberá erros de compilação.

Em seguida, clique com o botão direito do mouse no seu projeto principal no explorador de projetos. Selecione propriedades e selecione Android à esquerda. Na seção da biblioteca abaixo, clique em "Adicionar".

A biblioteca mapview-balloons agora deve estar disponível para adicionar ao seu projeto.

Leander
fonte
0

Vá para construir o caminho no eclipse, clique em ordem e exportação, verifique a biblioteca / jar e clique no botão para cima para movê-lo para o topo da lista e compilá-lo primeiro.

Sam Adamsh
fonte