2013-08-10 4 views
6

मुझे अपने उबंटू जनरेशन की स्थापना के साथ कोई समस्या है। मुख्य रूप से मैं अपने डेटाबेस को डीबग करने में असमर्थ हूं क्योंकि डीबीएमएस के माध्यम से ग्रहण और एडीबी खोल में मैं/डेटा/फ़ोल्डर की सामग्री नहीं देख सकता। कोई फाइल नहीं दिखाई गई है।जीनमोशन। डिवाइस से डेटाबेस कैसे खींचें। मेरा/डेटा/डेटा/फ़ोल्डर खाली होना प्रतीत होता है

मैं सीडी से/एसडीके/प्लेटफार्म-टूल्स और टाइपिंग द्वारा adb के माध्यम से लॉग इन करता हूं ./adb shell su। मैं देखता हूं कि टैब काम नहीं कर रहा है, इसलिए मैं पथ को अंधाधुंध टाइप करता हूं। वैसे भी मैं डीबी खींचने में सक्षम नहीं हूं, शायद मैं आदेशों के साथ कुछ गलत कर रहा हूं।

डीबीएमएस के माध्यम से मैं कनेक्ट करने का प्रयास करता हूं लेकिन डेटा फ़ोल्डर सामग्री प्रदर्शित नहीं करता है।

एम्यूलेटर पर सब कुछ सुचारू रूप से काम करता है, लेकिन एम्यूलेटर धीमा है और मैं जीनमोशन का उपयोग करता हूं।

कोई समस्या इस समस्या से निपटने के लिए कैसे करें?

उत्तर

0

मैं इस मुद्दे के चारों ओर जाने में कामयाब रहा, इसलिए अगर कोई इसे उपयोगी लगेगा तो मैं अपना समाधान पोस्ट करूंगा।

पहले मैं वीएम का कोई Google एपिस नहीं बना रहा था, सुपर यूज़र ऐप हर बार जब मैं फोन को रूट करना चाहता था तो दुर्घटनाग्रस्त हो गया।

इसलिए मैंने वीएम बनाया जो Google play के साथ प्रदान किया गया है और एसक्यूएल डीबगर ऐप डाउनलोड किया गया है। मैं अपने कोड सूट में भी इस कोड का उपयोग करता हूं और इसलिए मैं प्रत्येक टेस्ट रन के अंत में डीबी को एसडी-कार्ड में लाता हूं। इस तरह मुझे सुपरसियर अनुमतियों की आवश्यकता नहीं है।

public static void copyDbToSd(Context context) { 
    File dbFile = context.getDatabasePath((String) DatabaseHandler.DATABASE_NAME); 


    InputStream myInput; 
    try { 
     myInput = new FileInputStream(dbFile); 
     OutputStream myOutput = new FileOutputStream(
       Environment.getExternalStorageDirectory() 
       + java.io.File.separator 
       + "database.db"); 

     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = myInput.read(buffer)) > 0) { 
      myOutput.write(buffer, 0, length); 
     } 

     myOutput.flush(); 
     myOutput.close(); 
     myInput.close(); 
    } catch (FileNotFoundException e) { 
     Log.e(TAG, "Exception: ", e); 
    } catch (IOException e) { 
     Log.e(TAG, "Exception: ", e); 
    } 

} 

जहां डेटाबेस हैंडलर। DATABASE_NAME मेरे डेटाबेस का नाम है जिसे मैं डीबी बनाने पर सेट करता हूं।

11

मुझे समस्या नहीं है जिसके बारे में आप बात कर रहे हैं, जेनिमोशन पर डिफ़ॉल्ट खोल उपयोगकर्ता रूट है, इसलिए ऐसा नहीं होना चाहिए। सबकुछ के बावजूद, आप सीधे अपने डेटा तक पहुंचने के लिए run-as कमांड का उपयोग कर सकते हैं।

इसे छोटा करने के लिए। आपके ऐप का डेटा फ़ोल्डर आपके ऐप के उपयोगकर्ता अधिकारों से सुरक्षित है। डिफ़ॉल्ट शैल उपयोगकर्ता को ऐप के फ़ोल्डर में सही पहुंच नहीं है। आप उपयोगकर्ता को बदल सकते हैं कि खोल run-as कमांड के लिए धन्यवाद का उपयोग कर रहा है।

  1. एक खोल ओपन: adb shell
  2. तो टाइप करें: run-as your.package.name

यह आदेश अपने अनुप्रयोग के उपयोगकर्ता के लिए खोल उपयोगकर्ता बदल जाएगा। तो आपको ऐप के डेटा को पढ़ने और लिखने का अधिकार होगा। आपको अपने ऐप के डेटा फ़ोल्डर में भी रीडायरेक्ट किया जाएगा: /data/data/you.package.name

जब यह किया जाता है तो आप आसानी से अपनी फ़ाइलों को ब्राउज़ कर सकते हैं।

नोटिस: इस ऐप का उपयोग करने में सक्षम होने के लिए आपके ऐप को डिबग के रूप में बनाया जाना है। यह डीडीएमएस पर डिवाइस प्रक्रिया सूची पर प्रदर्शित किया जाना चाहिए। अपने स्थानीय कंप्यूटर पर

+0

इस जवाब भी समझने के लिए :( –

+0

मैं जवाब नवीनीकृत किया है जटिल है। आप अभी भी समझ में नहीं आता है, तो मैं क्या मैं तुम्हारे लिए क्या कर सकते हैं :-) –

+1

यह दोस्त मिल गया पता नहीं है। बहुत बहुत धन्यवाद :) –

7

भागो एमुलेटर, तो

localuser: ~ स्थानीय होस्ट $ adb शेल
खोल @ एंड्रॉयड:/$ सु
खोल @ एंड्रॉयड:/# cp/डेटा/डाटा/your.package ।नाम/डेटाबेस/your_database.db/MNT/खोल/नकल करते/0/डाउनलोड/your_database.db
खोल @ एंड्रॉयड:/# बाहर निकलें
खोल @ एंड्रॉयड:/$ बाहर निकलने
localuser: ~ स्थानीय होस्ट $ adb pull/MNT/खोल/नकल करते/0/डाउनलोड/your_database.db ~/your_database.db

क्या यह करता है:
1. जोड़ता एमुलेटर को
2. अनुरोध सुपर उपयोगकर्ता permissi ऑन
3. फ़ाइल को कॉपी करता है जो केवल सार्वजनिक निर्देशिका (इस मामले में डाउनलोड) के लिए सुपरसियर के लिए उपलब्ध है
4. फ़ाइल को स्थानीय फ़ोल्डर (डाउनलोड) से आपकी स्थानीय मशीन होम निर्देशिका में खींचता है; आप ग्रहण gui से यह कदम भी कर सकते हैं।

2

आप उस फ़ोल्डर/फ़ाइल की अनुमतियां सेट करने के लिए है, तो आप आसानी से खींच कर सकते हैं:

adb शेल "रन-रूप package.name chmod 666 /data/data/package.name/databases/ फ़ाइल "

adb pull /data/data/package.name/databases/file।

संबंधित मुद्दे