48 votes

Jni Tutorial pour Android

Bonjour, est-ce que quelqu'un peut me suggérer de bonnes ressources pour apprendre JNI pour Android et quelques bons tutoriels JNI?

46voto

Hayk Nahapetyan Points 966

Voici la première et de la deuxième petit tutoriels, mais si vous voulez écrire un programme simple qui utilise JNI , vous pouvez continuer à lire :)

Créer une application Android de projet , une Fois votre projet créé, vous aurez besoin de créer un nouveau dossier à l'intérieur du haut niveau du projet. Pour ce faire, cliquez-droit sur le nom de votre projet → Nouveau → Dossier. Le nom de ce dossier jni. Que d'ajouter à la classe avec le nom de l' SquaredWrapper. les ajouter dans le code

package org.edwards_research.demo.jni;

public class SquaredWrapper {
    // Declare native method (and make it public to expose it directly)
    public static native int squared(int base);

    // Provide additional functionality, that "extends" the native method
    public static int to4(int base)
    {
        int sq = squared(base);
        return squared(sq);
    }

    // Load library
    static {
        System.loadLibrary("square");
    }
} 

Ouvrir un terminal. Vous devez compiler le code pour obtenir l'en-tête de fichier. Au premier appel de cette commande.

cd src # change into the source directory
javac -d /tmp/ org/edwards_research/demo/jni/SquaredWrapper.java

Que

cd /tmp
javah -jni org.edwards_research.demo.jni.SquaredWrapper

De SORTE que vous aurez fichier d'en-tête nommée org.edwards_research.demo.jni.SquaredWrapper votre tmp répertoire.

il doit être quelque chose comme ceci

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_edwards_research_demo_jni_SquaredWrapper */

#ifndef _Included_org_edwards_research_demo_jni_SquaredWrapper
#define _Included_org_edwards_research_demo_jni_SquaredWrapper
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     org_edwards_research_demo_jni_SquaredWrapper
 * Method:    squared
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared
  (JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif

changement de nom pour ces quelques courtes pour votre confort, par exemple carrée.h. Copiez ce fichier d'en-tête dans la jni dossier de votre application. De créer square.c fichier dans le même dossier, copier ça.

 #include "square.h"

JNIEXPORT jint JNICALL Java_com_example_android_1jni_1second_1demo_SquaredWrapper_squared
      (JNIEnv * je, jclass jc, jint base)
    {
            return (base*base);
    }

Ajouter ceci dans votre MainActivity.java

int x = SquaredWrapper.to4(2);
        x = x*2;

Ajouter Android.mk fichier jni le dossier de ce corps

    LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := squared
LOCAL_SRC_FILES := square.c

include $(BUILD_SHARED_LIBRARY)

Il doit créer une bibliothèque à partir d'en-tête et les fichiers cpp.

Donc, vous n'avez qu'à faire quelques configurations en regardant sur mon premierlien Vous pouvez maintenant compiler , assurez-vous que votre bibliothèque a créé et votre lib annuaire consistent en elle.

17voto

Raulp Points 1278

Je suggère de télécharger le ndk .Décompressez-le et parcourir l'échantillon dossier ndk codes.Commencer avec la bonjour-jni et aller plus loin.Il explique beaucoup de choses avec facilité. Vous pouvez également parcourir ces liens et ce en passant par le code et de garder à venir d'avant en arrière. Rgds, Rp

4voto

MaSEL Points 119

Voici quelques tutoriels qui pourraient vous intéresser : http://code.google.com/p/awesomeguy/wiki/JNITutorial

0voto

En passant, vous pouvez utiliser des wrappers sympas pour les classes java. Et vous n'aurez pas besoin de tutoriels JNI. Avec ces wrappers, vous pourrez écrire un code C ++ de la même manière qu'en Java. Par exemple, quelque chose comme ceci:

 ...
View someView;
someView.setAlpha(0.5);
...
 

Voici le lien: http://code.google.com/p/android-cpp-sdk/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X