Escenario: tengo una aplicación de Android que utiliza una biblioteca con licencia LGPL. Para satisfacer esta licencia, vinculo dinámicamente a dicha biblioteca en tiempo de ejecución, lo que permite al usuario cambiar el archivo .so si hubiera una actualización de la biblioteca o por cualquier otro motivo.
Problema: Para intercambiar el archivo .so, el usuario tendría que desempaquetar la apk, reemplazar el archivo .so, volver a empaquetarlo y luego renunciar a él. Las herramientas como apktool funcionan bien para esto, pero mi aplicación se basa en gran medida en un backend que requiere que la apk esté firmada por mi almacén de claves. Así que el intercambio de esta biblioteca haría que la aplicación fuera inútil.
Mi solución: Cuando el usuario inicia la aplicación, simplemente copio el archivo .so de su casa en
"/ data / data / package name / lib" a un directorio al que el usuario puede acceder. Luego uso void *handle = dlopen("path/to/external/storage", RTLD_NOW|RTLD_GLOBAL);
para enlazar a la biblioteca. Esta solución funciona a la perfección y le permite al usuario cambiar libremente el archivo .so a su gusto.
Mi pregunta: ¿Hay algún riesgo de seguridad involucrado aquí? Aparte de ver al Sr. Robot, no tengo experiencia con el "pirateo". En este caso, alguien podría modificar y compilar su propio .so utilizando los mismos símbolos a los que me vinculo, lo que les permitiría ejecutar su código detrás de todos los permisos que mi aplicación ha permitido. ¿Es esta una amenaza potencial o no importa porque solo estaría en el dispositivo de ese usuario? ¿Hay una mejor manera de hacer esto? Finalmente, ¿es necesario que el usuario tenga acceso de esta manera ya que técnicamente pueden desempaquetar y volver a empaquetar la apk para cambiar el archivo .so para que la LGPL esté satisfecha aunque no puedan pasar la actividad de inicio de sesión después de hacerlo? ?