Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

286
Vistas
Comportamiento diferente de los proyectos nativos de Android C++ cuando se usa Java y Kotlin como lenguaje base

Creé dos proyectos nativos de C++: uno con Kotlin como lenguaje base y otro con Java.

En ambos proyectos hice la misma modificación de las funciones de C++ creadas automáticamente:

 extern "C" JNIEXPORT jstring JNICALL Java_com_stellarsolvers_test_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */, jstring s) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); }

Entonces agregué el parámetro: jstring s .

La definición también se modifica de la siguiente manera:

Kotlin:

 external fun stringFromJNI(s: String): String

Java:

 public native String stringFromJNI(String s);

En el código de llamada proporcioné un valor de cadena para esta función:

Kotlin:

 sample_text.text = stringFromJNI("Kotlin")

Java:

 tv.setText(stringFromJNI("Java"));

No se realizaron otros cambios en ninguno de los proyectos.

Ambos proyectos son de la plantilla "Native C++" de

  • Estudio Android 3.3
  • Compilación #AI-182.5107.16.33.5199772, compilada el 25 de diciembre de 2018
  • JRE: 1.8.0_152-release-1248-b01 x86_64
  • JVM: máquina virtual de servidor OpenJDK de 64 bits de JetBrains sro
  • mac OS 10.14.2

El único cambio en el asistente "Crear nuevo proyecto" es:

  • Nivel mínimo de API: API 21

Esperaba que ambos proyectos funcionaran correctamente.

Con Java ese fue el caso.

Sin embargo, la aplicación de Kotlin se comporta de forma extraña: cuando la ejecución llega al punto en el que se debe invocar la función de C++, el programa falla con un SIGSEGV en el depurador en:

  • Dispositivo virtual: Nexus 5X API 28 x86 (Android 9, API 28)

El seguimiento de pila de depuración es:

 art_sigsegv_fault 0x00000000e7e571d0 art::FaultManager::HandleFault(int, siginfo*, void*) 0x00000000e7e57774 art::art_fault_handler(int, siginfo*, void*) (.llvm.650222801) 0x00000000e7e5749b ___lldb_unnamed_symbol22$$app_process32 0x00000000598aa6af ___lldb_unnamed_symbol2$$libc.so 0x00000000eace1c50 art::ManagedStack::ShadowFramesContain(art::StackReference<art::mirror::Object>*) const 0x00000000e8093086 art::Thread::DecodeJObject(_jobject*) const 0x00000000e81d8ac8 <unknown> 0x00000000e876d05d dlsym 0x00000000598a9530

Una aplicación falla al ingresar al método nativo.

¿A qué se debe este comportamiento tan extraño de la aplicación Kotlin?

Acabo de intentar depurar en un dispositivo real: ASUS Zenfone Max Pro M1 (Android 8.1.0, API 27). Y tanto los proyectos de Kotlin como los de Java funcionan correctamente. El depurador permite ingresar al método nativo, no aparecen fallas.

Entonces, el estado del problema actualizado es: una aplicación se bloquea en el 100 % de los casos en el dispositivo virtual.

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda