domingo, 11 de outubro de 2015

Android NDK - Hello World

O NDK é o Native Devolpment Kit e permite você escrever para android usando código nativo através de C ou C++

Geralmente se faz isso para obter mais performance (como é necessário no desenvolvimento de jogos por exemplo)

Mais detalhes em: https://developer.android.com/ndk/index.html

Eu estou usando para ver se consigo acessar recursos de telefonia para fazer uma conference... Mas enfim, segue um Hello World:

Faça o download do NDK: https://developer.android.com/ndk/downloads/index.html

Crie um novo projeto normalmente (File > New > New Project > dê um nome/domínio > Next > Next > Blank/Empty Activity > Finish)

No arquivo local.properties adicione uma linha com o caminho do seu NDK:

        ndk.dir=C\:\\android\\ndk\\android-ndk-r10e

No arquivo gradle.properties adicione isso:
android.useDeprecatedNdk=true

No arquivo build.gradle (da app) adicione em defaultConfig isso:

        ndk {
            moduleName "MyLib"
        }

Verifique se a MainActivity está estendendo diretamente a classe Activity, se não estiver, ajuste.

Na sua activity crie um método assim:
public native String getStringFromNative();

Vá em Build > Make

Depois vá no Terminal do Android Visual Studio e rode esse comando:

cd app\src\main

Depois rode esse comando (Não esquece de trocar as partes em negrito):

javah -d jni -classpath C:\android\sdk\platforms\android-23\android.jar;..\..\build\intermediates\classes\
debug br.com.localhost8080.ndksample.MainActivity

Isso vai criar uma pasta chamada jni com um arquivo .h nela

Crie nessa pasta jni um arquivo chamado main.c com o conteúdo abaixo (não esqueça de trocar os br_com_localhost8080_ndksample_MainActivity)

#include "br_com_localhost8080_ndksample_MainActivity.h"

JNIEXPORT jstring JNICALL Java_br_com_localhost8080_ndksample_MainActivity_getStringFromNative
        (JNIEnv * env, jobject obj)
  {
    return (*env)->NewStringUTF(env, "Hello from JNI!");
  }

Cria na mesma pasta um arquivo vazio chamado util.c (isso é necessário pois sem ele dá bug no gradle)

Depois dê um Build > Make

No activity_main.xml adicione um id no TextView:

android:id="@+id/my_textview"

Coloque na sua Activity

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

No final do onCreate coloque:

        TextView tv = (TextView) findViewById(R.id.my_textview);
        tv.setText(getStringFromNative());

Dê um play e veja seu lindo HelloWorld escrito em C



Fontes no meu github: https://github.com/adrianoschmidt/ndk-sample

Para fazer esse hello world eu segui esse vídeo-tutorial (eh um pouco antigo, então peguei uns bugs que não apareceram no vídeo, e está em inglês): https://software.intel.com/en-us/videos/using-the-ndk-with-android-studio

Abraço!
Adriano Schmidt

Nenhum comentário:

Postar um comentário