La muestra Hello-jni no funciona en Android Studio 2.0 Vista previa
Estoy tratando de implementar hello-jni
muestra en mi proyecto. Tengo Gradle
2.8 y 'com.android.tools.build:gradle-experimental:0.4.0'
y uso de Android Studio 2.0 Preview 3b
.
Este es mi build.gradle
:
- UnityPlayerActivity no recibe registro onCreate ()
- JNI- java.lang.UnsatisfiedLinkError: Método nativo no encontrado
- Desbordamiento de tabla de referencia Jni
- Llamar a un método java desde c ++ en Android
- Acceda al objeto JNI a la capa de Java como puntero de referencia
apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.2" defaultConfig.with { applicationId = "lala.lala" minSdkVersion.apiLevel = 16 targetSdkVersion.apiLevel = 23 versionCode = 1 versionName = "1.0" } } /* * native build settings */ android.ndk { moduleName = "hello-jni" // cppFlags.add("-fno-rtti") // cppFlags.add("-fno-exceptions") // ldLibs.addAll(["android", "log"]) // stl = "system" } android.productFlavors { // for detailed abiFilter descriptions, refer to "Supported ABIs" @ // https://developer.android.com/ndk/guides/abis.html#sa create("arm") { ndk.abiFilters.add("armeabi") } create("arm7") { ndk.abiFilters.add("armeabi-v7a") } create("arm8") { ndk.abiFilters.add("arm64-v8a") } create("x86") { ndk.abiFilters.add("x86") } create("x86-64") { ndk.abiFilters.add("x86_64") } create("mips") { ndk.abiFilters.add("mips") } create("mips-64") { ndk.abiFilters.add("mips64") } // To include all cpu architectures, leaves abiFilters empty create("all") } android.buildTypes { release { minifyEnabled = false //proguardFiles.add(file('proguard-rules.txt')) } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' compile 'com.android.support:cardview-v7:23.1.1' compile 'com.android.support:recyclerview-v7:23.1.1' compile 'com.google.android.gms:play-services-ads:8.3.0' compile 'com.google.android.gms:play-services-analytics:8.3.0' compile 'com.google.android.gms:play-services-appindexing:8.3.0' }
He creado en la carpeta JNI
hello-jni.h
:
En alguna parte de mi código, importo esto:
static { System.loadLibrary("hello-jni"); } public static native int testMethod();
Y por auto finalización creada hello-jni.c
:
#include "hello-jni.h" JNIEXPORT jintJNICALL Java_lala_lala_HomeScreen_testMethod(JNIEnv *env, jclass type ) { // TODO }
Archivo de encabezado hello-jni.h
:
// // Created by Filip on 15.12.2015.. // #ifndef PHOTO_HELLO_JNI_H #define PHOTO_HELLO_JNI_H #endif //PHOTO_HELLO_JNI_H
Pero no funciona. Está completamente rojo:
¿Cual es el problema? ¿Cómo resolverlo?
- Java: acceso al campo final estático en JNI
- Error de segmentación en la biblioteca nativa cuando se ejecuta bajo Android antes de 4.0.3
- Android-ndk Adición de bibliotecas estáticas al android.mk
- Cómo obtener un contexto de una actividad nativa
- Depuración del código Android NDK C / C ++ en Eclipse: los puntos de interrupción no se alcanzan
- Comprimir vídeos utilizando FFMPEG y JNI
- Archivo de Android.mk - incluye todos los archivos de origen en diferentes carpetas y subcarpetas
- Problema pasando byte a través de jni a C en Android
Es un problema en el estudio de Android, pero solo en Windows: Número 195483
Puedes bajar a Android studio 1.5.1, gradle 2.8, wrapper experimental 0.4.0 .
He probado Android Studio 2.0 beta 6, con envoltura 0.6.0-beta5 y 0.6.0-beta6, pero todavía no funciona.
Para que el ejemplo funcione, puede intentar los siguientes pasos:
- La firma del método
Java_filsoft_photo_HomeScreen_testMethod(...)
no coincide con el nombre del paquete que eslala.lala
. Para que el método a ser llamado haga su firma consistente con el nombre del paquete. -
Intente editar
hello-jni.c
siguiente manera:#include <jni.h> #include "hello-jni.h" jint Java_lala_lala_HomeScreen_testMethod( JNIEnv* env, jclass type ) { }
-
Respecto a los resaltados en rojo, a partir de
Android Studio 2.0 Preview 3b
la función deNDK
aún no está oficialmente soportada y, a mi mejor juicio, esta es la razón de ello. Deshabilitar el complemento deAndroid NDK support
(si está instalado)Settings
>Plugins
> desmarcarAndroid NDK support
> reiniciarAndroid Studio
- ¿Qué significa "servicio semipúblico" en Android?
- Android: compartir recursos entre dos aplicaciones