Programação Scala para Android

258

Eu segui o tutorial no Scala e Android com o Scala 2.7.3 final. O aplicativo Android resultante funciona, mas mesmo o aplicativo mais básico leva vários minutos (!) Para compilar e precisa de 900 kb compactados, o que é uma barreira para aplicativos móveis. Além disso, o IDE fica sem memória de vez em quando. Presumo que dexnão é feito para grandes bibliotecas como o scala-library.

  • Então, minha pergunta é: alguém realmente fez isso e existe alguma cura para isso?
Lemmy
fonte

Respostas:

128

Eu escrevi alguns aplicativos básicos para Android no Scala, nada muito épico. Não sendo um programador Java, sugeriram que eu use um "treeshake", um amigo me explicou que isso retira todas as bibliotecas desnecessárias dos arquivos jar .

Ainda não a documentei, mas descobri que outra pessoa já possui:

http://chneukirchen.org/blog/archive/2009/04/programming-for-android-with-scala.html

Proguard não é a única solução, você pode encontrar algo que se adapte ao seu fluxo de trabalho ou que seja mais adequado ao seu ambiente.

Além disso, o Google acaba de realizar o JACK, que lida com bastante redução dos tempos de compilação e memória, consulte https://source.android.com/source/jack.html


fonte
3
Obrigado! Vou ter que tentar isso. Eu me pergunto se ele pode ser usado com o Eclipse (usando o Scala e Plugins Android)
Lemmy
36
Lemmy - existe algum motivo para você não aceitar esta resposta? Talvez você tenha encontrado uma solução melhor?
Bostone
3
Na minha experiência, o Shake de Árvores não é bom o suficiente para a maioria dos códigos de escala não triviais. Apenas não é agressivo o suficiente.
James Moore
45

Agora você pode usar o plug-in Android do Gradle para criar aplicativos Android no Scala. Ele incorpora a ferramenta ProGuard para cortar a gordura do arquivo APK resultante, portanto, parece atender às suas necessidades.

https://github.com/jvoegele/gradle-android-plugin/wiki

Jason Voegele
fonte
Funciona bem! Nenhuma das soluções que eu tentei funcionou imediatamente, mas seu plugin Gradle me deu um feedback útil para que eu pudesse corrigir facilmente o que estava errado.
Mendelt
Jason, você ainda está trabalhando nisso? O último commit foi realizado há 9 meses e a nota recebeu versões superiores desde então.
precisa saber é o seguinte
Peter, o desenvolvimento foi interrompido devido ao fato de que Gradle agora é o sistema de compilação nativo para Android.
21413 Jason Voegele
22

Há também um plug-in para o construtor baseado em Scala sbt : sbt-android-plugin .

Jan Berkel
fonte
1
Este plugin não é compatível com as versões mais recentes do SBT. Você ainda está mantendo este plugin? Um plugin SBT que é compatível com as versões mais recentes deste o android-sdk-plugin .
DCKing
15

Eu verifiquei esta solução detalhada com o Eclipse 3.7, Scala 2.10 e o plug-in AndroidProguardScala v50:

https://stackoverflow.com/a/11084146/1287856

Tudo funciona bem. Um aplicativo de teste simples com classe de atividade principal com escala de apenas 38Kb. Projetos de bibliotecas são suportados. O programa é ativado ao exportar o projeto.

Mikaël Mayer
fonte
3
Isso parece incrível. Como são os tempos de construção com esta solução ao implantar em um dispositivo (em comparação com a implantação de um projeto Java Android comparável)?
evilcandybag
1
O tempo de compilação é de aproximadamente 10 segundos ao implantar em um dispositivo. Espero que um dia seja mais rápido.
Mikaël Mayer
6
Agora, leva cerca de 1 segundo com o último sdk e plug-in do Android, devido a alguma nova boa implementação de cache.
Mikaël Mayer
7

O desenvolvimento de aplicativos Android para Scala está em constante evolução. A melhor maneira atual de fazer isso parece para o SBT em conjunto com o android-sdk-plugin , que é mantido * e funciona bem para mim no meu projeto Scala / Android. Um exemplo um pouco recente que demonstra o uso deste plugin com o Scaloid já mencionado também pode ser encontrado .

Observe que esta pergunta é um exemplo típico de uma pergunta com respostas desatualizadas no Stack Overflow. Essa resposta provavelmente ficará desatualizada em algum momento também.

* Os outros projetos baseados no SBT mencionados neste tópico de resposta não parecem ter código escrito para eles nos últimos seis meses no momento da redação. Eles podem ter problemas de compatibilidade com as versões mais recentes do Scala e SBT.

DCKing
fonte
6

Se você usa o maven, use o android-scala-test como modelo de inicialização. Funciona muito bem para mim imediatamente.

O Scaloid é um wrapper de API do Android escrito em Scala que ajuda você a escrever seu programa Android no estilo Scala.

pocorall
fonte
4

Você pode usar o Scala no Android sem o SBT, construído externamente pela Gradle para criar aplicativos Android. https://github.com/yareally/android-scala-intellij-no-sbt-plugin

Gradle é uma ferramenta de construção mais nativa para android que o SBT.

Há um bom exemplo do conceito de solução para cliente e servidor Scala e da ferramenta de criação de gradientes como avanço para o ambiente de trabalho IntelliJ IDEA.

Grande avanço que as classes principais são comuns para cliente e servidor.

https://github.com/ghik/akkdroid

Bom tutorial para o IDEA e o plug-in android: http://fxthomas.github.io/android-plugin/

mikowiec
fonte
3

O maior problema do Scala no Android é o tempo de compilação.

Possivelmente, devido à classe Proguard, a remoção de compilações com o plug-in IDEA13 / Scala em um E5450 Xeon com 8GB de núcleo quádruplo (8 CPUs) com 8 GB pode levar dois minutos ou mais.

Eu simplesmente voltei para Java depois de concluir um grande projeto Scala Android, pois os tempos de compilação eram muito frustrantes.


fonte