Bonjour, est-ce que quelqu'un peut me suggérer de bonnes ressources pour apprendre JNI pour Android et quelques bons tutoriels JNI?
Réponses
Trop de publicités?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.
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
Voici quelques tutoriels qui pourraient vous intéresser : http://code.google.com/p/awesomeguy/wiki/JNITutorial
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/