Cómo migrar los datos de la aplicación al cambiar la fuente de la aplicación

Digamos que tengo "FunnyApp" instalada desde Playstore, ahora aparece en F-Droid, y quiero reemplazar la versión de Playstore por la de F-Droid (el mismo problema viceversa). El problema es que no puedo simplemente actualizar la aplicación desde la nueva fuente porque la firma no coincide (F-Droid firma con su propia clave). FunnyApp no ​​ofrece ninguna funcionalidad de "exportación", pero no quiero perder sus datos.

¿Cuáles serían los posibles enfoques para realizar un cambio adecuado?

Trampas:

  • La simple actualización/instalación desde "la otra fuente" no funciona (falta de coincidencia de firma)
  • realizar solo datos adb backupno ayuda, ya que la restauración fallará por la misma razón

Tengo algunas ideas vagas sobre soluciones basadas en la raíz que aún no he probado (por ejemplo, Titanium Backup podría restaurar datos a pesar de la firma modificada, y también hay algún módulo XPosed (¿InstallerOpts?) que ofrece "suprimir la advertencia de firma "). Pero antes de "estropearlo todo", pensé en preguntar aquí si alguien ya podría haber intentado alguna solución con éxito.

Se prefieren las soluciones no root (para que más personas puedan beneficiarse), las soluciones basadas en root son aceptables, XPosed como requisito también está bien.


Algunas razones por las que uno podría querer "cambiar de fuente" (también conocido como "actualización cruzada"): Deshacerse de las dependencias propietarias, la aplicación ya no se actualiza en la fuente original...

Correcto, @iBug: el segundo fue XPrivacy. Siempre confundo cuál quiere la gran P y cuál no. Realmente no importa en este contexto, ¿verdad? Pero gracias por tu "confirmación de lectura" #D
Xposed es UNA palabra, mientras que XPrivacy es X + Privacidad (donde X es un prefijo común de algo que es un módulo Xp, como iSomething en App Store).

Respuestas (1)

Desarraigado

Lo siento, pero AFAIK no es posible :( ¡Nunca he visto ninguna aplicación/herramienta/utilidad que modifique con éxito los datos de otras aplicaciones, ni siquiera leer!
Alternativamente, podría hacer eso en una recuperación personalizada, pero ¿quién usa una recuperación personalizada sin rootear? Entonces Lee abajo.

Raíz simple (manera manual)

No te lo tomes demasiado a pecho. Simplemente retire sus datos originales, desinstale la aplicación original e instale la nueva, luego vuelva a mover los datos y chown. Los comandos de shell de muestra se encuentran a continuación.

# mv /data/data/com.example.foo /data/media
 * UNINSTALL_ORIGINAL_APP
 * INSTALL_NEW_APP
# ls -ld /data/data/com.example.foo
 * take note of the user (e.g. u0_a123)
# mv /data/media/com.example.foo /data/data
# chown -R 10123.10123 /data/data/com.example.foo

Explicaciones para cada paso:

  1. Mueva los datos de la aplicación original a un lugar alternativo. Debido a que Androis elimina automáticamente los archivos irrelevantes en ciertos directorios, necesitamos un lugar seguro como el Alt. AFAIK los archivos desconocidos se ignoran, por /data/medialo que se elige.
  2. Reemplazar aplicación. Sin explicación.
  3. Obtenga el UID de la aplicación recién instalada. El UID incorrecto hará que el Instalador de paquetes elimine los datos de la aplicación .
  4. Mueva los datos hacia atrás y cambie el UID.

Una pequeña nota: el chowncomando incorporado no acepta la opción -R(recursiva) de forma predeterminada en Android L o inferior. Necesitas BusyBox en ese caso. En Android M y versiones posteriores, funciona bien.

Utilidades raíz

  • Copia de seguridad de titanio

    Con TiBu, puede hacer una copia de seguridad de los datos existentes fácilmente, luego eliminar de forma segura la aplicación anterior e instalar la nueva. Luego, siempre que ambos paquetes tengan el mismo nombre de paquete, puede restaurar los datos de la aplicación con TiBu, ¡intactos!

    Sin embargo, esta solución es esencialmente una copia de seguridad de datos, por lo que no se mantendrá aquí. Si desea obtener más información sobre cómo realizar copias de seguridad y restaurar datos, consulte nuestra etiqueta wiki para , en la sección Copias de seguridad basadas en aplicaciones .

Módulos Xposed (más fácil, recomendado por iBug)

XInstaller y su sucesor, InstallerOpt , pueden enlazar Package Installer para permitir la instalación de paquetes con firmas que no coinciden (omitiendo la verificación de firmas). Luego, todos sus datos se conservan y puede cambiar fácilmente a diferentes versiones. Este es el método que estoy usando actualmente y ha estado funcionando bien. Lamentablemente, Xposed no está oficialmente disponible para Android N (hasta ahora), por lo que esta solución es solo para Android M y versiones anteriores.

Teóricamente, no deberían causar nada malo porque todo lo que hacen es enganchar la función de verificación de firma y cambiar su valor de retorno a un valor real, sin pasar por la verificación. Si el paquete de reemplazo tiene otros defectos además de la firma que no coincide, la instalación seguirá fallando, por lo que no se pueden instalar paquetes defectuosos incluso si omite la verificación de la firma.

Aviso importante
No se recomienda dejar esa opción (omitir verificación de firma) habilitada todo el tiempo. Dejarlo habilitado creará una gran falla de seguridad ya que también se pueden instalar aplicaciones pirateadas (casi siempre usan una firma diferente). Personalmente, lo habilito solo cuando es necesario y lo deshabilito tan pronto como terminé de reemplazar mi paquete.

¿Es efectivo el comando de shell de muestra? ¿Cómo puedo restaurar nuevamente mis aplicaciones si no funcionó en mi Android? Me gustaría tener una respuesta muy clara antes de probar esto en mi teléfono Android.
@JuanitoParungao El script de shell de muestra es exactamente lo que he hecho muchas veces sin una sola falla. Todavía pruébalo con cautela.
InstallerOpt funcionó de maravilla, gracias por asegurarme eso :)
¿Existen alternativas InstallerOpt/XInstaller mantenidas que funcionen en Android 9-12?