Cómo leer la base de datos de otra aplicación

Estoy trabajando en un dispositivo arraigado. He conectado con la cáscara del adb de mi PC y puedo verificar que la otra base de datos existe y puedo consultar sus tablas.

Sin embargo en el código de mi java cuando intento abrir la base de datos consigo el error

android.database.sqlite.SQLiteException: no se puede abrir el archivo de base de datos

Estoy intentando abrir la base de datos como esto:

SQLiteDatabase.openDatabase(PATH, null, SQLiteDatabase.OPEN_READONLY); 

El camino es algo como /data/data/com.xxx.xxx/databases/xx.db

¿Se supone que debo leer las bases de datos de otras aplicaciones como ésta o hay otra manera?

ACTUALIZACIÓN: También intenté hacer la aplicación del sistema como se ha aconsejado en este hilo Empuje mi apk a / system / app

Creo que funciona porque la aplicación no se puede desinstalar después de que desde el administrador de aplicaciones como las aplicaciones ordinarias, así que creo que es una aplicación del sistema. Pero aún así no puedo acceder a la base de datos aunque estoy seguro de que las rutas y los permisos están bien.

El sistema operativo Android de forma predeterminada no permite que las aplicaciones accedan a las carpetas privadas de cada uno. Para poder leer archivos que están en otra carpeta de aplicaciones:

1) necesita tener ambas aplicaciones instaladas utilizando el mismo user id . Añada esto a ambos manifiestos:

 android:sharedUserId="com.xx.xx" 

2) Si otra aplicación es una aplicación de terceros, su única opción es instalar su aplicación como aplicación del sistema. Para ello necesita un teléfono enraizado y necesita montar la carpeta del system . Y entonces usted necesita poner su aplicación en /system/app/ carpeta y reiniciar el teléfono. Debe instalarse automáticamente durante el arranque.

Supongo que los permisos en los archivos de base de datos se establecen de tal manera que su aplicación no tiene acceso. Incluso si su dispositivo está enraizado no significa que su aplicación se ejecuta como root.

Esto se debe a que la aplicación necesita raíz y necesita cambiar los permisos de la base de datos a la que intenta acceder para que pueda acceder a ella. Lo que tendrás que hacer es, como root, cambiar los permisos de la base de datos para que todos puedan acceder a ella, hacer lo que quieras en la base de datos, cerrar la base de datos y cambiar los permisos de nuevo.

Esto evita la seguridad de Android, así que proceda a su propio riesgo. Puede encontrar un ejemplo de código en:

http://rratmansky.wordpress.com/?p=259&preview=true

  • Cómo obtener las cadenas de un cursor en Android?
  • Obtención de todos los registros de sqlite android
  • Sincronizar SQLite con un servidor de bases de datos SQL externo
  • Permiso de negación: esto requiere android.permission.INTERACT_ACROSS_USERS_FULL
  • Android: ¿Cómo acceder a una sola base de datos de múltiples actividades en la aplicación?
  • Cómo extraer el cursor y el valor entero de una matriz de clase Object
  • Aclaración sobre el row_id devuelto por la instrucción de inserción de sqlite
  • HTML5 Webapp como icono o aplicación regular en iPhone y Android.
  • No puedo crear una base de datos SQLite en mi aplicación android
  • ¿Está bien tener una instancia de SQLiteOpenHelper compartida por todas las actividades en una aplicación de Android?
  • Sugar ORM simplemente no creará tablas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.