De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Android NDK - Desmistificando o acesso a códigos nativos em C

Colaboração: Alessandro de Oliveira Faria

Data de Publicação: 24 de fevereiro de 2011

O Android NDK proporciona o recurso de acesso direto à GPU utilizando OpenGL ( viva \o/ ), logo torna-se possível a utilização de recursos como vertex, shaders e fragment shaders. Recursos fundamentais para os efeitos especiais em aplicações gráficas, sem contar no facilitador em termos de trabalho para os desenvolvedores.

O Android NDK é o segundo kit de desenvolvimento disponível para programadores interessados no sistema operacional Android. O kit convencional é o Android SDK (Software Development Kit), onde o programador desenvolve na linguagem Java.

Com o NDK é possível escrever bibliotecas em C ou C++, sem mistério e com muita rapidez, e integrá-las em aplicativos Java sem a necessidade de magia-negra, o que deriva em ganho de produtividade na elaboração do aplicativo. Em contrapartida, pode-se perder a portabilidade. Pois smartphones Android usam uma ampla variedade de processadores, e bibliotecas nativas. Com isto talvez seja necessário a recompilação dos executáveis, ao contrário do aplicativos 100% escrito em Java.

Download e instalação

O NDK deve ser obtido na página oficial do Android.

Quando este documento foi elaborado, para efetuar o download, foi preciso apenas o comando a seguir. Entretanto claro, este link mudará conforme os próximo release e/ou versão.

  $ wget http://dl.google.com/android/ndk/android-ndk-r5b-linux-x86.tar.bz2

Após o download, descompacte o pacote conforme o exemplo abaixo:

  $ tar -jxvf android-ndk-r5b-linux-x86.tar.bz2

Pronto! Neste etapa o Android NDK foi instalado com sucesso (difícil não)!

Mão na massa! Criando o Hello Word com JNI

A técnica de abstração de funções C e/ou classes em C++ é denominada JNI, ou Java Native Interface, é um padrão de programação que permite que a máquina virtual da linguagem Java acesse bibliotecas construídas com o código nativo de um sistema. Junto ao recurso do NDK para compilação cruzada, céu é o limite para as pessoas que não conhecem os seus limites.

Chega de blá-blá-blá e começaremos agora a colocar a mão na massa, selecionando a opção File->New->Project conforme a figura abaixo.

Na nova janela de diálogo, selecione a opção Android Project.

Logo a seguir, informe o nome do projeto no EditBox project name, selecione o item "Create new project in workspace", habilite o item "Use default location" para criar no workspace padrão e por fim a versão do SDK. Na figura a seguir veremos um exemplo ilustrativo.

Informe o nome da aplicação, o nome do pacote e também o nome da Acticity.

Edite o arquivo main.xml localizado na pasta layout, conforme o exemplo abaixo:

Altere a classe HelloNDK conforme o exemplo abaixo, onde a função nativa sayHello() retorna uma string java que posteriormente será exibida na aplicação. Reparem que a chamada da biblioteca nativa hellondk é efetuada com System.loadLibrary.

  package com.cabelo.hellondk;
  import android.app.Activity;
  import android.os.Bundle;
  import android.widget.TextView;
  public class HelloNDK extends Activity {
     TextView txtHello;
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txtHello = (TextView) findViewById(R.id.txtHello);
        String hello = sayHello();
        txtHello.setText(hello);
        }
     public native String sayHello();
     static {
        System.loadLibrary("hellondk");
        }
  }

Salve o projeto e no modo console (\o/ viva!), entre na pasta do projeto com o comando cd.

  $ cd ~/workspace/olaNDK/

Utilizaremos o javah, um gerador de arquivos header para integração a código nativo em C. Este programa possibilita que programas escritos em Java façam chamadas de procedimentos escritos em C. A sua sintaxe é composta do arquivo de saída precedido da classe java como no exemplo abaixo:

  $ javah -o  hellondk.h -classpath bin com.cabelo.hellondk.HelloNDK

Agora crie a pasta jni e mova o arquivo .h criado anteriormente para a pasta recém-criada.

  $ mkdir jni
  $ mv  hellondk.h  jni/**

Entre na pasta jni e cria o arquivo Application.mk informando a arquitetura de processador a utilizar.

  $ cd jni/
  $ echo "APP_ABI := armeabi armeabi-v7a" > Application.mk**

A seguir, crie também o arquivo Android.mk com o conteúdo do exemplo abaixo.

  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  #I Like to build my shared libs using C++
  LOCAL_DEFAULT_CPP_EXTENSION := cpp
  LOCAL_MODULE    := hellondk
  LOCAL_SRC_FILES := hellondk.cpp
  include $(BUILD_SHARED_LIBRARY)

Agora falta criar apenas o arquivo hellondk.cpp, cujo conteúdo é na integra a abstração C em Java, ou seja, como prova de conceito, retornaremos uma string java oriunda da junção sayHello. No exemplo a seguir, o conteúdo do arquivo hellondk.cpp.

  #include <hellondk.h>
   JNIEXPORT jstring JNICALL Java_com_cabelo_hellondk_HelloNDK_sayHello(JNIEnv *env, jobject obj){
                    return
   env->NewStringUTF("Viva o Linux com NDK!");
                      }

Para compilar, basta utilizar o script ndk-build no NDK:

/dados/neti/programas64/android-ndk-r5/ndk-build

  StaticLibrary  : libstdc++.a
  SharedLibrary  : libhellondk.so
  Install        : libhellondk.so => libs/armeabi/libhellondk.so
  StaticLibrary  : libstdc++.a
  SharedLibrary  : libhellondk.so
  Install        : libhellondk.so => libs/armeabi-v7a/libhellondk.so

Pronto, agora basta voltar no Eclipse, abrir o aplicativo Java e executá-lo. Se tudo estiver funcionando corretamente, teremos um resultado conforme a imagem a seguir...

Espero que este documento ajude a desmistificar o uso do NDK na plataforma Android, principalmente para os iniciantes. Como sempre menciono... Colaborar atrai amigos, competir atrai inimigos...

Este artigo foi publicado originalmente no site Viva o Linux.

Alessandro de Oliveira Faria é sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim proporcionando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, diversos documentos técnicos disponibilizado na internet, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos e openSUSE Member.

Tecnologia cria consciência artificial para reduzir consumo de energia

Fonte: BRASSCOM

08/12/2010

Empresa de TI conta como o investimento em alta tecnologia ajudou a reduzir, em menos de seis meses, 30% do consumo de energia elétrica

Referência em inovação, a multinacional brasileira de outsourcing de TI, Ci&T (http://www.cit.com.br), decidiu investir em alta tecnologia para utilizar, de forma consciente, a energia elétrica. O projeto piloto implementado em apenas um andar de um dos prédios da empresa, uma área de 1650m², em junho, já permitiu à Ci&T alcançar uma economia de 30% do consumo total de energia.

A iniciativa faz parte do Programa de Sustentabilidade da companhia, que foi lançado em janeiro deste ano, e vem desenvolvendo uma série de estratégias e ações sustentáveis. O projeto consiste na automação de toda a iluminação do andar com o diferencial de criar uma espécie de Consciência Artificial.

Conforme explica Eduardo Cruz, diretor da e.conscience, empresa responsável pelo desenvolvimento do piloto, "os sensores de presença instalados passam a informação sobre os hábitos da utilização do prédio para um sistema que administra o local. Com isso, o sistema consegue ter autonomia para decidir quando desligar as luzes do prédio".

No primeiro mês, a empresa registrou uma redução de 19,5% no valor pago na conta de energia elétrica de todo o prédio. E em pouco tempo essa economia chegou a 25%, sendo que apenas 50% do prédio foi automatizado. Para a empresa, uma das principais vantagens é que o sistema implementado não demandou mudanças comportamentais dos usuários, já que isso esbarra em questões de ergonomia e segurança. Além disso, foi instalado em apenas um final de semana e sem que as atividades da empresa precisassem ser interrompidas. "É um plano inteligente. Hoje, ao chegar de madrugada na empresa, as luzes vão se acendendo à sua frente e apagando atrás. Para nós, é muito mais do que a simples redução do consumo de energia. É uma mudança que a tecnologia permitiu e que faz bem para o planeta", afirma Fernando Matt, CFO e Diretor da área de Sustentabilidade da Ci&T. "O projeto ainda está em fase inicial em termos da consolidação dos resultados, mas o desenho projetado mostra um payback interessante em relação ao investimento realizado. Porém, o mais importante, neste primeiro momento, é o fato de que inserimos de vez o conceito da sustentabilidade nos processos da empresa, o que, acreditamos, no médio prazo, será um grande diferencial competitivo, garantindo a sustentabilidade dos negócios", ressalta Carla Borges, líder do Comitê de Sustentabilidade e gerente da área.

Como curiosidade, o executivo acrescenta que o projeto teve impactos, também, na redução da emissão de CO2. Desde a instalação, houve uma economia de 31.683KW, o equivalente a uma redução de emissão de 2.32 toneladas de CO2. De acordo com dados do IEA (International Energy Agency), o fator de emissão por KW para o Brasil é 0,073. Isso significa que para cada 1000KW consumidos no país, 73kg de CO2 são emitidos na atmosfera.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Alessandro de Oliveira Faria