YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

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

Peter van der LindenEvangelista da tecnologia Android

Plataformas e serviços para desenvolvedores

Brasil - #appsum11br

Motorola Mobility

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

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

2Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

Versão 1.0© 2011 Motorola Mobility, Inc.

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

3Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

• Open GL

• Desempenho

• Portar!

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

4Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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++

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

5Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Arquiteturas de CPU SUPORTADADAS• o NDK suporta dois conjuntos de instruções ARM:

• ARMv5TE (inclui instruções Thumb-1). Esse é o targetpadrã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

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

INSTALANDO AS FERRAMENTAS

Versão 1.0MOTOROLA 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 MotorolaMobility, Inc. Todos os direitos reservados.

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

7Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

8Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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 Windowshttp://cygwin.com

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

9Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

está tudo OK.

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

10Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Descompacte o Native Development Kit

• Contem sete pastas, e uma série de coisas para ler:

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

11Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

12Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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 “workwith” (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)

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

13Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

(Instalar novo software)

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

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 MotorolaMobility, Inc. Todos os direitos reservados.

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

15Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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.

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

16Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Criar o projeto Androidda maneira usual

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

17Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

18Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

19Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Preencha a pasta jni em seu projeto

saudar

Criando arquivos na pasta jni

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

20Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Criando mkfile na pasta jni

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

21Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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 := $(call my-dir)

include $(CLEAR_VARS)

# nosso arquivofonte e a biblioteca criada# a partirdeleLOCAL_MODULE := helloLOCAL_SRC_FILES := hello.c

include $(BUILD_SHARED_LIBRARY)

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

22Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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 SystemAward 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

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

23Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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!");}

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

24Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Código C explicadoQuando 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 argumentosO método C é chamado de "Java“_classname_activity_methodname

• ... parece, mas não é, um vazamento de memória?

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

Jstring Java_com_greet_MyActivity_myCFunction(JNIEnv* env, jobject javaThis) {

return (*env)->NewStringUTF(env, "Hello from native code!");}

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

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 MotorolaMobility, Inc. Todos os direitos reservados.

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

26Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

27Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

28Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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/jni$ $NDK/ndk-build

Compile thumb : hello <= hello.cSharedLibrary : libhello.soInstall : libhello.so => libs/armeabi/libhello.so

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

29Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

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 MotorolaMobility, Inc. Todos os direitos reservados.

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

31Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

• Comece com o aplicativo de base criado no Eclipse

package com.greet;

import android.app.Activity;import android.os.Bundle;

public class MyActivity extends Activity {/** Chamado quando a Activity écriada pela primeira vez. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);

}}

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

32Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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"static {

System.loadLibrary("hello");}

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

33Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

private native String myCFunction();

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

34Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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”).

import static android.widget.Toast.*;import android.widget.Toast;

. . .

String msg = myCFunction();Toast.makeText(this, msg, LENGTH_LONG).show();

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

35Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Juntando tudopackage com.greet;

import android.app.Activity;import android.os.Bundle;import static android.widget.Toast.*;import android.widget.Toast;

public class MyActivity extends Activity {

static { System.loadLibrary("hello"); }

private native String myCFunction();

@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);

String msg = myCFunction();

Toast.makeText(this, msg, LENGTH_LONG).show();}

}

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

36Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

Resumo

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

38Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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

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

39Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011 Página

Versão 1.0© 2010 Motorola Mobility, Inc.

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 appsBooks 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!

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

40Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011 Página

Versão 1.0© 2010 Motorola Mobility, Inc.

Exemplo de renderscript

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

41Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011 Página

Versão 1.0© 2010 Motorola Mobility, Inc.

App Books e Renderscript

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

42Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011 Página

Versão 1.0© 2010 Motorola Mobility, Inc.

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

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

43Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011 Página

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!

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

44Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011 Página

Versão 1.0

Exemplo de arquivo .rs (a partir de exemplos do Honeycomb)

#pragma rsjava_package_name(com.android.rs.helloworld)#include "rs_graphics.rsh"// Headers com APIs gráficas

// gTouchX e gTouchY são variáveisque serão obtidas através de// reflexão para o uso pela API java. Podemos usá-las para notificar// o script de eventos de toque.intgTouchX;intgTouchY;

// Esse éinvocado automaticamente quando o script é criadovoid init() {

gTouchX = 50.0f;gTouchY = 50.0f;

}

introot(intlaunchID) {// Apaga a cor do planofundorsgClearColor(0.0f, 0.0f, 0.0f, 0.0f);// Informa o runtime que a cor dafonte deveterrsgFontColor(1.0f, 1.0f, 1.0f, 1.0f);//Nos apresentaao mundo esboçando uma saudação// no local em que o usuáriotocou a telarsgDrawText("Hello World!", gTouchX, gTouchY);

// O valor de retornoinforma ao RS aproximadamente quantas vezes// redesenhar; nesse caso 20 msreturn 20;

}

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

45Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

Perguntas?@motodev

@motodevbr

Brasil - #appsum11brArgentina - #appsum11arMéxico - #appsum11mx

Atendimento on lineTerca-feira, 2 de junho

14 hs Sao Paulo, Buenos Aires12 hs Cidade do Mexico

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

46Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

obrigado

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

47Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

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.

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

48Page

© 2011 Motorola Mobility, Inc.

MOTODEV App Summit 2011

LicençasOs 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.


Related Documents