Cómo mezclar archivos .so de 32 y 64 bits en una aplicación

Carmelo M 09/15/2017. 1 answers, 84 views
java android android linux android-ndk android-ndk ndk-build

Primero, sé que en una aplicación no se permite el uso mixto de diferentes arquitecturas del archivo .so (Parte solo usa 32, la otra parte solo usa 64)

Entonces, traté de abrir un nuevo proceso para cargar dinámicamente archivos de 64 y 32 bits, pero System.load() arrojó el error y la aplicación se bloqueó. ¿Cómo resolver este problema a través de múltiples procesos? ¿O hay alguna otra forma de resolver esto?

5 Comments
Markus 07/27/2017
Bienvenido a SO! Tómese un tiempo para leer las páginas de ayuda , especialmente las secciones tituladas "¿Qué temas puedo preguntar aquí?" y "¿Qué tipo de preguntas debo evitar preguntar?" . También, por favor, haga el recorrido y lea sobre cómo hacer buenas preguntas . Por último, aprenda a crear un ejemplo mínimo, completo y verificable . Los detalles sobre el error ayudarían mucho.
Alex Cohn 07/27/2017
Esa es una buena idea! Pero, ¿qué tipo de proceso hijo quieres comenzar? ¿Un servicio? No creo que esto funcione, porque el sistema decide si activar el modo de 32 bits según el análisis de su APK, y la JVM se configura en consecuencia.
Alex Cohn 07/27/2017
Consulte stackoverflow.com/a/31879900/192373 : el pm puede forzar el ABI mientras instala la aplicación.
Carmelo M 07/28/2017
@AlexCohn ¡Gracias! Estoy de acuerdo contigo, un proceso hijo (Activity) no puede resolver este problema. [Stackoverflow.com/a/31879900/192373] no funciona, porque quiero que parte de la función use .so de 32 bits, y parte del la función usa .so de 64 bits, en la misma aplicación.
Carmelo M 07/28/2017
@ AlexCohn ¿Tienes alguna otra idea? Dominar

1 Answers


Alex Cohn 07/30/2017.

Bueno, lo intenté. A primera vista, esto funciona: use armeabi shared libs 'de la manera habitual' y ejecute arm64-v8a ejecutable desde Java con Runtime.exec () o desde C con system () .

Puede colocar el ejecutable en activos y descomprimirlo manualmente, o puede hacer trampa y cambiarle el nombre para que comience con lib y termine con .so ; ahora puede poner este archivo en el directorio jniLibs/armeabi .

La manera opuesta también funciona: -fPIE ejecutable de 32 bits (no olvides -fPIE ) de la aplicación de 64 bits.

Asegúrese de que las rutas de búsqueda de la biblioteca no entren en conflicto.

2 comments
Carmelo M 08/04/2017
¡Esa es una idea genial! Mi proyecto no es similar a la operación de fondo de transcodificación de video, pero necesito cargar los gráficos tridimensionales, a través de SurfaceView para interactuar con los gestos del usuario. Cómo lidiar con esta interacción de UI es un gran problema, espero que pueda darme algunas ideas, gracias
Alex Cohn 08/04/2017
No creo que pueda manejar la interfaz de usuario o realizar gráficos en vivo a través de la comunicación entre procesos

Related questions

Hot questions

Language

Popular Tags