Intereting Posts
Может ли IntentService работать бесконечно? Издатель закрыл входной канал или произошла ошибка. события = 0x8 Loop для загрузки списка изображений по одному Android: Как проверить, доступен ли сервер? Неправильно ли использовать экземпляр контекста приложения? Файл Keystore не существует Как я могу избежать выпадающего списка автозаполнения, появляющегося при программном наборе текста? Android: java.lang.OutOfMemoryError: не удалось выделить выделение байтов 23970828 с 2097152 бесплатными байтами и 2 МБ до тех пор, пока OOM Android LogCat выводит только последнюю строку Как сделать Android-приложение без использования Android Studio? Android-мобиль не обнаруживает беспроводную сеть, созданную на моем ноутбуке Android – изменение размера текста EditText на основе клавиатуры Android: пользовательский вид для пункта меню ClassNotFoundException чтение объекта Serializable в классе, расширяющем MapFragment в onSaveInstanceState Как изменить AndroidManifest во время выполнения?

Проводник DDMS-файлов не может получить доступ к данным \ data (HTC Desire HD)

Я работаю над некоторым кодом SQLite и хотел бы изучить базу данных. Если я запустил код в эмуляторе, я могу вытащить файл из data \ data \ myProject \ databases с помощью диспетчера файлов DDMS, но если я запустил его на самом аппаратном обеспечении, папка data \ data недоступна. Есть ли способ обойти это, кроме как получить root-доступ к телефону?

Solutions Collecting From Web of "Проводник DDMS-файлов не может получить доступ к данным \ data (HTC Desire HD)"

База данных SQLIte на самом деле представляет собой только файл, хранящийся в памяти телефона, который вы можете скопировать на SD-карту телефона и затем легко получить к нему доступ с вашего ПК. Ниже приведена функция, которая делает именно то, что вам нужно. Перед использованием функции обязательно измените имя своего пакета и имя базы данных.

public static void backupDatabase() throws IOException { //Open your local db as the input stream String inFileName = "/data/data/your.package.name/databases/database.sqlite"; File dbFile = new File(inFileName); FileInputStream fis = new FileInputStream(dbFile); String outFileName = Environment.getExternalStorageDirectory() + "/database.sqlite"; //Open the empty db as the output stream OutputStream output = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer))>0){ output.write(buffer, 0, length); } //Close the streams output.flush(); output.close(); fis.close(); } 

Как вы можете заметить из кода, база данных всегда хранится в папке:

 /data/data/your.package.name/databases/ 

Имя (в нашем примере «database.sqlite») – это тот, который вы выбрали при расширении SQLiteOpenHelper. Очевидно, вам также нужно заменить «your.package.name» на имя вашего пакета приложений.

Вы должны укоренить свое устройство. Перейдите в командную строку и перейдите в папку, где находится ваш adb.

например

C: \ Program Files \ Android \ android-sdk \ platform-tools

adb root . Перейдите в свой проводник и проверьте файл.

Скопируйте файл в / mnt / sdcard, используя

 cp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard 

Используя adb, а затем скопируйте на свой рабочий стол с / mnt / sdcard, используя

 adb pull /mnt/sdcard/<filename> 

А затем используйте sqlite3 для его просмотра.

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

Однако ваше приложение не может изменить отсутствие разрешения на список в каталоге / data защищенного телефона.

В результате вам придется захватить файл с помощью «adb pull / full / path / to / file» – вы не можете его просматривать, так как вы не можете создать список / данные или, возможно, несколько других промежуточных родителей вашего файла.

Реально о единственном пути вокруг этого – поместить ваш файл в какое-то место, где вы можете получить доступ к нему, как на SD-карте во время разработки. Затем, как только вы удовлетворены, все работает правильно, поместите файл туда, где вы хотите.

Я говорю это, потому что у меня есть розничная Nexus One и разработчик Nexus One. При использовании DDMS File Explorer я заметил, что могу просматривать папку с данными на устройстве разработчика, но не мог на розничном устройстве. Я укрепил свой розничный магазин, и это не помогло.

Поэтому я предполагаю, что над этой проблемой должно быть сделано больше исследований. Но до тех пор я надеюсь, что это поможет.