¿Cómo acceder a la carpeta de datos / datos en el dispositivo Android?


316

Estoy desarrollando una aplicación y sé que mi base de datos *.dbaparecerá endata/data/com.****.***

Puedo acceder a este archivo desde AVD en Eclipse con la ayuda del administrador sqlite

Pero no puedo acceder a este archivo en mi teléfono Android.
Lo busco en Google y dice que necesito rootear mi teléfono para hacerlo, pero no quiero hacerlo. (Teléfono nuevo, problemas de garantía y problemas de seguridad)

Así que aquí está mi pregunta: ¿Cómo puedo acceder a mi data/data/.....directorio en mi teléfono Android " sin rootearlo "?

¿Puedo cambiar los permisos de usuario para el directorio data/data.....sin rootearlo?


1
¿tiene el archivo database.db .. ???
Amit Prajapati

si estoy usando la base de datos - "openOrCreateDatabase (....)"
Naveen Prince P

55
Definitivamente necesitarás rootear el teléfono antes que nada. Entonces necesitará una aplicación de administrador de archivos competente que pueda usar. El administrador de archivos ASTRO es popular pero no tiene soporte de acceso a la raíz, por lo que es inútil para los usuarios avanzados. Debería poder utilizar ES File Explorer o File Expert. Recientemente tuve problemas para ver / datos / datos u otras carpetas protegidas con ES File Explorer y lo he abandonado, y ahora estoy usando File Expert. Ambos requieren que vaya a la configuración y habilite la opción de explorador raíz (y, a veces, también monte el sistema de archivos como grabable). Entonces debes hacer eso primero.
Samir

Esto no es preguntas ni respuestas relacionadas con la programación.
SkyWalker

Respuestas:


375

Acceder a los archivos directamente en su teléfono es difícil, pero puede copiarlos a su computadora donde puede hacer lo que quiera con él. Sin rooting tienes 2 opciones:

  1. Si la aplicación es depurable, puede usar el run-ascomando en adb shell

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. Alternativamente, puede utilizar la función de copia de seguridad de Android.

    adb backup -noapk com.your.packagename

    Ahora se le pedirá que 'desbloquee su dispositivo y confirme la operación de copia de seguridad'. Es mejor NO proporcionar una contraseña, de lo contrario, será más difícil leer los datos. Simplemente haga clic en 'respaldar mis datos'. El archivo 'backup.ab' resultante en su computadora contiene todos los datos de la aplicación en formato de copia de seguridad de Android. Básicamente es un archivo tar comprimido. Esta página explica cómo puede usar el comando zlib de OpenSSL para descomprimirlo. Puede usar el adb restore backup.dbcomando para restaurar la copia de seguridad.


15
adb backup -f \location\on\local\drive -noapk app.package.namefuncionó para mí sin root
theblang

24
Use este comando para descomprimir su archivo de respaldo:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
En la Opción 1, ¿cómo le digo al comando cp que los guarde en mi computadora portátil (Mac)? Si da un ejemplo de Win, también me gustaría saberlo, y lo traduciré. Gracias.
Gerard

10
Importante: la ejecución adb backup -noapk com.your.packagenameguardará el archivo ab en el directorio actual , así que asegúrese de haber navegado en el directorio correcto (por ejemplo cd Desktop..)
Menelaos Kotsollaris

66
Tenga en cuenta que el enfoque de copia de seguridad generará una copia de seguridad vacía si su aplicación ha desactivado las copias de seguridad android:allowBackup="false"en el manifiesto.
Tom

130

Si está utilizando Android Studio 3.0 o una versión posterior, siga estos pasos.

  1. Haga clic en Ver > Ventanas de herramientas > Explorador de archivos del dispositivo .
  2. Expanda los nodos / data / data / [nombre-paquete] .

Solo puede expandir paquetes que se ejecutan en modo de depuración en dispositivos no rooteados.

Pasos seguidos en Android Studio 3.0


1
No puedo ver nada en este muelle. y no me digas nada. sabes cual es el problema?
Mahdi Azadbar

1
Esto funciona solamente en el modo de depuración, no puede divulgarse-construye
itinance

¡Gracias por mostrar la forma sin pita de mirar en el sistema de archivos!
Lensflare

Parece que no tengo la opción en la versión 3.0.1, ¿se ha movido?
Codingale

1
Esto es asombroso. Ojalá hubiera sabido esto hace un tiempo.
checkmate711

59

También puede intentar buscar el db usando la aplicación de exploración de raíz. Y si eso no funciona, puedes probar esto:

  1. Cmd abierto
  2. Cambie su directorio y vaya a 'Herramientas de plataforma'
  3. Tipo ' adb shell'
  4. su
  5. Presione 'Permitir' en el dispositivo
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Abra la vista DDMS en Eclipse y desde allí abra 'FileExplorer' para obtener el archivo deseado

Después de esto, debería poder explorar los archivos en el dispositivo rooteado.


2
Creo que la aplicación root explore solo funciona para teléfonos rooteados. Probaré el segundo método
Naveen Prince P

55
Incapaz de modificar / datos: Operación no permitida
bofredo

@bofredo Creo que es porque tu teléfono no está rooteado. deberías
rootear

1
@mahemadhi sí, probablemente tenga que ejecutar este comando manualmente para cada directorio, ya que todos los directorios tienen permisos privados para ellos.
Sheraz Ahmad Khilji

1
@VivekChavda sí requieren teléfono
rooteado

21

Para hacer cualquiera de los anteriores (es decir, acceder a carpetas protegidas desde su propio teléfono), aún necesita root. (Eso incluye cambiar los permisos de montaje en la carpeta / data y acceder a ella)

Sin root, no es posible acceder /datadirectamente a leer excepto desde su aplicación a través del código. Por lo tanto, puede intentar copiar ese archivo en una tarjeta SD o en un lugar accesible, y luego, debería poder acceder a él normalmente.

El enraizamiento no anulará su garantía si tiene un dispositivo desarrollador. Lo siento, no hay otra manera AFAIK.


No estoy usando un dispositivo de desarrolladores. El mío es Xperia U
Naveen Prince P

¿Puedo editar el permiso de usuario de la carpeta de datos con comandos chmode?
Naveen Prince P

Toda la partición está montada como de solo lectura. Yo diría que su mejor apuesta sería adb pullcomo se menciona en la respuesta a continuación.
Anirudh Ramanathan

I es posible si la aplicación lo permite. Todos los directorios tienen permiso x para todos (pero no r para todos, por lo que debe conocer la ruta). Depende de si la aplicación hizo que el mundo del archivo fuera accesible o no. Algunos archivos son, la mayoría no lo son.
Jan Hudec

Primero dice que es imposible de leer, luego sugiere copiar el archivo en otro lugar. Pero, ¿cómo copiar un archivo sin leerlo en primer lugar? Creo que esta respuesta tiene errores.
hasta el

13

La forma más fácil (solo un simple paso) de extraer un archivo de su carpeta de aplicación depurable (digamos /data/data/package.name/databases/file) en un dispositivo Android 5.0+ sin raíz es mediante este comando:

adb exec-out run-as package.name cat databases/file > file

12
  1. Abra su símbolo del sistema
  2. Cambie el directorio a E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
  3. Ingrese los siguientes comandos
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Cambie el directorio a cd /sdcardpara asegurarse de que database.dbesté allí.
  7. adb pull /sdcard/database.db o simplemente puede copiar database.db del dispositivo.

Funciona perfecto para mi. ¡Gracias! Pero en mi caso, el nombre del archivo de la base de datos no tiene extensión .db.
technik

10

Use el Explorador de archivos en eclipse. Seleccione Windows => Mostrar vista => Otro ... => Explorador de archivos.

Otra forma es extraer el archivo a través de adb:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

5

También tuve el mismo problema una vez. No hay forma de acceder directamente al archivo dentro de los dispositivos Android, excepto adb shell o dispositivo de rooteo.

Además de aquí hay 02 alternativas:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {

    }
}

2) Pruebe esto: https://github.com/sanathp/DatabaseManager_For_Android


5

Para hacer una copia de seguridad de Android en el escritorio

Abra la línea de comando cmd y ejecute esto: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . No ingrese la contraseña y haga clic en Respaldar mis datos. Asegúrese de no guardar en la unidad C root. Se te puede negar. Es por eso que guardé en C: \ Intel.

Para extraer el archivo * .ab

  1. Vaya aquí y descargue: https://sourceforge.net/projects/adbextractor/
  2. Extraiga el archivo descargado y navegue a la carpeta donde lo extrajo.
  3. ejecute esto con sus propios nombres de archivo: java -jar abe.jar descomprima c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

1
Esta es una gran respuesta, gracias. Me funcionó para extraer una copia de seguridad de aplicación única creada en un dispositivo Xiaomi (con extensión .bak). No se requiere enraizamiento
ruso

4

En un dispositivo rooteado , la solución correcta es esta:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

La solución original funcionó, pero el chmod devolvería un directorio desconocido. Cambiar el comando chmod a / data / data / * dio acceso a todas las subcarpetas en el directorio de datos desde DDMS en Intellij. Supongo que la misma solución es cierta para Eclipse DDMS.

ACTUALIZACIÓN Entonces, lo que he encontrado es extraño. Estoy ejecutando un Nexus 6 usando DDMS en IntelliJ (Android Device Monitor). He creado una pequeña aplicación de inicio. Dicha aplicación guarda datos en un archivo .csv en data / data / com.example.myapp / files

Cuando comencé a intentar acceder a este archivo en mi Nexus 6, descubrí que tenía que rootear el dispositivo. Podía ver la carpeta de datos, pero intentar abrirlo no funcionaría. Como se mencionó en línea en otros lugares, el expandir + desaparecería y luego reaparecería poco después (tenga en cuenta que hay soluciones en la web que afirman permitir el acceso a estas carpetas sin rootear, no las encontré hasta demasiado tarde, y estoy no estoy seguro si prefiero no rootear de todos modos ((prefiero poder hacerlo manualmente que confiar en una aplicación o símbolo del sistema para darme mis soluciones))). Rooteé mi 6 e intenté DDMS nuevamente.

En este punto, me mostró la carpeta de datos y pude expandir la carpeta y ver el com. directorios, pero no pude abrir ninguno de ellos. Fue entonces cuando descubrí la solución anterior. Las instrucciones iniciales no funcionarían en esta parte:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

Fue entonces cuando probé la solución que publiqué:

chmod 777 /data /data/data /data/data/*

Esa solución parecía funcionar, pero solo en ciertas carpetas. Ahora podría expandir mi carpeta myapp, pero no podría expandir el directorio de archivos en ella.

En este punto, jugué un rato y luego pensé por qué no solo probarlo en el directorio que necesitaba en lugar de probar estas entradas comodín.

chmod 777 /data /data/data /data/data/com.example.myapp/*

Seguido por:

chmod 777 /data /data/data /data/data/com.example.myapp/files

Estos comandos me permitieron expandir y ver los archivos en el directorio de mi aplicación para confirmar que el .csv se estaba guardando correctamente.

Espero que esto ayude a alguien. ¡Luché con esto por horas!

(para agravar esto un poco más, por extraño que parezca, los permisos no pasaron al archivo .csv que pasó al directorio de archivos. Mis permisos del directorio de archivos leen drwxrwxrwx y mis permisos de archivo log.csv leen -rw-rw --- - .. solo para tu información)


2

Puede descargar un archivo sigle así:

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

Antes de descargar puede que desee echar un vistazo a la estructura de archivos en su App-Directory. Para ello, realice los siguientes pasos que se han THelperindicado anteriormente:

adb shell
run-as com.your.packagename 
cd files
ls -als .

El androide-Studio manera Shahidulmencionada ( https://stackoverflow.com/a/44089388/1256697 trabajo) también. Para aquellos que no ven la DeviceFile ExplorerOpción en el Menú: Asegúrese de abrir el directorio / android en Android Studio. Por ejemplo, los usuarios de react-native tienen esto dentro de su Project-Folder directamente en el mismo nivel que el / ios-Directory.


1

Una de las formas simples es crear su base de datos en la tarjeta SD. Porque no puede obtener acceso a la carpeta de datos de su teléfono en la memoria interna, a menos que arraigue su teléfono. Entonces, ¿por qué no simplemente crear su base de datos en la tarjeta SD?

Además, si lo desea, puede escribir un código de copia de archivo para copiar su archivo de base de datos existente (desde la memoria interna) a la memoria externa sin requerir ninguna raíz.


¿cómo hacerlo? ¿Cómo puedo crear una base de datos en tarjeta sd?
Naveen Prince P

Este método lo ayudará a crear una base de datos en una tarjeta SD. Simplemente proporcione una ruta de acceso Filea la tarjeta SD y
estará

1

puede ser para acceder a esta carpeta necesita derechos administrativos.

Así que tienes dos opciones:-

  1. rootear su dispositivo y luego intentar acceder a esta carpeta
  2. usar emulador

ps: si está utilizando cualquiera de las dos opciones anteriores, puede acceder a esta carpeta siguiendo estos pasos

abra la perspectiva DDMS -> su dispositivo -> (Seleccione el Explorador de archivos de las opciones de la ventana derecha) seleccione el paquete -> datos -> datos -> nombre del paquete -> archivos

y desde allí puedes abrir tu archivo


1

adb backupno funcionó para mí, así que esto es lo que hice (Xiaomi Redmi Note 4X, Android 6.0):
1. Vaya a Configuración> Configuración adicional> Copia de seguridad y restablecer> Copias de seguridad locales .
2. Toque 'Copia de seguridad' en la parte inferior de la pantalla.
3. Desmarque las marcas de verificación 'Sistema' y 'Aplicaciones'.
4. Toque el botón de divulgación de detalles a la derecha de la celda 'Aplicaciones' para navegar a la pantalla de selección de aplicaciones.
5. Seleccione la aplicación deseada y toque Aceptar.
6. Una vez completada la copia de seguridad, el archivo real debe ubicarse de alguna manera. La mía se puede encontrar en / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ .
7. Luego seguí los pasos de esta respuesta de RonTLVpara convertir realmente el archivo de respaldo (.bak en mi caso) a tar (duplicando la respuesta original):
"
a) Vaya aquí y descargue: https://sourceforge.net/projects/adbextractor/
b) Extraiga el archivo descargado y navegue a la carpeta donde extrajo.
c) ejecute esto con sus propios nombres de archivo: java -jar abe.jar descomprima c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"


0

puede copiar este archivo db en algún lugar de eclipse explorer (por ejemplo: sdcard o PC), y puede usar sqlite para acceder y actualizar este archivo db.



0

También puede intentar copiar el archivo a la carpeta de la tarjeta SD, que es una carpeta pública, luego puede copiar el archivo a su PC donde puede usar sqlite para acceder a él.

Aquí hay un código que puede usar para copiar el archivo de datos / datos a una carpeta de almacenamiento público:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.db";

            File currentDB = new File(currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Manifiesto:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

No se puede acceder a todas las acciones para copiar el archivo si el archivo no comparte Permiso de lectura para otros
Steve Luck

0

La base de datos SQLlite se almacena en el teléfono del usuario y se esconde debajo de la ruta:

/Data/Data/com.companyname.AppName/File/

Tienes 2 opciones aquí:

  1. puede rootear su teléfono para tener acceso a ver su archivo oculto db3
  2. Esto no es una solución, sino una solución. ¿Por qué no simplemente crear una página de prueba que muestre su tabla de base de datos usando la declaración 'select'?
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.