Android एमुलेटर SQLite डेटाबेस को कहाँ संग्रहीत करता है?


108

मैं एक Android एप्लिकेशन पर काम कर रहा हूं जो SQLite डेटाबेस में डेटा संग्रहीत करता है। मेरा सवाल यह है कि जब आप एमुलेटर का उपयोग कर रहे हैं तो यह डेटाबेस फाइल फाइलसिस्टम पर कहां जमा होती है?

मैंने देखा है कि यह अंदर संग्रहीत है

/data/data/package_name/databases

लेकिन मुझे यह जानने की जरूरत है कि मेरी स्थानीय मशीन की हार्ड ड्राइव पर जहां वास्तव में नक्शे हैं। डेटाबेस मशीन को बंद करने के बाद भी एमुलेटर के कई रनों पर टिका रहता है, इसलिए यह रैम में नहीं बस सकता है ...

जवाबों:


55

एमुलेटर का फाइलसिस्टम आपकी हार्ड ड्राइव पर निर्देशिका में मैप नहीं करता है। एमुलेटर की डिस्क छवि को एक छवि फ़ाइल के रूप में संग्रहीत किया जाता है, जिसे आप या तो ग्रहण (टूलबार में G1- दिखने वाले आइकन के लिए देख सकते हैं) के माध्यम से प्रबंधित कर सकते हैं, या स्वयं एमुलेटर बाइनरी के माध्यम से (विकल्पों के विवरण के लिए "एमुलेटर -एचएलपी" चला सकते हैं) ।

आप कमांड लाइन से जैक में चल रहे एमुलेटर में एडब का उपयोग करने के लिए सर्वश्रेष्ठ हैं। यदि आप विशिष्ट निर्देशिका और फ़ाइल नाम प्राप्त कर सकते हैं, तो आप एमुलेटर की डेटाबेस फ़ाइल और अपनी नियमित हार्ड ड्राइव पर प्राप्त करने के लिए "अदब पुल" कर सकते हैं।

संपादित करें : हटाए गए सुझाव कि यह बिना डिवाइस के भी काम करता है - यह केवल एमुलेटर के लिए काम करता है, और ऐसे डिवाइस जहां आप रूट के रूप में एडीबी चला रहे हैं।


6
मैं ग्रहण से ddms के माध्यम से DB बंद हो गया। मेरे परिवर्तन किए, फिर पीछे धकेल दिया। एक जादू की तरह काम किया।
IMMuch

@ I82Much ने मेरे लिए भी काम किया, ग्रहण के परिप्रेक्ष्य को ddms में बदला और फिर आप वहाँ की डेटा फ़ाइल पा सकते हैं।
vanzylv

2013 अद्यतन: एक Jelly Bean डिवाइस पर, आप कर सकते हैं नहीं adb pull(यहां तक कि के साथ सही पथ!), यदि आप नहीं कर रहे हैं जड़
बिल द एप

यह एक अद्यतन नहीं है, मूल रूप से स्टार्ट ऐप से निजी फाइलें सुरक्षित उपकरणों पर अदब से निजी रही हैं। लेकिन यह सवाल एमुलेटर के बारे में है, जहां एडीबी रूट के रूप में चलता है।
क्रिस स्ट्रैटन

6
डेटाबेस को एमुलेटर से आपकी स्थानीय मशीन तक खींचने का एक उदाहरण हैadb pull /data/data/com.activeandroid.test/databases/Application.db ~/Development/Application.db
यहोशू पिंटर

123

नीचे टिप्पणी में उल्लिखित अपडेट:

आपको अब DDMS के परिप्रेक्ष्य में होने की आवश्यकता नहीं है, बस ग्रहण विंडो से फ़ाइल एक्सप्लोरर खोलें > दृश्य देखें> अन्य ... ऐसा लगता है कि एप्लिकेशन को भी चलने की आवश्यकता नहीं है, मैं विभिन्न एप्लिकेशन फ़ाइल में ब्राउज़ कर सकता हूं सामग्री। मैं ADB संस्करण 1.0.29 चला रहा हूं


या, आप पुराने दृष्टिकोण की कोशिश कर सकते हैं:

अपने ग्रहण आईडीई पर डीडीएमएस परिप्रेक्ष्य खोलें

( विंडो> ओपन पर्सपेक्टिव> अन्य> डीडीएमएस )

और सबसे महत्वपूर्ण:

आपका आवेदन इस तरह से होना चाहिए कि आप फोल्डर्स और फाइल्स की विविधता देख सकें

फिर फ़ाइल एक्सप्लोरर टैब में आप पथ का अनुसरण करेंगे:

डेटा> डेटा> आपका पैकेज-नाम> डेटाबेस> आपका डेटाबेस-फ़ाइल

फिर फ़ाइल का चयन करें, .db फ़ाइल डाउनलोड करने के लिए स्क्रीन के दाएं कोने में स्थित डिस्केट आइकन पर क्लिक करें । यदि आप एमुलेटर पर एक डेटाबेस फ़ाइल अपलोड करना चाहते हैं तो आप फोन आइकन (डिस्केट आइकन के बगल में) पर क्लिक कर सकते हैं और अपलोड करने के लिए फ़ाइल चुन सकते हैं।

यदि आप .db फ़ाइल की सामग्री देखना चाहते हैं , तो मैं आपको SQLite डेटाबेस ब्राउज़र का उपयोग करने की सलाह देता हूं, जिसे आप यहां डाउनलोड कर सकते हैं

PS: यदि आप डेटाबेस को वास्तविक डिवाइस से देखना चाहते हैं, तो आपको अपना फ़ोन रूट करना होगा।


5
अगर कोई सोच रहा है, तो आपको 'फ़ाइल एक्सप्लोरर' टैब पर क्लिक करना होगा।
MSpeed

हाय साइबर, मुझे डेटाबेस फाइल मिली लेकिन क्या आप मुझे बता सकते हैं कि इस फाइल को कैसे खोलें? या यह कैसे सामग्री है देखने के लिए?
नीलेश निकुंभ

4
@NileshNikumbh फ़ाइल का चयन करें, और डिस्केट आइकन पर क्लिक करें और चुनें कि आप इसे कहाँ स्टोर करना चाहते हैं। आपको SQLite ब्राउज़र डाउनलोड करने की भी आवश्यकता है। sourceforge.net/projects/sqlitebrowser इसे स्थापित करने के बाद, बस .db फ़ाइल खोलें, ब्राउज़ डेटा टैब चुनें, और वह कॉलम जिसे आप देखना चाहते हैं।
12:20

महान पद! मैं एमुलेटर डिवाइस से साइक्लाईट फ़ाइल प्राप्त करने में समस्याएँ पेश कर रहा हूँ:Failed to pull selection (null)
जनवरी-तेरेज सोरेनसेन

@OckhamsRazor यदि आप डेटाबेस को वास्तविक डिवाइस से देखना चाहते हैं (एमुलेटर नहीं) तो आपको अपना फ़ोन रूट करना होगा।
rogcg

18

अन्य उत्तर गंभीर रूप से पुराने हैं। Android Studio के साथ , यह इसे करने का तरीका है:

  1. Tools> Android> Android Device Monitor पर क्लिक करें

यहां छवि विवरण दर्ज करें

  1. फ़ाइल एक्सप्लोरर पर क्लिक करें

यहां छवि विवरण दर्ज करें

  1. अपनी db फाइल पर नेविगेट करें और सेव बटन पर क्लिक करें।

यहां छवि विवरण दर्ज करें


1
"एंड्रॉइड डिवाइस मॉनिटर को एंड्रॉइड स्टूडियो 3.1 में पदावनत किया गया था और एंड्रॉइड स्टूडियो 3.2 से हटा दिया गया था। एंड्रॉइड डिवाइस मॉनिटर के माध्यम से आप जिन सुविधाओं का उपयोग कर सकते थे, उन्हें नई सुविधाओं से बदल दिया गया है ..." developer.android.com/studio/profile/monitor
पीट एल्विन

8

एंड्रॉइड स्टूडियो 3.4.1 में, आप "डिवाइस फ़ाइल एक्सप्लोरर" खोजने के लिए एंड्रॉइड स्टूडियो की खोज सुविधा का उपयोग कर सकते हैं और फिर अपने एमुलेटर के / डेटा / डेटा / पैकेज_नाम / डेटाबेस निर्देशिका पर जा सकते हैं।


6

मैंने एक साधारण बैश स्क्रिप्ट लिखी है, जो आपके कंप्यूटर पर एंड्रॉइड डिवाइस से डेटाबेस खींचती है (लिनक्स, मैक उपयोगकर्ता)

फ़ाइल नाम: android_db_move.sh उपयोग: android_db_move.sh com.example.app db_name.db

#!/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

6

चूंकि प्रश्न एंड्रॉइड स्टूडियो तक ही सीमित नहीं है, इसलिए मैं विजुअल स्टूडियो 2015 (ज़ामरीन के लिए काम किया गया) के लिए रास्ता दे रहा हूं।

उपकरण-एंड्रॉइड-एंड्रॉइड डिवाइस मॉनिटर

यहां छवि विवरण दर्ज करें

  • उपरोक्त छवि में बताई गई डेटाबेस फ़ाइल का पता लगाएँ, और चित्र 2 में दिखाए गए अनुसार पुल बटन पर क्लिक करें।
  • फ़ाइल को अपने इच्छित स्थान पर सहेजें।
  • आप उस फ़ाइल को SQLite के लिए SQLite Studio या DB Browser का उपयोग करके खोल सकते हैं।

इस सवाल के अन्य उत्तरदाताओं के लिए विशेष धन्यवाद।


4

डेटाबेस को SQLite फ़ाइलों / डेटा / डेटा / पैकेज / डेटाबेस / डेटाबेस के रूप में संग्रहीत किया जाता है :

  • पैकेज AndroidManifest.xml (टैग "प्रकट", विशेषता "पैकेज" में घोषित पैकेज है)
  • DATABASEFILE उस नाम को दिया गया है जब आप SQLiteOpenHelper कंस्ट्रक्टर को कॉल करते हैं, जैसा कि यहाँ बताया गया है: http://developer.android.com/guide/topics/data/data-storage.html#db

आप फ़ाइल एक्सप्लोरर टैब में, डीडीएमएस परिप्रेक्ष्य का चयन करते हुए एमुलेटर में डेटाबेस फ़ाइल को (फाइल / सिस्टम से कॉपी) देख सकते हैं ।


3

सरल समाधान - एमुलेटर और कनेक्टेड डिवाइस दोनों के लिए काम करता है

1 वर्तमान में उपलब्ध उपकरणों / एमुलेटरों की सूची देखें।

$ adb devices

जुड़े हुए उपकरणों की सूची

G7NZCJ015313309 डिवाइस एमुलेटर -5554 डिवाइस

9885b6454e46383744 डिवाइस

2 अपने डिवाइस / एमुलेटर पर बैकअप चलाएं

$ adb -s emulator-5554 backup -f ~/Desktop/data.ab -noapk com.your_app_package.app;

3 Data.ab निकालें

$ dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -;

आपको /dbफ़ोल्डर में डेटाबेस मिलेगा


यदि आप OS X पर हैं तो आपको खुलने वाले zlib भाग की याद आ रही होगी। आप इस कार्य का उपयोग कर सकते हैं: $ dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
लेज़स मैग्यूसेन

मेरे लिए काम नहीं करता है। मैं मिल रहा हूँbash: adb: command not found
Matthias

0

एंड्रॉइड डॉक्स के अनुसार , मॉनिटर को एंड्रॉइड स्टूडियो 3.1 में हटा दिया गया था और एंड्रॉइड स्टूडियो 3.2 से हटा दिया गया था। फ़ाइलों तक पहुँचने के लिए, एंड्रॉइड स्टूडियो में एक टैब होता है जिसे "डिवाइस फ़ाइल एक्सप्लोरर" कहा जाता है। विकासशील विंडो के नीचे-दाईं ओर जिसे आप अपने ई-मेल रिकॉर्डर सिस्टम तक पहुंचा सकते हैं। बस पालन करें

/ डेटा / डाटा / PACKAGE_NAME / डेटाबेस

सौभाग्य।

Android डिवाइस फ़ाइल एक्सप्लोरर


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.