Hola, ¿alguien puede sugerirme algunos buenos recursos para aprender JNI para Android y algunos buenos tutoriales de JNI?Jni Tutorial para Android
Respuesta
Sugeriría descargar el ndk. Descomprímelo y explore los códigos de la carpeta de muestra ndk. Comience con el hello-jni y vaya más allá. Explica mucho con facilidad. También puede navegar por theselinks y this mientras revisa el código y sigue yendo y viniendo.
Puede encontrar un proyecto práctico de JNI usando Android Studio desde mi página de github: https://github.com/russell-shizhen/JniExample. Traté de dar ejemplos sobre el uso de las API de JNI tanto como sea posible. – Russell
Tutorial para ECLIPSE
Aquí es first y second pequeños tutoriales, pero si quieres escribir un programa simple que utiliza JNI, puede seguir leyendo :)
Crear proyecto de aplicación de Android, una vez su proyecto ha sido creado, necesitará crear una nueva carpeta dentro del nivel superior del proyecto. Para hacer esto, haga clic derecho en el nombre de su proyecto → Nuevo → Carpeta. Nombre esta carpeta jni. Que agregar clase con el nombre SquaredWrapper
. agregue estos código en él
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");
}
}
Terminal abierto. Debe compilar estos códigos para obtener el archivo de encabezado. Primero llama a este comando.
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
por lo que tendrá el archivo de encabezado denominado en su directorio tmp
.
debe ser algo como esto cambio
/* 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
estos nombres por algún corto para su comodidad, por ejemplo square.h. Copie este archivo de encabezado en la carpeta jni de su aplicación. Luego de crear el archivo square.c en la misma carpeta, copia esto en él.
#include "square.h"
JNIEXPORT jint JNICALL Java_com_example_android_1jni_1second_1demo_SquaredWrapper_squared
(JNIEnv * je, jclass jc, jint base)
{
return (base*base);
}
Añadir esto en su MainActivity.java
int x = SquaredWrapper.to4(2);
x = x*2;
Añadir Android.mk
archivo en la carpeta jni
con este cuerpo
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := squared
LOCAL_SRC_FILES := square.c
include $(BUILD_SHARED_LIBRARY)
Se debe crear la biblioteca de la cabecera y los archivos cpp.
Así que sólo tienen que hacer algunas configuraciones mirando en mi first enlace Ahora se puede compilar, asegúrese de que su biblioteca ha creado y su directorio lib
consistir en ella.
Tutorial para Android Studio
vamos a considerar que tiene sencilla aplicación para Android abierta por Android Studio
paso 1: abrir su aplicación por Android Studio
paso 2: Descargar NDK y establece la ruta a NDK en las propiedades locales de tu aplicación (debajo/arriba de la ruta sdk de Android) como esta ndk.dir=C\:\\Android\\android-ndk-r10e
P.S. para las ventanas de doble //, para Linux uno/
Paso 3: Añadir carpeta JNI en la aplicación (clic derecho en la aplicación -> Nuevo -> Carpeta -> Carpeta JNI)
paso 4 Conjunto el Gradle
de esta manera:
añadir este código en app/build.gradle
para iniciar NDK
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
tasks.withType(NdkCompile) { // disable automatic ndk-build call
compileTask -> compileTask.enabled = false
}
task ndkBuild(type: Exec) { // call ndk-build(.cmd) script
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine 'cmd', '/c', 'ndk-build.cmd', '-C', file('src/main').absolutePath
} else {
commandLine 'ndk-build', '-C', file('src/main').absolutePath
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
paso 4:
Crear archivos Android.mk y Application.mk en carpeta JNI de la aplicación con este organismos:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := main.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all
include $(BUILD_SHARED_LIBRARY)
En APP_ABI elige qué compiladores usar. Se
paso 5:
Tenemos que ejecutar manualmente NDK ya que desactivarlo desde build.config
. Para la creación de archivo en com_example_nativedemo_app_MainActivit.h
src \ carpeta principal \ jn tenemos que ejecutar este comando en el terminal
javah -d .\jni -classpath C:\Intel\INDE\IDEintegration\android-sdk-windows\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug com.example.mydemo.nativedemo.MainActivity
para las ventanas cmd que tiene que dar la ruta completa de los archivos. Para
paso 6:
Agregar archivo en la carpeta main.cpp JNI con este cuerpo:
#include <string.h>
#include <jni.h>
#include <vchat_cpptest_Hellojnicpp.h>
extern "C" {
JNIEXPORT jstring JNICALL
Java_vchat_cpptest_Hellojnicpp_stringFromJNI
(JNIEnv *env, jobject obj)
{
#ifdef __INTEL_COMPILER_UPDATE
return env->NewStringUTF("Hello from Intel C++ over JNI!");
#else
return env->NewStringUTF("Hello from default C++ over JNI!");
#endif
}
- 1. Tutorial para Spinning Wheel Android?
- 2. FFMpeg jni en Android?
- 3. Android JNI APK Embalaje
- 4. Uso de jni en Android: UNsatisfiedLinkError
- 5. ¿Utiliza JNI para cargar otra biblioteca JNI?
- 6. cámara Tutorial para Android (usando SurfaceView)
- 7. Versión definitiva de Phonegap tutorial para Android
- 8. Android NDK tutorial/guía para principiantes.
- 9. Android Web Service Tutorial
- 10. Android GEO Location Tutorial
- 11. Mi codificador JNI JPEG para Android es realmente lento
- 12. Construir con JNI NDK para el enrollamiento
- 13. Android cámara vista previa tutorial
- 14. Android ExpandableListView - Buscando un tutorial
- 15. Android Cómo leer archivos JNI Core Dump
- 16. Cualquier tutorial admob que funcione para Phonegap en Android
- 17. ffmpeg para un android (usando el tutorial: "ffmpeg and Android.mk")
- 18. A "Hello World" tutorial para Arduino y Android hace
- 19. Muestras/tutorial para el marco DRM en Android
- 20. Android Bluetooth tutorial toma para la comunicación no bloqueante
- 21. ¿Hay algún tutorial de animación de Android útil para principiantes?
- 22. OpenGL ES tutorial para android no parece funcionar
- 23. ¿Un buen tutorial para usar AccountManager en Android?
- 24. Tutorial para principiantes para Arduino Mega ADK
- 25. Android NDK - OpenGL ES Tutorial/Bibliotecas
- 26. Utilice C++ con JNI
- 27. ¿Buen tutorial para SlickGrid?
- 28. Tutorial para libsvm C++
- 29. Tutorial para compartir SLComposeViewController
- 30. Principiante tutorial para Elgg
Me parece que esto es una pregunta perfectamente válida como se ve por los 14k puntos de vista. En casos como este, las opiniones son lo que uno quiere leer. Los ingenieros son obstinados sobre su enfoque de los procesos. En cuanto a atraer spam, stackoverflow obviamente puede manejar ese pequeño problema. La respuesta a continuación es útil y este sitio trata sobre respuestas más útiles. –
Hay un codelab de google. https://codelabs.developers.google.com/codelabs/android-studio-jni/index.html?index=..%2F ..% 2Findex # 0 –