java - org - telegram symbian
Aplicación Android Telegram-> java.lang.UnsatisfiedLinkError: no se encontró implementación para el vacío (5)
@Rajsundar. Si agrega la línea:
export ndkbuild=/cygdrive/c/android-ndk-r10e/ndk-build.cmd
no está trabajando. Después de hacer todo lo demás, simplemente puede ejecutar el comando directamente desde el directorio jni.
/cygdrive/c/android-ndk-r10e/ndk-build.cmd
Desafortunadamente, una pregunta similar fue eliminada en Stackoverflow hace algunas semanas, debo hacer una nueva pregunta.
Estoy tratando de crear una aplicación de Telegram para Android a través de la fuente @ https://github.com/DrKLO/Telegram
No puedo hacer que funcione, se detiene al inicio con el siguiente error, cualquier idea sobre dónde empezar, soy bastante nuevo en Android Studio.
11-17 19:55:04.142 2667-2667/org.telegram.messenger E/art: No implementation found for void org.telegram.tgnet.ConnectionsManager.native_setJava(boolean) (tried Java_org_telegram_tgnet_ConnectionsManager_native_1setJava and Java_org_telegram_tgnet_ConnectionsManager_native_1setJava__Z)
11-17 19:55:04.142 2667-2667/org.telegram.messenger D/AndroidRuntime: Shutting down VM
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: FATAL EXCEPTION: main
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: Process: org.telegram.messenger, PID: 2667
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: java.lang.UnsatisfiedLinkError: No implementation found for void org.telegram.tgnet.ConnectionsManager.native_setJava(boolean) (tried Java_org_telegram_tgnet_ConnectionsManager_native_1setJava and Java_org_telegram_tgnet_ConnectionsManager_native_1setJava__Z)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at org.telegram.tgnet.ConnectionsManager.native_setJava(Native Method)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at org.telegram.messenger.ApplicationLoader.onCreate(ApplicationLoader.java:259)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at android.app.ActivityThread.-wrap1(ActivityThread.java)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-17 19:55:04.151 2667-2667/org.telegram.messenger E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Como mencionó Jesús Castro, tienes que compilar códigos nativos para las bibliotecas con el sufijo .so
que Android puede usar para ejecutar la aplicación.
¿Pero por qué sucede esto recientemente? Porque en la última confirmación del repositorio de Telegram de DrKLO han eliminado las bibliotecas precompiladas de acuerdo con el mensaje de confirmación en git:
Eliminando bibliotecas preconstruidas. El código fuente de todas las bibliotecas está (y siempre lo estaba) disponible aquí: https://github.com/DrKLO/Telegram/tree/master/TMessagesProj/jni
Puede encontrar el compromiso here .
El principal problema es que está ejecutando el proyecto sin generar la biblioteca nativa a partir de los códigos C / C ++. Debido a ese proyecto basado en Telegram, que usted señala con el enlace, tiene el archivo Android.mk
en el directorio jni
, tiene que compilar el código manualmente. Reparé esa excepción siguiendo estos pasos:
- Compruebe que
build.gradle
contenga:
fuente versión 3.13.1 y más reciente:
sourceSets.main.jniLibs.srcDirs = [''./jni/'']
Versión fuente inferior a 3.13.1:
sourceSets.main { jniLibs.srcDirs = ''libs'' jni.srcDirs = [] //disable automatic ndk-build call }
- Descargue el NDK
Proceda según su sistema operativo.
Linux / Mac
$ cd <path-to-Telegram>/TMessagesProj
$ <path-to-ndk>/ndk-build
Windows
- Descargar Cygwin
Agregue el archivo
.bashrc
, que se coloca en el directorio raíz de Cygwin (use alguna utilidad para encontrar ese archivo). En mi caso, el archivo se colocó enC:/cygwin64/home/myuser
.export ndkbuild=/cygdrive/partition_name/your_ndk_directory/ndk-build.cmd
Abra el terminal Cygwin y muévase hacia el directorio
jni
del proyecto:cd /cygdrive/your_partition_name/project_jni_directory_path
Escribe
$ndkbuild
y espera a que el compilador finalice su tarea. Si este proceso es correcto, aparecerán dos directorios,obj
ylibs
. Compruebe que el directoriolibs
contiene alguna biblioteca con la extensión.so
. Finalmente, ejecuta el proyecto.
Por lo tanto, para resolver su problema, puede eliminar sus libs de 64 bits de su compilación, o configurar abiFilters para empaquetar solo las arquitecturas de 32 bits:
android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
agregue android.useDeprecatedNdk = true a un archivo llamado gradle.properties en la raíz de su proyecto
Tuve un mensaje de error similar. La solución para mí fue desinstalar la aplicación del simulador, limpiar el proyecto (incluidas todas las bibliotecas) y hacer una reconstrucción. Ahora la aplicación comienza bien.