Как я могу вытащить базы данных с моего Android на рабочий стол? - PullRequest
6 голосов
/ 17 ноября 2010

Я пробую это с моим Nexus One. У меня есть Android SDK и я использовал команду adb pull /data/data/com.myapp.android/databases C: \ pulls но все, что я получаю, это pull: создание списка файлов ... 0 файлов вытащил. 0 файлов пропущено. Кроме того, кажется, независимо от того, сколько данных я добавляю в учебное приложение NotePad, которое я установил, размер данных для приложения (как показано в настройках) никогда не превышает 8 КБ. Как это возможно? Есть ли другое место, где хранятся базы данных? Когда я использую представление File Explorer (это часть ADT) в Eclipse, я вижу, что в / data ничего нет. Чтобы добавить поворот, я без проблем вытягиваю любые другие файлы с устройства. У меня просто проблемы с базами данных. Я что-то пропустил? Большое спасибо.

Ответы [ 3 ]

10 голосов
/ 17 ноября 2010

Доступ к внутренней памяти невозможен, если ваш телефон не рутирован.Одним простым способом является использование эмулятора, и тогда вы можете получить доступ к файлам.Для получения базы данных с устройства я написал небольшую утилиту и добавил для нее некоторый интерфейс отладки:

private void backupDb() throws IOException {
    File sd = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();

    if (sd.canWrite()) {

        String currentDBPath = "/data/com.yourcompany.yourapp/databases/yourapp.db";
        String backupDBPath = "/yourapp_logs/yourapp.db";

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

        if (backupDB.exists())
            backupDB.delete();

        if (currentDB.exists()) {
            makeLogsFolder();

            copy(currentDB, backupDB);
       }

        dbFilePath = backupDB.getAbsolutePath();
   }
}

 private void makeLogsFolder() {
    try {
        File sdFolder = new File(Environment.getExternalStorageDirectory(), "/yourapp_logs/");
        sdFolder.mkdirs();
    }
    catch (Exception e) {}
  }

private void copy(File from, File to) throws FileNotFoundException, IOException {
    FileChannel src = null;
    FileChannel dst = null;
    try {
        src = new FileInputStream(from).getChannel();
        dst = new FileOutputStream(to).getChannel();
        dst.transferFrom(src, 0, src.size());
    }
    finally {
        if (src != null)
            src.close();
        if (dst != null)
            dst.close();
    }
}
0 голосов
/ 09 апреля 2013

Если вы используете MAC или Linux, попробуйте этот скрипт.Для этого не требуются права root

#!/bin/bash

REQUIRED_ARGS=2
ADB_PATH=/Users/Tadas/Library/sdk/platform-tools/adb
PULL_DIR="~/"

if [ $# -ne $REQUIRED_ARGS ]
    then
        echo ""
        echo "Usage:"
        echo "android_db_move.sh [package_name] [db_name]"
        echo "eg. android_db_move.sh lt.appcamp.impuls impuls.db"
        echo ""
    exit 1
fi;


echo""

cmd1="$ADB_PATH -d shell 'run-as $1 cat /data/data/$1/databases/$2 > /sdcard/$2' "
cmd2="$ADB_PATH pull /sdcard/$2 $PULL_DIR"

echo $cmd1
eval $cmd1
if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

echo $cmd2
eval $cmd2

if [ $? -eq 0 ]
    then
    echo ".........OK"
fi;

exit 0
0 голосов
/ 04 сентября 2012

Создайте файл «pull.bat» на рабочем столе Windows.

В файле положено:

db pull /data/com.APPNAME/databases/DBNAME.sqlite
pause
...