SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Motorola Mobility


                                       Peter van der Linden
                               Evangelista da tecnologia Android
                    Plataformas e serviços para desenvolvedores

                                           Brasil - #appsum11br




Gráficos cada vez mais rápidos:
utilização de NDK e Renderscript
MOTODEV App Summit 2011                                                                       Page 2




1      INSTALANDO AS FERRAMENTAS

2      ESCREVA UM CÓDIGO C

3      CRIE UM CÓDIGO C

4      CHAMANDO C A PARTIR DE JAVA (O JNI)

5      RESUMO - Encerrando, Controle de qualidade




                                                    © 2011 Motorola Mobility, © 2011Versão 1.0
                                                                              Inc.  Motorola Mobility, Inc.
MOTODEV App Summit 2011                              Page 3




POR QUE CÓDIGOS C/C++ NO ANDROID?



        • Open GL

        • Desempenho

        • Portar!




                                © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                Page 4



Limitações C++ do NDK

 • Originalmente para escrever partes de desempenho
   crítico de código em C
   • Você não precisa de abstração OOP para isso (e
       a Dalvik VM é bastante rápida, com a compilação JIT
       desde 2.2)

 • O suporte de C++ é um tanto restrito
   • exceções não são suportadas
   • bugs conhecidos em invocações do
      construtor/destrutor estáticas

 • Assim, é mais provável que o código NDK seja escrito
   em C do que em C++
                                                  © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                   Page 5




Arquiteturas de CPU SUPORTADADAS
    • o NDK suporta dois conjuntos de instruções ARM:
          • ARMv5TE (inclui instruções Thumb-1). Esse é o target
            padrão e o código compilado para ele será executado em
            todos os dispositivos com Android baseado em ARM.
            Escolha outro target, mudando uma linha no makefile do
            Application.mk.
          • O ARMv7-A (inclui instruções Thumb-2 e VFPv3-D16,
            com suporte opcional para instruções NEON/VFPv3-D32).
            O código compilado para ARMv7-A funcionará apenas em
            dispositivos como o Verizon Droid ou Motorola XOOM que
            possuem uma CPU v7. O código para NEON só
            funcionará em um ARMv7 com suporte para NEON.

    • Há uma terceira arquitetura "em construção"
      (experimental, sem suporte):
          • conjunto de instruções x86
                                                                     © 2011 Motorola Mobility, Inc.
INSTALANDO AS FERRAMENTAS


 MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings,   Versão 1.0
 LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola
 Mobility, Inc. Todos os direitos reservados.
MOTODEV App Summit 2011                                                Page 7




Baixando o Native Development Kit

 • Verifique a compatibilidade: XP ou Vista, MacOS X 10.5,
   Ubuntu

 • Baixe o arquivo zip de 50 MB ou tar.bz2 em:
        http://developer.android.com/sdk/ndk/index.html

 • Faça a descompactação dele em qualquer lugar, lembre-se
   de onde em $NDK
       export NDK=~/android-ndk-r5b

 • Requer o GNU make e GNU awk! Usuários do Windows -
   instalar o Cygwin 1.7 ou mais recente
                                                  © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                              Page 8




Usuários do Windows
 • Baixe e instale o Cygwin 1.7 ou mais recente
 • Ferramentas de linha de comando Unix/Linux para
   usuários do Windows
        http://cygwin.com




                                                © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                Page 9




Dicas para Windows e MacOS X

• Não use nomes de caminhos com espaços entre eles! Em
  qualquer lugar!
• O Cygwin instala somente os pacotes básicos.
• Você precisa dos pacotes de desenvolvimento. É simples
  instalar todo o branch “Devel”.
    1. Execute o setup.exe.
    2. Clique na palavra “Default” (Padrão) próxima ao nó
       da raiz “Devel”.
    3. “Default” altera para “Install” para o nó Devel.
    4. Clique em “next” (Avançar) para instalar. Vá almoçar
       enquanto a instalação é realizada.
    5. Deixe-o criar um ícone do console cygwin na sua área
       de trabalho.
    6. Digite "make -v" no console cygwin para verificar se
                                                  © 2011 Motorola Mobility, Inc.

       está tudo OK.
MOTODEV App Summit 2011                                                Page 10




Descompacte o Native Development Kit
• Contem sete pastas, e uma série de coisas para ler:




                                                  © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                   Page 11



Pastas NDK




 • build: 4 pastas de scripts awk e shell, makefiles para compilar os seus
   arquivos C/C++
 • docs: cerca de 20 arquivos de texto (Perguntas frequentes sobre o NDK);
   acesse pelo navegador o arquivo documentation.html
 • plataforms: .h e arquivos de sistema library.so para os vários níveis de API
 • samples: uma série de exemplos de funcionamento
 • sources: algumas fontes para os elementos relacionadas ao sistema
 • tests: scripts para testar o próprio NDK. Provavelmente aqui por engano.
 • toolchains: toolchains de cross-compiler


                                                                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                           Page 12




Adicionar suporte de C/C++ ao Eclipse

• O Eclipse tem um plug-in para C/C++, assim como para o Android

• Consiga isso usando o Eclipse
        Help (Ajuda) > Install new software (Instalar novo software)

• Digite http://download.eclipse.org/releases/helios/ no campo “work
  with” (trabalhar com) (ou qualquer versão que você usa)

• Advertências comuns sobre proxies de rede no trabalho (defina-os
   em MOTODEV Studio > Preferences (Preferências) > Network Conn.
  (Conexão de rede)

• Clique em Programming Langs (Linguagens de programação) >
  C/C++ Development Tools (Ferramentas de desenvolvimento)

                                                              © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                 Page 13




    • Há um plugin para C/C++, assim como para o
    Android

    • Consiga isso usando o Eclipse
           Help (Ajuda)> Install new software
    (Instalar novo software)




                                                   © 2011 Motorola Mobility, Inc.
Escreva seu código C

 MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings,
 LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola
 Mobility, Inc. Todos os direitos reservados.
MOTODEV App Summit 2011                                                           Page 15




Abordagem geral

      •Comece com um aplicativo Android em Java, e adicione
      pedaços NDK a ele.

      •Coloque sua fontes C/C++ nativas em $PROJECT/jni:

      •Crie o seu código nativo em bibliotecas (libraries).

      •Seu código Java do Android pode chamar código nessas
      bibliotecas nativas.

      •O código nativo também pode chamar de volta em Java, e
      acesso objetos Java.




                                                              © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                         Page 16




                          Criar o projeto Android
                          da maneira usual




                                           © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                        Page 17




Crie a pasta jni para seu projeto

       •    Destaque o projeto Eclipse que usará o código nativo

       •    O nome do seu pacote é usado para acessar o código
            nativo, então mantenha-o curto e simples, por exemplo,
            "com.greet" para propósitos de treinamento

       •    File (Arquivo) > New (Novo) > Folder (Pasta)
                 • atribua-lhe o nome de "jni"

       •    Dentro dessa pasta jni recém-criada, nós adicionaremos
               • um makefile
               • alguns arquivos C

                                                           © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                        Page 18




Adicione dois arquivos à pasta jni em seu projeto

       • File (Arquivo) > New (Novo) > Other (Outro) ...
       • Selecione General (Geral), File (Arquivo) e, em
         seguida, procurar
       • Escolha a pasta jni, com o nome de
         "Android.mk“ > Finish (Finalizar)
       • Repita, criando um arquivo "myhello.c", também na
         pasta jni
       • Isso oferece a você
              • jni/Android.mk
              • jni/myhello.c

                                                           © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                   Page 19




Preencha arquivos na pasta jni
 Criando a pasta jni em seu projeto

    saud
    ar




                                      © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                           Page 20




Criando mkfile na pasta jni




                              © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                      Page 21




Preencha o makefile Android.mk
       • Edite o arquivo jni/Android.mk que você acabou de criar
       • Coloque essas palavras mágicas no makefile


        LOCAL_PATH := $ l my-d r
                       (cal   i)

        i lude $
         nc     (CLEAR_VARS)

        # nosso arqu vo fon e e a b b io
                     i     t       i l teca c iada
                                             r
        # a par i le
               t rde
        LOCAL_M O D ULE : he lo
                             = l
        LOCAL_SRC_FILES : he lo c
                              = l .

        i lude $
         nc     (BUILD_SHARE D_LIBRARY)



                                                         © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                 Page 22




Desvio em relação ao make
       • O make foi criado por Stu Feldman em 1977, no Bell Labs
       • Em 2003, o Dr. Feldman recebeu o prêmio ACM Software System
         Award pela criação dessa ferramenta amplamente difundida.
       • Você não ficou sabendo disso por mim, mas a tradição de
         software diz que...



        # Cada comando que segue a linha de dependência,
        # ou seja, o TARGET à esquerda, deve ser indentado por um
        # caracter TAB.

        target: componente-a-construir
            <TAB>comandos-para-construi-lo



                                                                    © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                              Page 23




Crie o código C na pasta jni

       •Edite o arquivo jni/myhello.c que você acabou de criar
       •Coloque essas palavras mágicas no arquivo C
       •Usa o objeto JNIEnv para criar uma string de Java a partir
       de um literal


        #incluir <string.h>
        #incluir <jni.h>

        jstring Java_com_greet_MyActivity_myCFunction
                    (JNIEnv* env, jobject javaThis) {
          return (*env)->NewStringUTF(env, "Hello from native
        code!");
        }
                                                                 © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                         Page 24




Código C explicado
      Quando o JVM invoca uma função nativa, ele passa
      • um indicador JNIEnv (estrutura que tem a interface da JVM para C)
      • um ponteiro jobject (o objeto "this")
      • quaisquer argumentos de Java declarados pelo método Java.

      Esses tipos vêm de #include <jni.h> (veja em "plataforms")
      Seu método de C deve ser escrito para esperar esses argumentos
      O método C é chamado de "Java“_classname_activity_methodname



       #incluir <string.h>
       #incluir <jni.h>

       Jstring Java_com_greet_MyActivity_myCFunction
                   (JNIEnv* env, jobject javaThis) {
         return (*env)->NewStringUTF(env, "Hello from native code!");
       }
      • ... parece, mas não é, um vazamento de memória?
                                                                            © 2011 Motorola Mobility, Inc.
Crie um código C

 MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings,
 LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola
 Mobility, Inc. Todos os direitos reservados.
MOTODEV App Summit 2011                                                    Page 26



Chamadas entre linguagens



    •O Android segue o caminho normal para falar entre
    Java e C

    •JNI – Java Native Interface

    •Link para documentação do JNI
           http://java.sun.com/docs/books/jni/

    •Isso inclui um livro completo, um tutorial, exemplos, etc


                                                      © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                  Page 27



Crie uma biblioteca C
  • Abra uma janela de terminal, e cd para a pasta do projeto jni
  • Use o script "NDK-build" do diretório NDK (apenas um invólucro GNU
    Make) (pode colocar $NDK em seu caminho, se você quiser)
  • O script compila o código C, o transforma em uma biblioteca
    compartilhada (“shared library”)
  • Move o libhello.so para um novo projeto de pasta libs/armeabi




                                                                    © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                      Page 28



Abordagem geral para a construção de uma biblioteca

    • Salve arquivos no Eclipse
    • Abra uma janela de terminal e cd na pasta jni do seu projeto
    • Execute o script NDK-build para transformar o seu código em C
      em um arquivo .so
    • Essa lib *. so será adicionada no arquivo do aplicativo APK.
    • File (Arquivo) > Refresh (Atualizar) no Eclipse (para sincronizar
      com o sistema de arquivos)

 $ cd MYECLIPSEPROJECT/ i
                      jn
 $ $NDK/ndk-bu ld
              i

 Co mpi e thumb : he l <= helo
       l             lo      l .c
 SharedL ibrary :l bhe l
                  i lo.so
 Ins l
    tal     :l b l .so => l /armeab /ibhe lo
             i he lo      ibs      il l .so


                                                                          © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                     Page 29



CRIE SUA BIBLIOTECA: resumo


 • O Eclipse não compila seu código NDK, o GNU Make sim

 • O plugin C/C++ dá-lhe as cores de sintaxe e de edição (apenas)

 • Execute o "NDK-build " script após cada edição de seu código C

 • Depois clique em File > Refresh, (F5), para manter o Eclipse em
   sincronia com seus arquivos nativos




                                                       © 2011 Motorola Mobility, Inc.
O Lado Java do JNI

 MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings,
 LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola
 Mobility, Inc. Todos os direitos reservados.
MOTODEV App Summit 2011                                                          Page 31



Código Java que chama para o código nativo

  • Comece com o aplicativo de base criado no Eclipse

package com.greet;

impor andro
     t     id.app.Actvt ;
                    iiy
impor andro
     t     id.os.Bund ;
                     le

pub ic cl
   l     ass MyAct i y ex
                  ivt tends Ac ivt {
                                t iy
  / * Chamado quando a Actvt é cr
   *                        iiy    iada pe p i ra vez. *
                                          la rmei       /
   @ Over ide
          r
  pub i vo onCreate
      lc id           (Bund savedIns
                            le        tanceSta e) {
                                              t
     super .onCreate(savedInstanceSta ;
                                     te)
     setContentV iew(R.layout in)
                             .ma ;
  }
}

                                                            © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                               Page 32



Adicione o carregamento da biblioteca

  • Adicione a chamada para carregar a nossa biblioteca
    nativa libhello.so
  • o nome deve corresponder ao nome da biblioteca
    sem “lib” e “.so”
  • assim libhello.so é "hello"
s t c{
 ta i
   Sys em.
      t loadLibrary "he l " ;
                   ( lo)
}




                                                 © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                          Page 33



Adicione a declaração da função nativa

  • Adicione a declaração de protótipo da função nativa

  • No lado C, ela tem dois argumentos explícitos, um envp, um this

  • Mas no lado Java, esses argumentos estão implícitos


 p i te na i Str myCFunct )
  r va    t ve ing       ion( ;




                                                            © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                          Page 34



Adicione a chamada para a função nativa

    • Nós pegaremos a string de C e exibiremos alertas para o usuário
    (usando um “toast”).


impor s t c andro .
     t ta i       id widget Toast *
                           .     .;
impor andro
     t      id.widget.Toas ;
                          t

   ...

  Sr
   t ing msg = myCFunct )
                       ion( ;
  Toas .
       t makeText th msg, LEN GTH_LO N G).show()
                 ( is,                          ;




                                                            © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                        Page 35



Juntando tudo
 package com.greet
                 ;

 impor andro .app.Ac ivt ;
      t     id      t iy
 impor andro .os Bund ;
      t     id .     le
 impor s i andro d.w
      t tatc     i idget Toast *
                          .   .;
 impor andro .w
      t     id idget.Toas ;
                         t

 pub ic c
    l lass MyAct v ty ex
                ii      tends Ac ivt {
                                t iy

 s t c { Sys
  ta i      tem.loadLibrary " l " ;}
                           ( he lo )

 pr te natve S r
   iva   i    t ing myCFunct )
                            ion( ;

     @ Override
     pub i vo onCreate(Bund savedIns
        l c id               le        tanceSta {
                                               te)
       super.onCreate(savedInstanceState);
       setConten iew(R.
                tV      layout in)
                              .ma ;

         Sr
          t ing msg = myCFunct )
                             ion( ;

         Toas .makeText th ,msg, LENGT H_LON G).show()
             t         ( is                           ;
     }
 }

                                                          © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                        Page 36




                          © 2011 Motorola Mobility, Inc.
Resumo
MOTODEV App Summit 2011                                                   Page 38




O COMEÇO

 Este pode ser um belo começo para um longo caminho

 • http://groups.google.com/group/android-ndk/topics

 • http://java.sun.com/docs/books/jni/

 • http://developer.android.com/sdk/ndk/index.html




                                                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                Page
                                                                                       Página39




Renderscript
• Nova API com gráficos 3D de alto
  desempenho
• Foi usada no Froyo para papéis de
  parede animados
• É usada no Honeycomb para as apps
  Books e YouTube
• O Honeycomb apresenta o
  Renderscript como uma API pública


• Para executar códigos críticos em que
  as APIs de estrutura tradicionais Open
  GL ES não são rápidas o suficiente!
                                           © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc.
                                                                   © 2011 Versão 1.0
MOTODEV App Summit 2011                                               Page
                                                                       Página40



Exemplo de renderscript




                           © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc.
                                                   © 2011 Versão 1.0
MOTODEV App Summit 2011                                               Page
                                                                       Página41



App Books e Renderscript




                           © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc.
                                                   © 2011 Versão 1.0
MOTODEV App Summit 2011                                                                     Page
                                                                                             Página42




API do Renderscript

• Uma API de "computação" para localizar pontos de movimento em 3D
• Um API de "renderização" para desenhar texturas sobre os pontos
• Uma linguagem de script baseada em C para acessar essa API
• Único objetivo: espremer até a última gota de desempenho gráfico!
• Abordagem: a API é uma fina camada sobre os recursos que são
  suportados pelo hardware
• http://community.developer.motorola.com/t5/MOTODEV-
  Blog/Introduction-to-Renderscript/ba-p/12136




                                                 © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc.
                                                                         © 2011 Versão 1.0
MOTODEV App Summit 2011                                                        Page
                                                                                Página43




API do Renderscript

• As ferramentas de construção do Android compilam seu arquivo .rs do
  Renderscript para bytecode intermediário.
• e o empacota no arquivo .apk do seu aplicativo.
• No dispositivo, o bytecode é compilado (durante a execução - JIT) para
  código de máquina, que é otimizado para o dispositivo exato em que
  está sendo executado
• O código de máquina é armazenado em cache para uso futuro
• Isso elimina a necessidade de destinar uma arquitetura específica
  durante o processo de desenvolvimento. Excelente!




                                                            © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                     Page
                                                                                            Página44

Exemplo de arquivo .rs (a partir de exemplos do
Honeycomb)
    #pragma rsjava_package_name(com.andro . s l
                                           id r .he lowor )
                                                        ld
    # lude "
     inc    rs_graph cs rsh"/ Headers com APIs g f cas
                    i .     /                    rá i

    / gTouchX e gTouchY são var
    /                            iáve que serão obt
                                     is            idas a ravés de
                                                         t
    / re lexão para o uso pe API java Podemos usá- para no ii r
    / f                     la        .            las        tf ca
    / o sc ip de eventos de toque.
    /      r t
    i t gTouchX;
     n
    i t gTouchY;
     n

    / Esse éi
     /        nvocado automaticamente quando o scr t é c i
                                                  ip    rado
    vo int ){
       id i(
        gTouchX = 50 ;
                    .0f
        gTouchY = 50 ;
                    .0f
    }

    i troo (
     n     t intlaunchID) {
       / Apaga a cor do p
        /                 lano fundo
       rsgClearCo (0.0 , 0 f 0.0 , 0 f ;
                    lor f .0 , f .0 )
       / In r o run ime que a cor da fonte deve t
        / fo ma         t                        er
       rsgFontCo r .0f 1 f 1 0f 1 f ;
                   lo (1 , .0 , . , .0 )
       //Nos apresenta ao mundo esboçando uma saudação
       / no loca em que o usuár o tocou a te
        /        l               i          la
       rsgDrawText "He lo Wor d! , gTouchX, gTouchY)
                      ( l      l "                  ;

        / O va or de re
         /    l        tornoin r ao RS aprox mada mente quantas vezes
                              fo ma         i
        / redesenhar nesse caso 20 ms
         /           ;                                                         Versão 1.0
                                                                        © 2011 Motorola Mobility, Inc.
        re rn 20;
          tu
    }
MOTODEV App Summit 2011                                                        Page 45




                            Perguntas?
                                  @motodev
                                  @motodevbr

                              Brasil - #appsum11br
                            Argentina - #appsum11ar
                             México - #appsum11mx

                               Atendimento on line
                              Terca-feira, 2 de junho
                          14 hs Sao Paulo, Buenos Aires
                             12 hs Cidade do Mexico
                                                          © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                   Page 46




                          obrigado



                                     © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                                     Page 47




Licenças

Os exemplos de código fonte exibidos nessa apresentação podem ser licenciados sob a Licença
   Apache, Versão 2 da seguinte maneira:


    Copyright © 2010, Android Open Source Project. Todos os direitos reservados, exceto onde
    expressamente indicado o contrário.


    Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar esse arquivo exceto
    em conformidade com a Licença. Você pode obter uma cópia da Licença em
    http://www.apache.org/licenses/LICENSE-2.0.


    A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é
    distribuído "NA CONDIÇÃO QUE SE ENCONTRA", SEM GARANTIAS OU CONDIÇÕES DE
    QUALQUER TIPO, sejam expressas ou implícitas. Consulte a Licença para o idioma específico que
    governam as permissões e limitações sob a Licença.




                                                                                        © 2011 Motorola Mobility, Inc.
MOTODEV App Summit 2011                                                                                                   Page 48




Licenças
Os exemplos de código fonte exibidos nessa apresentação podem ser licenciados sob a Licença
   BSD, da seguinte maneira:


Copyright © 2010-2011, Motorola, Inc. Todos os direitos reservados exceto quando expressamente indicado.
A redistribuição e utilização em formas de fonte e binário, com ou sem modificação, são permitidas de acordo com as
    seguintes condições:
  As redistribuições de código fonte devem manter o aviso de direitos autorais acima, esta lista de condições e a seguinte
   isenção de responsabilidade.
  As redistribuições em formulários binários devem reproduzir o aviso de copyright acima, esta lista de condições e a
   seguinte isenção de responsabilidade na documentação e/ou outros materiais fornecidos com a distribuição.
  O nome da Motorola, Inc. e os nomes de seus colaboradores não podem ser usados para endossar ou promover
   produtos derivados desse software sem permissão prévia por escrito.


ESTE SOFTWARE É FORNECIDO PELOS DETENTORES E COLABORADORES "COMO TAL" E QUALQUER
   GARANTIA EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO LIMITADO A, AS GARANTIAS DE
   COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UMA FINALIDADE ESPECÍFICA. EM NENHUM CASO A TITULAR DO
   DIREITO OU CONTRIBUINTES DEVEM SER RESPONSÁVEIS POR QUAISQUER DANOS DIRETOS, INDIRETOS,
   ESPECIAIS, EXEMPLARES OU CONSEQUENTES (INCLUINDO, MAS NÃO SE LIMITANDO À AQUISIÇÃO DE
   BENS OU SERVIÇOS, PERDA DE USO, DADOS OU LUCROS; OU INTERRUPÇÃO DE NEGÓCIOS) CAUSADOS E
   SOB QUALQUER TEORIA DE RESPONSABILIDADE, SEJA EM CONTRATO, RESPONSABILIDADE OBJETIVA OU
   (INCLUINDO NEGLIGÊNCIA OU NÃO) DECORRENTE DE QUALQUER MANEIRA DO USO DO SOFTWARE,
   MESMO QUE DA POSSIBILIDADE DE TAIS DANOS.



                                                                                                      © 2011 Motorola Mobility, Inc.

Mais conteúdo relacionado

Mais procurados

Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoRegis Magalhães
 
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Édipo Souza
 
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...Nilson Oliveira
 
Projetos Mono e Moonlight
Projetos Mono e MoonlightProjetos Mono e Moonlight
Projetos Mono e MoonlightPedro Alves Jr.
 
Desenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_DbDesenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_DbFlávio Lisboa
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsFelipe Santos
 
Pesl introducao a programacao para android
Pesl   introducao a programacao para androidPesl   introducao a programacao para android
Pesl introducao a programacao para androidRegis Claus
 
Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01Gustavo Zimmermann
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisGeorge Gastaldi
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipseFilipe Bezerra Sousa
 
27072010221224.introdução a java aula 1
27072010221224.introdução a java   aula 127072010221224.introdução a java   aula 1
27072010221224.introdução a java aula 1bibliotecadobarao
 

Mais procurados (16)

RAD Studio 10.2 Tokyo
RAD Studio 10.2 TokyoRAD Studio 10.2 Tokyo
RAD Studio 10.2 Tokyo
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
 
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...Criando aplicativos multimídia com director  7   tambein engloba versoes 5, 6...
Criando aplicativos multimídia com director 7 tambein engloba versoes 5, 6...
 
Projetos Mono e Moonlight
Projetos Mono e MoonlightProjetos Mono e Moonlight
Projetos Mono e Moonlight
 
Desenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_DbDesenvolvendo em Zend Framework: Ênfase no Zend_Db
Desenvolvendo em Zend Framework: Ênfase no Zend_Db
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com Jenkins
 
Pesl introducao a programacao para android
Pesl   introducao a programacao para androidPesl   introducao a programacao para android
Pesl introducao a programacao para android
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01Desenvolvimento Android: Aula 01
Desenvolvimento Android: Aula 01
 
Educação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NETEducação e certificação na Plataforma .NET
Educação e certificação na Plataforma .NET
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 Florianópolis
 
Você confia nas suas aplicações mobile?
Você confia nas suas aplicações mobile?Você confia nas suas aplicações mobile?
Você confia nas suas aplicações mobile?
 
Java e Software Livre
Java e Software LivreJava e Software Livre
Java e Software Livre
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 
27072010221224.introdução a java aula 1
27072010221224.introdução a java   aula 127072010221224.introdução a java   aula 1
27072010221224.introdução a java aula 1
 

Destaque

Projeto de reconhecimento de placas (2)
Projeto de reconhecimento de placas (2)Projeto de reconhecimento de placas (2)
Projeto de reconhecimento de placas (2)Guilherme Stéfano
 
Código de ética do profissional de Biblioteconomia
Código de ética do profissional de BiblioteconomiaCódigo de ética do profissional de Biblioteconomia
Código de ética do profissional de BiblioteconomiaSérgio Amaral
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Cristiano Rafael Steffens
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoCristiano Rafael Steffens
 
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...Richiely Paiva
 
Apresentação visão computacional
Apresentação visão computacionalApresentação visão computacional
Apresentação visão computacionalEdvaldo Araújo
 

Destaque (7)

Open Cv Tutorial Ii
Open Cv Tutorial IiOpen Cv Tutorial Ii
Open Cv Tutorial Ii
 
Projeto de reconhecimento de placas (2)
Projeto de reconhecimento de placas (2)Projeto de reconhecimento de placas (2)
Projeto de reconhecimento de placas (2)
 
Código de ética do profissional de Biblioteconomia
Código de ética do profissional de BiblioteconomiaCódigo de ética do profissional de Biblioteconomia
Código de ética do profissional de Biblioteconomia
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em Vídeo
 
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
 
Apresentação visão computacional
Apresentação visão computacionalApresentação visão computacional
Apresentação visão computacional
 

Semelhante a Gráficos cada vez mais rápidos utilização de NDK e Renderscript

Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Marcelo Marques Gonçalves
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesWilliam S. Rodriguez
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesMotorola Mobility - MOTODEV
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPFabio Godoy
 
Treinamento Android Nooclix
Treinamento Android NooclixTreinamento Android Nooclix
Treinamento Android NooclixIury Teixeira
 
Programando symbian aula_1
Programando symbian aula_1Programando symbian aula_1
Programando symbian aula_1Talita Carvalho
 
Android: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelAndroid: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelCampus Party Brasil
 
O Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não WindowsO Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não WindowsAlessandro Binhara
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
Hello world hybrid apps oportunidades com ionic framework v2
Hello world hybrid apps  oportunidades com ionic framework v2Hello world hybrid apps  oportunidades com ionic framework v2
Hello world hybrid apps oportunidades com ionic framework v2Ricardo Netto - MCP, MSP
 
Desenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGapDesenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGapMayron Cachina
 
Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1Afonso Machado
 
Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - BásicoHugoDalevedove
 

Semelhante a Gráficos cada vez mais rápidos utilização de NDK e Renderscript (20)

Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testes
 
Phonegap
PhonegapPhonegap
Phonegap
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APP
 
Treinamento Android Nooclix
Treinamento Android NooclixTreinamento Android Nooclix
Treinamento Android Nooclix
 
Programando symbian aula_1
Programando symbian aula_1Programando symbian aula_1
Programando symbian aula_1
 
.NET Open Source
.NET Open Source.NET Open Source
.NET Open Source
 
Titanium appacelerator
Titanium appaceleratorTitanium appacelerator
Titanium appacelerator
 
Android: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelAndroid: Conheça o Futuro Inevitável
Android: Conheça o Futuro Inevitável
 
Introdução Ao Desenvolvimento Para Iphone
Introdução Ao Desenvolvimento Para IphoneIntrodução Ao Desenvolvimento Para Iphone
Introdução Ao Desenvolvimento Para Iphone
 
O Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não WindowsO Projeto Mono: Aplicações .NET para sistemas não Windows
O Projeto Mono: Aplicações .NET para sistemas não Windows
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Int305 projeto mono-final
Int305 projeto mono-finalInt305 projeto mono-final
Int305 projeto mono-final
 
Hello world hybrid apps oportunidades com ionic framework v2
Hello world hybrid apps  oportunidades com ionic framework v2Hello world hybrid apps  oportunidades com ionic framework v2
Hello world hybrid apps oportunidades com ionic framework v2
 
Java
JavaJava
Java
 
Desenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGapDesenvolvendo para Android com PhoneGap
Desenvolvendo para Android com PhoneGap
 
Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1Introdução ao android - siecomp 2015.1
Introdução ao android - siecomp 2015.1
 
Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - Básico
 
Introdução C#
Introdução C#Introdução C#
Introdução C#
 

Mais de Motorola Mobility - MOTODEV

HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureMotorola Mobility - MOTODEV
 
Getting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & BeyondGetting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & BeyondMotorola Mobility - MOTODEV
 
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript Motorola Mobility - MOTODEV
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsMotorola Mobility - MOTODEV
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Motorola Mobility - MOTODEV
 
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuarioCómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuarioMotorola Mobility - MOTODEV
 
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...Motorola Mobility - MOTODEV
 

Mais de Motorola Mobility - MOTODEV (20)

HTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the FutureHTML5 vs Native Android: Smart Enterprises for the Future
HTML5 vs Native Android: Smart Enterprises for the Future
 
The Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. WebThe Enterprise Dilemma: Native vs. Web
The Enterprise Dilemma: Native vs. Web
 
Kill the Laptop!
Kill the Laptop!Kill the Laptop!
Kill the Laptop!
 
MOTODEV App Validator
MOTODEV App ValidatorMOTODEV App Validator
MOTODEV App Validator
 
Beautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens TooBeautifully Usable, Multiple Screens Too
Beautifully Usable, Multiple Screens Too
 
Getting the Magic on Android Tablets
Getting the Magic on Android TabletsGetting the Magic on Android Tablets
Getting the Magic on Android Tablets
 
Getting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & BeyondGetting Your App Discovered: Android Market & Beyond
Getting Your App Discovered: Android Market & Beyond
 
Introducing Fragments
Introducing FragmentsIntroducing Fragments
Introducing Fragments
 
Taking Advantage of Webtop
Taking Advantage of WebtopTaking Advantage of Webtop
Taking Advantage of Webtop
 
Building Quality Into Your Apps Through Testing
Building Quality Into Your Apps Through TestingBuilding Quality Into Your Apps Through Testing
Building Quality Into Your Apps Through Testing
 
Top Tips for Android UIs
Top Tips for Android UIsTop Tips for Android UIs
Top Tips for Android UIs
 
Designing Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom TabletDesigning Apps for Motorla Xoom Tablet
Designing Apps for Motorla Xoom Tablet
 
Diseñando aplicaciones para el Motorola XOOM
Diseñando aplicaciones para el Motorola XOOM Diseñando aplicaciones para el Motorola XOOM
Diseñando aplicaciones para el Motorola XOOM
 
Presentación de los fragmentos
Presentación de los fragmentos Presentación de los fragmentos
Presentación de los fragmentos
 
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas
 
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuarioCómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
Cómo aprovechar Webtop Cómo HTML5 mejora la experiencia del usuario
 
Principais dicas para UIs do Android
Principais dicas para UIs do AndroidPrincipais dicas para UIs do Android
Principais dicas para UIs do Android
 
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
Tirando vantagem do webtop como o html5 aprimora a experiência do usuário de ...
 

Gráficos cada vez mais rápidos utilização de NDK e Renderscript

  • 1. Motorola Mobility Peter van der Linden Evangelista da tecnologia Android Plataformas e serviços para desenvolvedores Brasil - #appsum11br Gráficos cada vez mais rápidos: utilização de NDK e Renderscript
  • 2. MOTODEV App Summit 2011 Page 2 1 INSTALANDO AS FERRAMENTAS 2 ESCREVA UM CÓDIGO C 3 CRIE UM CÓDIGO C 4 CHAMANDO C A PARTIR DE JAVA (O JNI) 5 RESUMO - Encerrando, Controle de qualidade © 2011 Motorola Mobility, © 2011Versão 1.0 Inc. Motorola Mobility, Inc.
  • 3. MOTODEV App Summit 2011 Page 3 POR QUE CÓDIGOS C/C++ NO ANDROID? • Open GL • Desempenho • Portar! © 2011 Motorola Mobility, Inc.
  • 4. MOTODEV App Summit 2011 Page 4 Limitações C++ do NDK • Originalmente para escrever partes de desempenho crítico de código em C • Você não precisa de abstração OOP para isso (e a Dalvik VM é bastante rápida, com a compilação JIT desde 2.2) • O suporte de C++ é um tanto restrito • exceções não são suportadas • bugs conhecidos em invocações do construtor/destrutor estáticas • Assim, é mais provável que o código NDK seja escrito em C do que em C++ © 2011 Motorola Mobility, Inc.
  • 5. MOTODEV App Summit 2011 Page 5 Arquiteturas de CPU SUPORTADADAS • o NDK suporta dois conjuntos de instruções ARM: • ARMv5TE (inclui instruções Thumb-1). Esse é o target padrão e o código compilado para ele será executado em todos os dispositivos com Android baseado em ARM. Escolha outro target, mudando uma linha no makefile do Application.mk. • O ARMv7-A (inclui instruções Thumb-2 e VFPv3-D16, com suporte opcional para instruções NEON/VFPv3-D32). O código compilado para ARMv7-A funcionará apenas em dispositivos como o Verizon Droid ou Motorola XOOM que possuem uma CPU v7. O código para NEON só funcionará em um ARMv7 com suporte para NEON. • Há uma terceira arquitetura "em construção" (experimental, sem suporte): • conjunto de instruções x86 © 2011 Motorola Mobility, Inc.
  • 6. INSTALANDO AS FERRAMENTAS MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings, Versão 1.0 LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola Mobility, Inc. Todos os direitos reservados.
  • 7. MOTODEV App Summit 2011 Page 7 Baixando o Native Development Kit • Verifique a compatibilidade: XP ou Vista, MacOS X 10.5, Ubuntu • Baixe o arquivo zip de 50 MB ou tar.bz2 em: http://developer.android.com/sdk/ndk/index.html • Faça a descompactação dele em qualquer lugar, lembre-se de onde em $NDK export NDK=~/android-ndk-r5b • Requer o GNU make e GNU awk! Usuários do Windows - instalar o Cygwin 1.7 ou mais recente © 2011 Motorola Mobility, Inc.
  • 8. MOTODEV App Summit 2011 Page 8 Usuários do Windows • Baixe e instale o Cygwin 1.7 ou mais recente • Ferramentas de linha de comando Unix/Linux para usuários do Windows http://cygwin.com © 2011 Motorola Mobility, Inc.
  • 9. MOTODEV App Summit 2011 Page 9 Dicas para Windows e MacOS X • Não use nomes de caminhos com espaços entre eles! Em qualquer lugar! • O Cygwin instala somente os pacotes básicos. • Você precisa dos pacotes de desenvolvimento. É simples instalar todo o branch “Devel”. 1. Execute o setup.exe. 2. Clique na palavra “Default” (Padrão) próxima ao nó da raiz “Devel”. 3. “Default” altera para “Install” para o nó Devel. 4. Clique em “next” (Avançar) para instalar. Vá almoçar enquanto a instalação é realizada. 5. Deixe-o criar um ícone do console cygwin na sua área de trabalho. 6. Digite "make -v" no console cygwin para verificar se © 2011 Motorola Mobility, Inc. está tudo OK.
  • 10. MOTODEV App Summit 2011 Page 10 Descompacte o Native Development Kit • Contem sete pastas, e uma série de coisas para ler: © 2011 Motorola Mobility, Inc.
  • 11. MOTODEV App Summit 2011 Page 11 Pastas NDK • build: 4 pastas de scripts awk e shell, makefiles para compilar os seus arquivos C/C++ • docs: cerca de 20 arquivos de texto (Perguntas frequentes sobre o NDK); acesse pelo navegador o arquivo documentation.html • plataforms: .h e arquivos de sistema library.so para os vários níveis de API • samples: uma série de exemplos de funcionamento • sources: algumas fontes para os elementos relacionadas ao sistema • tests: scripts para testar o próprio NDK. Provavelmente aqui por engano. • toolchains: toolchains de cross-compiler © 2011 Motorola Mobility, Inc.
  • 12. MOTODEV App Summit 2011 Page 12 Adicionar suporte de C/C++ ao Eclipse • O Eclipse tem um plug-in para C/C++, assim como para o Android • Consiga isso usando o Eclipse Help (Ajuda) > Install new software (Instalar novo software) • Digite http://download.eclipse.org/releases/helios/ no campo “work with” (trabalhar com) (ou qualquer versão que você usa) • Advertências comuns sobre proxies de rede no trabalho (defina-os em MOTODEV Studio > Preferences (Preferências) > Network Conn. (Conexão de rede) • Clique em Programming Langs (Linguagens de programação) > C/C++ Development Tools (Ferramentas de desenvolvimento) © 2011 Motorola Mobility, Inc.
  • 13. MOTODEV App Summit 2011 Page 13 • Há um plugin para C/C++, assim como para o Android • Consiga isso usando o Eclipse Help (Ajuda)> Install new software (Instalar novo software) © 2011 Motorola Mobility, Inc.
  • 14. Escreva seu código C MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings, LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola Mobility, Inc. Todos os direitos reservados.
  • 15. MOTODEV App Summit 2011 Page 15 Abordagem geral •Comece com um aplicativo Android em Java, e adicione pedaços NDK a ele. •Coloque sua fontes C/C++ nativas em $PROJECT/jni: •Crie o seu código nativo em bibliotecas (libraries). •Seu código Java do Android pode chamar código nessas bibliotecas nativas. •O código nativo também pode chamar de volta em Java, e acesso objetos Java. © 2011 Motorola Mobility, Inc.
  • 16. MOTODEV App Summit 2011 Page 16 Criar o projeto Android da maneira usual © 2011 Motorola Mobility, Inc.
  • 17. MOTODEV App Summit 2011 Page 17 Crie a pasta jni para seu projeto • Destaque o projeto Eclipse que usará o código nativo • O nome do seu pacote é usado para acessar o código nativo, então mantenha-o curto e simples, por exemplo, "com.greet" para propósitos de treinamento • File (Arquivo) > New (Novo) > Folder (Pasta) • atribua-lhe o nome de "jni" • Dentro dessa pasta jni recém-criada, nós adicionaremos • um makefile • alguns arquivos C © 2011 Motorola Mobility, Inc.
  • 18. MOTODEV App Summit 2011 Page 18 Adicione dois arquivos à pasta jni em seu projeto • File (Arquivo) > New (Novo) > Other (Outro) ... • Selecione General (Geral), File (Arquivo) e, em seguida, procurar • Escolha a pasta jni, com o nome de "Android.mk“ > Finish (Finalizar) • Repita, criando um arquivo "myhello.c", também na pasta jni • Isso oferece a você • jni/Android.mk • jni/myhello.c © 2011 Motorola Mobility, Inc.
  • 19. MOTODEV App Summit 2011 Page 19 Preencha arquivos na pasta jni Criando a pasta jni em seu projeto saud ar © 2011 Motorola Mobility, Inc.
  • 20. MOTODEV App Summit 2011 Page 20 Criando mkfile na pasta jni © 2011 Motorola Mobility, Inc.
  • 21. MOTODEV App Summit 2011 Page 21 Preencha o makefile Android.mk • Edite o arquivo jni/Android.mk que você acabou de criar • Coloque essas palavras mágicas no makefile LOCAL_PATH := $ l my-d r (cal i) i lude $ nc (CLEAR_VARS) # nosso arqu vo fon e e a b b io i t i l teca c iada r # a par i le t rde LOCAL_M O D ULE : he lo = l LOCAL_SRC_FILES : he lo c = l . i lude $ nc (BUILD_SHARE D_LIBRARY) © 2011 Motorola Mobility, Inc.
  • 22. MOTODEV App Summit 2011 Page 22 Desvio em relação ao make • O make foi criado por Stu Feldman em 1977, no Bell Labs • Em 2003, o Dr. Feldman recebeu o prêmio ACM Software System Award pela criação dessa ferramenta amplamente difundida. • Você não ficou sabendo disso por mim, mas a tradição de software diz que... # Cada comando que segue a linha de dependência, # ou seja, o TARGET à esquerda, deve ser indentado por um # caracter TAB. target: componente-a-construir <TAB>comandos-para-construi-lo © 2011 Motorola Mobility, Inc.
  • 23. MOTODEV App Summit 2011 Page 23 Crie o código C na pasta jni •Edite o arquivo jni/myhello.c que você acabou de criar •Coloque essas palavras mágicas no arquivo C •Usa o objeto JNIEnv para criar uma string de Java a partir de um literal #incluir <string.h> #incluir <jni.h> jstring Java_com_greet_MyActivity_myCFunction (JNIEnv* env, jobject javaThis) { return (*env)->NewStringUTF(env, "Hello from native code!"); } © 2011 Motorola Mobility, Inc.
  • 24. MOTODEV App Summit 2011 Page 24 Código C explicado Quando o JVM invoca uma função nativa, ele passa • um indicador JNIEnv (estrutura que tem a interface da JVM para C) • um ponteiro jobject (o objeto "this") • quaisquer argumentos de Java declarados pelo método Java. Esses tipos vêm de #include <jni.h> (veja em "plataforms") Seu método de C deve ser escrito para esperar esses argumentos O método C é chamado de "Java“_classname_activity_methodname #incluir <string.h> #incluir <jni.h> Jstring Java_com_greet_MyActivity_myCFunction (JNIEnv* env, jobject javaThis) { return (*env)->NewStringUTF(env, "Hello from native code!"); } • ... parece, mas não é, um vazamento de memória? © 2011 Motorola Mobility, Inc.
  • 25. Crie um código C MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings, LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola Mobility, Inc. Todos os direitos reservados.
  • 26. MOTODEV App Summit 2011 Page 26 Chamadas entre linguagens •O Android segue o caminho normal para falar entre Java e C •JNI – Java Native Interface •Link para documentação do JNI http://java.sun.com/docs/books/jni/ •Isso inclui um livro completo, um tutorial, exemplos, etc © 2011 Motorola Mobility, Inc.
  • 27. MOTODEV App Summit 2011 Page 27 Crie uma biblioteca C • Abra uma janela de terminal, e cd para a pasta do projeto jni • Use o script "NDK-build" do diretório NDK (apenas um invólucro GNU Make) (pode colocar $NDK em seu caminho, se você quiser) • O script compila o código C, o transforma em uma biblioteca compartilhada (“shared library”) • Move o libhello.so para um novo projeto de pasta libs/armeabi © 2011 Motorola Mobility, Inc.
  • 28. MOTODEV App Summit 2011 Page 28 Abordagem geral para a construção de uma biblioteca • Salve arquivos no Eclipse • Abra uma janela de terminal e cd na pasta jni do seu projeto • Execute o script NDK-build para transformar o seu código em C em um arquivo .so • Essa lib *. so será adicionada no arquivo do aplicativo APK. • File (Arquivo) > Refresh (Atualizar) no Eclipse (para sincronizar com o sistema de arquivos) $ cd MYECLIPSEPROJECT/ i jn $ $NDK/ndk-bu ld i Co mpi e thumb : he l <= helo l lo l .c SharedL ibrary :l bhe l i lo.so Ins l tal :l b l .so => l /armeab /ibhe lo i he lo ibs il l .so © 2011 Motorola Mobility, Inc.
  • 29. MOTODEV App Summit 2011 Page 29 CRIE SUA BIBLIOTECA: resumo • O Eclipse não compila seu código NDK, o GNU Make sim • O plugin C/C++ dá-lhe as cores de sintaxe e de edição (apenas) • Execute o "NDK-build " script após cada edição de seu código C • Depois clique em File > Refresh, (F5), para manter o Eclipse em sincronia com seus arquivos nativos © 2011 Motorola Mobility, Inc.
  • 30. O Lado Java do JNI MOTOROLA e o logotipo estilizado M são marcas comerciais ou marcas registradas da Motorola Trademark Holdings, LLC. Todas as outras marcas comerciais são propriedade dos seus respectivos proprietários. © 2011 Motorola Mobility, Inc. Todos os direitos reservados.
  • 31. MOTODEV App Summit 2011 Page 31 Código Java que chama para o código nativo • Comece com o aplicativo de base criado no Eclipse package com.greet; impor andro t id.app.Actvt ; iiy impor andro t id.os.Bund ; le pub ic cl l ass MyAct i y ex ivt tends Ac ivt { t iy / * Chamado quando a Actvt é cr * iiy iada pe p i ra vez. * la rmei / @ Over ide r pub i vo onCreate lc id (Bund savedIns le tanceSta e) { t super .onCreate(savedInstanceSta ; te) setContentV iew(R.layout in) .ma ; } } © 2011 Motorola Mobility, Inc.
  • 32. MOTODEV App Summit 2011 Page 32 Adicione o carregamento da biblioteca • Adicione a chamada para carregar a nossa biblioteca nativa libhello.so • o nome deve corresponder ao nome da biblioteca sem “lib” e “.so” • assim libhello.so é "hello" s t c{ ta i Sys em. t loadLibrary "he l " ; ( lo) } © 2011 Motorola Mobility, Inc.
  • 33. MOTODEV App Summit 2011 Page 33 Adicione a declaração da função nativa • Adicione a declaração de protótipo da função nativa • No lado C, ela tem dois argumentos explícitos, um envp, um this • Mas no lado Java, esses argumentos estão implícitos p i te na i Str myCFunct ) r va t ve ing ion( ; © 2011 Motorola Mobility, Inc.
  • 34. MOTODEV App Summit 2011 Page 34 Adicione a chamada para a função nativa • Nós pegaremos a string de C e exibiremos alertas para o usuário (usando um “toast”). impor s t c andro . t ta i id widget Toast * . .; impor andro t id.widget.Toas ; t ... Sr t ing msg = myCFunct ) ion( ; Toas . t makeText th msg, LEN GTH_LO N G).show() ( is, ; © 2011 Motorola Mobility, Inc.
  • 35. MOTODEV App Summit 2011 Page 35 Juntando tudo package com.greet ; impor andro .app.Ac ivt ; t id t iy impor andro .os Bund ; t id . le impor s i andro d.w t tatc i idget Toast * . .; impor andro .w t id idget.Toas ; t pub ic c l lass MyAct v ty ex ii tends Ac ivt { t iy s t c { Sys ta i tem.loadLibrary " l " ;} ( he lo ) pr te natve S r iva i t ing myCFunct ) ion( ; @ Override pub i vo onCreate(Bund savedIns l c id le tanceSta { te) super.onCreate(savedInstanceState); setConten iew(R. tV layout in) .ma ; Sr t ing msg = myCFunct ) ion( ; Toas .makeText th ,msg, LENGT H_LON G).show() t ( is ; } } © 2011 Motorola Mobility, Inc.
  • 36. MOTODEV App Summit 2011 Page 36 © 2011 Motorola Mobility, Inc.
  • 38. MOTODEV App Summit 2011 Page 38 O COMEÇO Este pode ser um belo começo para um longo caminho • http://groups.google.com/group/android-ndk/topics • http://java.sun.com/docs/books/jni/ • http://developer.android.com/sdk/ndk/index.html © 2011 Motorola Mobility, Inc.
  • 39. MOTODEV App Summit 2011 Page Página39 Renderscript • Nova API com gráficos 3D de alto desempenho • Foi usada no Froyo para papéis de parede animados • É usada no Honeycomb para as apps Books e YouTube • O Honeycomb apresenta o Renderscript como uma API pública • Para executar códigos críticos em que as APIs de estrutura tradicionais Open GL ES não são rápidas o suficiente! © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc. © 2011 Versão 1.0
  • 40. MOTODEV App Summit 2011 Page Página40 Exemplo de renderscript © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc. © 2011 Versão 1.0
  • 41. MOTODEV App Summit 2011 Page Página41 App Books e Renderscript © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc. © 2011 Versão 1.0
  • 42. MOTODEV App Summit 2011 Page Página42 API do Renderscript • Uma API de "computação" para localizar pontos de movimento em 3D • Um API de "renderização" para desenhar texturas sobre os pontos • Uma linguagem de script baseada em C para acessar essa API • Único objetivo: espremer até a última gota de desempenho gráfico! • Abordagem: a API é uma fina camada sobre os recursos que são suportados pelo hardware • http://community.developer.motorola.com/t5/MOTODEV- Blog/Introduction-to-Renderscript/ba-p/12136 © 2010 Motorola Mobility, Inc. Motorola Mobility, Inc. © 2011 Versão 1.0
  • 43. MOTODEV App Summit 2011 Page Página43 API do Renderscript • As ferramentas de construção do Android compilam seu arquivo .rs do Renderscript para bytecode intermediário. • e o empacota no arquivo .apk do seu aplicativo. • No dispositivo, o bytecode é compilado (durante a execução - JIT) para código de máquina, que é otimizado para o dispositivo exato em que está sendo executado • O código de máquina é armazenado em cache para uso futuro • Isso elimina a necessidade de destinar uma arquitetura específica durante o processo de desenvolvimento. Excelente! © 2011 Motorola Mobility, Inc.
  • 44. MOTODEV App Summit 2011 Page Página44 Exemplo de arquivo .rs (a partir de exemplos do Honeycomb) #pragma rsjava_package_name(com.andro . s l id r .he lowor ) ld # lude " inc rs_graph cs rsh"/ Headers com APIs g f cas i . / rá i / gTouchX e gTouchY são var / iáve que serão obt is idas a ravés de t / re lexão para o uso pe API java Podemos usá- para no ii r / f la . las tf ca / o sc ip de eventos de toque. / r t i t gTouchX; n i t gTouchY; n / Esse éi / nvocado automaticamente quando o scr t é c i ip rado vo int ){ id i( gTouchX = 50 ; .0f gTouchY = 50 ; .0f } i troo ( n t intlaunchID) { / Apaga a cor do p / lano fundo rsgClearCo (0.0 , 0 f 0.0 , 0 f ; lor f .0 , f .0 ) / In r o run ime que a cor da fonte deve t / fo ma t er rsgFontCo r .0f 1 f 1 0f 1 f ; lo (1 , .0 , . , .0 ) //Nos apresenta ao mundo esboçando uma saudação / no loca em que o usuár o tocou a te / l i la rsgDrawText "He lo Wor d! , gTouchX, gTouchY) ( l l " ; / O va or de re / l tornoin r ao RS aprox mada mente quantas vezes fo ma i / redesenhar nesse caso 20 ms / ; Versão 1.0 © 2011 Motorola Mobility, Inc. re rn 20; tu }
  • 45. MOTODEV App Summit 2011 Page 45 Perguntas? @motodev @motodevbr Brasil - #appsum11br Argentina - #appsum11ar México - #appsum11mx Atendimento on line Terca-feira, 2 de junho 14 hs Sao Paulo, Buenos Aires 12 hs Cidade do Mexico © 2011 Motorola Mobility, Inc.
  • 46. MOTODEV App Summit 2011 Page 46 obrigado © 2011 Motorola Mobility, Inc.
  • 47. MOTODEV App Summit 2011 Page 47 Licenças Os exemplos de código fonte exibidos nessa apresentação podem ser licenciados sob a Licença Apache, Versão 2 da seguinte maneira: Copyright © 2010, Android Open Source Project. Todos os direitos reservados, exceto onde expressamente indicado o contrário. Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar esse arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em http://www.apache.org/licenses/LICENSE-2.0. A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "NA CONDIÇÃO QUE SE ENCONTRA", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, sejam expressas ou implícitas. Consulte a Licença para o idioma específico que governam as permissões e limitações sob a Licença. © 2011 Motorola Mobility, Inc.
  • 48. MOTODEV App Summit 2011 Page 48 Licenças Os exemplos de código fonte exibidos nessa apresentação podem ser licenciados sob a Licença BSD, da seguinte maneira: Copyright © 2010-2011, Motorola, Inc. Todos os direitos reservados exceto quando expressamente indicado. A redistribuição e utilização em formas de fonte e binário, com ou sem modificação, são permitidas de acordo com as seguintes condições: As redistribuições de código fonte devem manter o aviso de direitos autorais acima, esta lista de condições e a seguinte isenção de responsabilidade. As redistribuições em formulários binários devem reproduzir o aviso de copyright acima, esta lista de condições e a seguinte isenção de responsabilidade na documentação e/ou outros materiais fornecidos com a distribuição. O nome da Motorola, Inc. e os nomes de seus colaboradores não podem ser usados para endossar ou promover produtos derivados desse software sem permissão prévia por escrito. ESTE SOFTWARE É FORNECIDO PELOS DETENTORES E COLABORADORES "COMO TAL" E QUALQUER GARANTIA EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO LIMITADO A, AS GARANTIAS DE COMERCIALIZAÇÃO E ADEQUAÇÃO PARA UMA FINALIDADE ESPECÍFICA. EM NENHUM CASO A TITULAR DO DIREITO OU CONTRIBUINTES DEVEM SER RESPONSÁVEIS POR QUAISQUER DANOS DIRETOS, INDIRETOS, ESPECIAIS, EXEMPLARES OU CONSEQUENTES (INCLUINDO, MAS NÃO SE LIMITANDO À AQUISIÇÃO DE BENS OU SERVIÇOS, PERDA DE USO, DADOS OU LUCROS; OU INTERRUPÇÃO DE NEGÓCIOS) CAUSADOS E SOB QUALQUER TEORIA DE RESPONSABILIDADE, SEJA EM CONTRATO, RESPONSABILIDADE OBJETIVA OU (INCLUINDO NEGLIGÊNCIA OU NÃO) DECORRENTE DE QUALQUER MANEIRA DO USO DO SOFTWARE, MESMO QUE DA POSSIBILIDADE DE TAIS DANOS. © 2011 Motorola Mobility, Inc.