2010-01-16 20 views
31

क्या कोई मुझे बता सकता है, क्या एडीबी को किसी ऐप से डेटाबेस खींचने और धक्का देने के लिए फोन पर रूट निजीकरण के बिना उपयोग करना संभव है?रूट एडीबी रूट के बिना एप्लिकेशन डेटाबेस तक पहुंच

उदाहरण के लिए, मैं अपने जड़ें जादू और सपना पर स्थान पता है:

/data/data/com.xxxx.xxxx/databases/xxxx 

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

असल में मैं अपने ऐप से एक गैर रूट वाले फोन पर डेटाबेस खींचना चाहता हूं और इसे वापस धक्का देता हूं।

केवल मेरी परेशानी है, मेरे पास दो फोन हैं और दोनों को कोशिश करने के लिए एक रूट रूट तक पहुंच नहीं है।

+0

कृपया पायलट_51 के उत्तर में अपनी स्वीकृति बदलने पर विचार करने में सक्षम था। मेरे संस्करण पर –

उत्तर

72

जबकि निल्शेम का जवाब मेरे लिए काम नहीं करता था, यह मुझे सही दिशा में ले जाता है (इसके लिए मैंने ऊपर उठाया) और अब मेरे पास एक समाधान समाधान है।

पुराना जवाब है कि Android के नए संस्करणों के साथ काम नहीं हो सकता है:

#Transfer file from app databases directory to PC 
adb shell 
$ run-as package.name 
$ cd ./databases/ 
$ ls -l #Find the current permissions - r=4, w=2, x=1 
$ chmod 666 ./dbname.db 
$ exit 
$ exit 
adb pull /data/data/package.name/databases/dbname.db ~/Desktop/ 

#Transfer file from PC to app databases directory (requires the above permission change) 
adb push ~/Desktop/dbname.db /data/data/package.name/databases/dbname.db 
adb shell 
$ run-as package.name 
$ chmod 660 ./databases/dbname.db #Restore original permissions 
$ exit 
$ exit 

वैकल्पिक विधि (6.0.1 के साथ काम करने की पुष्टि की) बाह्य भंडारण का उपयोग कर:

#Transfer file from app databases directory to external storage 
adb shell 
$ run-as package.name 
$ cp ./databases/dbname.db /sdcard/ 
$ exit 
$ exit 

#Transfer file from external storage to app databases directory 
adb shell 
$ run-as package.name 
$ cp /sdcard/dbname.db ./databases/ 
$ exit 
$ exit 
+1

का उपयोग करते समय लिखने योग्य नहीं है। यह पूछे जाने वाले प्रश्न का सही जवाब है, जहां वह व्यक्ति ऐसा करना चाहता है वह डेवलपर है ऐप और इसके एक डीबग संस्करण को स्थापित कर सकते हैं (डीबग संस्करण रन-ए के लिए पूर्व-आवश्यकता है)। अन्य विकल्पों में ऐप स्वयं अनुमति को बदलता है या बाहरी संग्रहण से फ़ाइल को कॉपी करता है। संदेश के साथ –

+0

एडीबी रिटर्न: पैकेज 'com.instagram.android' अज्ञात है मुझे क्या करना चाहिए? मैं su का उपयोग करने का प्रयास करता हूं तो adb pull /data/data/package.name/databases/dbname.db ~/डेस्कटॉप/लेकिन यह त्रुटि लौटाता है: डिवाइस नहीं मिला? – UmAnusorn

+1

@ um.anusorn 4.3 में एक मुद्दा है जो रन-एंड को 4.4 में तय किया जाना चाहिए। देखें: https://code.google.com/p/android/issues/detail?id=58373 यदि आपके पास रूट है, तो आप इसे सेट/सिस्टम/बिन/रन-सेट के सेट यूआईडी अनुमति को सक्षम करके ठीक कर सकते हैं, लेकिन वह इस उद्देश्य को हरा देता है। –

13

एक त्वरित समाधान का run-as आदेश का उपयोग करने के लिए एक फ़ोल्डर में डेटाबेस कॉपी करने के लिए आप का उपयोग कर सकते हैं, जैसे कि /sdcard और फिर कर सकते हैं, पर चलाने के रूप में एक सामान्य adb pull

adb shell 
$ run-as package.name cp /data/data/package.name/dbname.db /sdcard/ 
$ exit 
adb pull /sdcard/dbname.db 

अधिक जानकारी करना है कमांड here

ध्यान दें कि run-as कमांड एपीआई स्तर 8 (एंड्रॉइड 2.2) के बाद उपलब्ध है और केवल debbugable पर उपयोग किया जा सकता है।

+0

(शायद 4.4 के साथ कुछ करने के लिए, या पिछले साल कुछ अपडेट?) मैं 'run-as' का उपयोग करते समय/cdcard/cdcard नहीं कर सकता। मुझे @ पायलट_51 –

+0

से 'chmod' समाधान का उपयोग करने की आवश्यकता है यह सच है - एसडी कार्ड अब एडब खोल – slott

0

हम सेट फाइल अनुमति ऐप के भीतर से सभी उपयोगकर्ताओं के लिए पठनीय करने के लिए।

if (BuildConfig.DEBUG) 
{ 
    new File(mDB.getPath()).setReadable(true, false); 
} 

फिर सामान्य रूप से .db को सामान्य रूप से खींचें।

adb -d pull //data/data/xxxxx/databases/xxxxx.db . 

नोट: मुझे पता चला है कि इस हर बार डेटाबेस फ़ाइल को खोलने पर, अपने SQLiteOpenHelper आवरण के निर्माता के रूप में भी onCreate में उदाहरण के लिए किया जाना चाहिए (जब अपने डेटाबेस अशक्त नहीं है) या शायद ओपन पर। अगर केवल क्रिएट में है, तो अगली बार जब आप अपना ऐप चलाएं और .db पहले से मौजूद है, किसी कारण से अनुमतियां वापस कर दी गई हैं। एंड्रॉइड के डेटा को प्रबंधित करने के तरीके के साथ ऐसा कुछ हो सकता है।

1

OxygenOS (एंड्रॉइड 5.2 पर आधारित) पर मैंने Pilot_51 द्वारा प्रदान किए गए दो समाधानों को मिश्रित किया है।

सबसे पहले मैं run-as का उपयोग किया है यहाँ से /data/data/package.name/databases पर पहुँच प्राप्त करने मैं /sdcard/ पर सीधे कॉपी करने के लिए सक्षम नहीं था इसलिए मैं फ़ाइल की अनुमति के लिए बदल दिया। इसके बाद मैं run-as मोड से बाहर निकला हूं और फ़ाइल को /sdcard/ स्टोरेज में कॉपी करने के लिए cp का उपयोग किया है।आखिरकार मैं adb pull

$ adb -s <DEVICE_ID> shell 
$ run-as package.name 
$ chmod 666 databases/dbname.db 
$ exit 
$ cp /data/data/package.name/databases/dbname.db /sdcard/dbname.db 
$ exit 
$ adb pull /sdcard/dbname.db ./dbname.db 
संबंधित मुद्दे