एडीबी का उपयोग करते समय मुझे डेटा फ़ोल्डर से वंचित क्यों किया जाता है?


181

मैं adb और निम्न कमांड्स का उपयोग करके अपने लाइव डिवाइस से जुड़ा:

C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied

मुझे यह देखकर आश्चर्य हुआ कि मेरे पास पहुंच से वंचित है। इस तरह से कमांडलाइन का उपयोग करके मैं निर्देशिकाओं को कैसे ब्राउज़ नहीं कर सकता हूं?

मैं अपने फोन पर रूट एक्सेस कैसे प्राप्त करूं?


सरल ... सुनिश्चित करें कि आपके फोन की स्क्रीन चालू है। "अनुमति दें" पर क्लिक करें जब यह पूछता है कि क्या आप अज्ञात को रूट तक पहुंचना चाहते हैं। किया हुआ।

डेटाबेस तक पहुंच के लिए एक सरल एव्ड बनाने का फैसला किया। क्या किसी के पास डेवलपर्स के लिए "कस्टम" भड़कना और ग्राफिक्स के बिना, गाइड के लिए कोई लिंक है? बस खरीदे हुए डिवाइस पर सादा वेनिला एंड्रॉइड कैसे प्राप्त करें।
BGS

मेरे Android 7.1.1 डिवाइस पर ऐसा कोई संकेत नहीं है। लेकिन adb आगे बढ़ता है और डायरेक्टरी की सामग्री को सूचीबद्ध करता है। परेशानी यह है कि सामग्री वास्तव में मौजूद नहीं है। मैं सामग्री जोड़ने के लिए एडीबी-सिंक का उपयोग कर रहा हूं। यह बहुत अजीब है।
टॉम रसेल

जवाबों:


139

याद रखने के लिए दो चीजें हैं अगर आप अपने डिवाइस पर सब कुछ ब्राउज़ करना चाहते हैं।

  1. एंड्रॉइड फोन पर डेटा फ़ोल्डर ब्राउज़ करने के लिए आपके पास रूट एक्सेस वाला फोन होना चाहिए। इसका मतलब है कि या तो आपके पास डेवलपर डिवाइस है ( ADP1 या Google I / O से एक ION ) या आपने अपने फोन को किसी अन्य तरीके से 'रूट' करने का तरीका ढूंढ लिया है।
  2. आपको एडीबी को रूट मोड में चलाने की आवश्यकता है, इसे निष्पादित करके करें: adb root

77
और "adb root" के लिए adb के कस्टम बिल्ड की आवश्यकता होती है, अन्यथा "adbd रूट के रूप में प्रोडक्शन बिल्ड में नहीं चल सकता"
bortzmeyer

16
adb का कस्टम निर्माण? मैं इसे कहां से प्राप्त कर सकता हूं?
गोपीनाथ

9
@ गोपीनाथ के सवाल का कोई जवाब?
इवोक्स

2
@ गोपीनाथ: मेरा मानना ​​है कि आपको इसे लक्ष्य डिवाइस के लिए स्रोत से बनाना होगा, एनडीके का उपयोग करके रूट की अनुमति देने के लिए कॉन्फ़िगर किया गया है, फिर इसे बाइनरी फ़ाइलों की छवि के साथ डिवाइस पर फ्लैश करें।
बेन जगुआर मार्शल

4
AFAIK, adb का कस्टम बिल्ड होना आवश्यक नहीं है। यह आवश्यक है कि adbd सपोर्ट को रूट के रूप में चलाए , लेकिन यह adbd डिवाइस पर है - इसलिए डिवाइस को रूट एक्सेस करने के लिए जो भी संशोधन किया गया वह पर्याप्त है।
nitzanms

222

API लेवल 8 (Android 2.2) से शुरू, डिबग करने योग्य एप्लिकेशन के लिए (एंड्रॉइड स्टूडियो द्वारा हर समय बनाया गया जब तक कि रिलीज बिल्ड का अनुरोध नहीं किया गया था), आप run-asकमांड को चलाने के लिए एक विशिष्ट उपयोगकर्ता / एप्लिकेशन के रूप में कमांड या निष्पादन योग्य का उपयोग कर सकते हैं। या केवल अपने एप्लिकेशन के यूआईडी पर स्विच करें ताकि आप इसकी डेटा निर्देशिका तक पहुंच सकें ।

आप की सूची निर्देशिका सामग्री:

run-as com.yourapp ls -l /data/data/com.yourapp

Com.yourapp के UID पर स्विच करें और उस uid (जब तक आप कॉल न करें exit) का उपयोग करके सभी अन्य कमांड चलाएं :

run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit

 
नोट 1 : कुछ एचटीसी डिजायर फोन के साथ एक ज्ञात समस्या है । एक गैर-मानक स्वामी / /data/dataनिर्देशिका की अनुमति के कारण , run-asकमांड उन फोन पर चलने में विफल रहता है।

नोट 2 : जैसा कि @Avio द्वारा टिप्पणी में बताया गया है: run-asसैमसंग गैलेक्सी एस फोन के साथ किसी भी संस्करण पर (7 से 10.1) तक सायनोजेनमोड चलाने के मुद्दे भी हैं क्योंकि इस प्लेटफॉर्म /data/dataपर एक सिंबल है /datadata। समस्या को हल करने का एक तरीका वास्तविक निर्देशिका के साथ सीलिंक को बदलना है (दुर्भाग्यवश इसे आमतौर पर रूट एक्सेस की आवश्यकता होती है)।


2
यह आपके द्वारा बताए गए अनुसार काम करता है run-as com.mypackage। मैं जिस समस्या में भाग गया वह sqlite3 /data/data/com.mypackage/databases/mydbकहती है "sqlite3: अनुमति अस्वीकृत"। क्या sqlite3 को केवल रूट द्वारा चलाया जा सकता है?
स्टाइल

5
जब यह आंतरिक भंडारण में संग्रहीत फ़ाइलों को सूचीबद्ध करने की बात आती है तो आकर्षण की तरह काम करता है।
zaplec

5
मुझे अपने sdcard में स्थानांतरित करने में सक्षम होने के लिए फ़ाइल पर अनुमतियाँ बदलनी पड़ीं, क्योंकि मैं इसे अपने आवेदन के रूप में चला नहीं सकता था। तो, 1) रन-ऐज com.package.example, chmod 777 databasefile.db। 2) बाहर निकलें, sdcard, cp /data/data/com.package.example/dat डेटाबेस/databasefile.db पर जाएं। और चरण 3 को 777 अनुमतियों को पुनः प्राप्त किया जाना चाहिए
Maragues

3
मेरा पैकेज अज्ञात है, चाहे मैं अपने टर्मिनल में कितनी सही ढंग से वर्तनी लिखूं: (
कोस्टा

3
यह सही रूप में चिह्नित उत्तर होना चाहिए क्योंकि गैर-रूट किए गए फोन के लिए उपयोग करने का यह सही तरीका है।
LNI

48

शुरू करने से पहले, क्या आपके पास कोई जड़ है फोन है? यदि नहीं, तो मैं दृढ़ता से सुझाव देता हूं कि यह समय है जब आप कूदते हैं। ९९% ट्यूटोरियल जो आपको ऐसा करने में मदद करते हैं, के लिए यह आवश्यक है कि आपके पास एक रूटेड फोन हो (मुझे पता है कि मैं बी / सी एक घंटे के बारे में एक रूट फोन के बिना इसे करने के लिए खोज करने के लिए खर्च कर रहा हूं .. कोई भी नहीं खोज सका .. ) यह भी यदि आप इसके बारे में सोचते हैं, तो आपके iPhone को भी इसी कार्य को करने के लिए निहित होना होगा। तो यह पूरी तरह से उचित है। उत्तर के अंत में निहित के बारे में अधिक।

अपने कमांड लाइन प्रकार से:

adb shell

यह आपको आपके एंड्रॉइड शेल कॉमैंड लाइन पर ले जाता है (आपको कुछ इस तरह देखना चाहिए: shell@android:/ $अब टाइप करें:

shell@android:/ $run-as com.domain.yourapp

यह आपको सीधे डेटा निर्देशिका में ले जाना चाहिए com.domain.yourapp:

shell@android:/data/data/com.domain.yourapp $ 

अगर ऐसा नहीं होता (यानी अगर आपको कोई त्रुटि मिलती है) तो आपके पास रूट फोन नहीं है, या आपने अपने रूट उपयोगकर्ता विशेषाधिकारों का उपयोग नहीं किया है। अपने रूट उपयोगकर्ता विशेषाधिकारों का उपयोग करने के लिए, suएडीबी कमांड लाइन पर टाइप करें और देखें कि क्या होता है, यदि आपको कोई त्रुटि मिलती है, तो आप फोन रूट नहीं हैं। यदि यह नहीं है, तो इसे पहले रूट करें और फिर इन निर्देशों को जारी रखें।

वहां से आप टाइप कर सकते हैं lsऔर आप सभी निर्देशिकाओं को देखेंगे जिसमें dbs शामिल हैं:

shell@android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

उसके बाद आप dbase को ब्राउज़ करने के लिए sqlite3 का उपयोग कर सकते हैं .. यदि आपके पास यह स्थापित नहीं है (आप इसे टाइप करके पता लगा सकते हैं sqlite3, यदि आपको मिलता है command not foundतो आपको इसे स्थापित करना होगा। sqlite को स्थापित करने के लिए, यहां दिए गए निर्देशों का पालन करें

रूटिंग के बारे में: यदि आपने अपने फोन को पहले कभी रूट नहीं किया है, और आप अपने फोन को खराब करने के बारे में चिंतित हैं, तो मैं आपको पूरे विश्वास के साथ बता सकता हूं कि चिंता करने की कोई बात नहीं है। वहाँ बहुत सारे नए और पुराने मॉडलों के लिए बहुत सारे त्वरित और आसान फोन रूटिंग ट्यूटोरियल हैं, और यदि आप एक मैक है (तो मैं अपने मैक के साथ मेरे s3 निहित) भी आप अपने फोन को रूट कर सकते हैं


8
run-asकाम करने के लिए आपको किसी रूट किए गए फोन की जरूरत नहीं है । मैंने इसे सिर्फ एक प्रोडक्शन-बिल्ड गैलेक्सी नेक्सस एस
टेड हॉप

@ टेडहॉप और इसलिए b / c यह आपके प्रोडक्शन-बिल्ड गैलेक्सी नेक्सस S पर ठीक काम करता है .. यह सभी एंड्रॉइड पर ठीक काम करेगा?
abbood

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

@ TedHopp व्यक्तिगत रूप से मैं बहुत ज्यादा Android डेवलपर नहीं हूं .. और इसलिए जैसे निर्देश build the application as debuggable (either by building it with the Eclipse, or ant debug command)आपको मामूली लग सकते हैं, लेकिन वे मुझे भयभीत करते हैं। मुझे लगता है कि मेरा उत्तर उन लोगों के लिए अधिक है जो अपने एंड्रॉइड फोन को रूट करने में सहज हैं, लेकिन एंड्रॉइड देव दुनिया में अच्छी तरह से वाकिफ नहीं हैं। लेकिन मैं खुशी है कि हम इस चर्चा से परेशानी हो रही है .. मैं चाहता हूँ मेरा उत्तर के पाठकों अन्य गैर पक्ष विकल्प के बारे में पता होना करने के लिए
abbood

1
महान जवाब आदमी। मैं यहां कुछ अलग फोन का उपयोग कर रहा हूं, (MotoX, nexus4, LG G3, SGIII) और यह सभी के लिए बहुत अच्छा है।
चाड बिंघम

44

$ एडीबी शेल

$ cd / डेटा

$ एल.एस.

opendir विफल, अनुमति से वंचित


तुम्हें यह करना चाहिए:

$ adb shell

$ cd /data

shell@android:/data $ run-as com.your.package 

shell@android:/data/data/com.your.package $ ls

ठीक है!


यह काम! किसी भी आदेश को निष्पादित करने से पहले कुछ बातें की जानी चाहिए। एक बार डेवलपर विकल्प फोन पर सक्षम होने के बाद, हमें USB डीबगिंग को सक्षम करने की भी आवश्यकता होगी । मैंने अपने फोन (HTC M8) पर कुछ अतिरिक्त रूप से सक्षम किया है जिसे Select डिबग ऐप कहा जाता है और उसने मेरा ऐप चुना। सभी फोन पर मानक हो सकते हैं ... होना चाहिए।
श्रीनिज

30

सैमसंग शेल एस को कंप्यूटर शेल से कमांड जारी करने की कोशिश करने पर मुझे ऐसी ही समस्या हुई

> adb root

एक संदेश के साथ विफल रहता है "उत्पादन में रूट के रूप में नहीं चल सकता है"। यहां एक सरल विधि है जो रूट बनने की अनुमति देती है।

पिछले के बजाय, निम्नलिखित दो कमांड एक के बाद एक जारी करें

> adb shell
$ su

पहले कमांड के बाद, यदि संकेत उपर्युक्त के अनुसार '>' से बदलकर '$' हो गया है, तो इसका मतलब है कि आपने एडल शेल वातावरण में प्रवेश किया है। यदि बाद में दूसरी कमांड जारी करने के बाद प्रॉम्प्ट '#' में बदल गया है, तो इसका मतलब है कि अब आप रूट हैं। अब, रूट के रूप में, आप अपनी डिवाइस के साथ कुछ भी कर सकते हैं।

'सुरक्षित' शेल पर वापस जाने के लिए, जारी करें

# exit

आप देखेंगे कि प्रॉम्प्ट '$' फिर से दिखाई देता है जिसका अर्थ है कि आप एक उपयोगकर्ता के रूप में adb शेल में हैं और रूट के रूप में नहीं।


13
su: अनुमति से इनकार किया
petrnohejl

3
बहुत अच्छे धन्यवाद! Btw आप ऐसा करने के लिए एक निहित फोन की जरूरत है। आपको सुपरसु या कुछ इसी तरह की भी आवश्यकता हो सकती है? कम से कम जब मैंने "सु" का उपयोग करने की कोशिश की तो सुपरसु ने मुझे अपने फोन पर एक संवाद दिया।
रिचर्ड फुंग

16
/ सिस्टम / बिन / श: सु: नहीं मिला
मैट लोहकैंप

1
धन्यवाद :) adb shell + suहमेशा के लिए कष्टप्रद अनुमति चीज़ को हल किया। मुझे su: not foundएंड्रॉइड 4.3 पर समस्या थी, लेकिन जब से मैंने इसे उन्नत किया 4.4.2 समस्या गायब हो गई। ४.३ में समस्या है।

3
su मेरे लिए उपलब्ध नहीं है, Nexus 5 / Android 5.1 - क्या कोई वर्कअराउंड है?
कोडमैनएक्स

19

मुझे इससे भी बहुत परेशानी हुई। मैं अभी भी अनुमति और रूट रन को पूरी तरह से नहीं समझता हूं, लेकिन इसने मेरे लिए (पिछले उत्तरों में से एक) आंशिक रूप से / डेटा / डेटा / [पैकेज नाम] / डेटाबेस /my_db.db से डेटाबेस फ़ाइल की प्रतिलिपि बनाने के लिए काम किया। शेल रूट को चलाना , या किसी कारण से शेल में सु काम नहीं किया, और न ही db फ़ाइल की प्रतिलिपि बनाई (मैं हालांकि निर्देशिका में नेविगेट कर सकता था), और न ही sqlite3

तो, यह काम किया! डॉस कमांड प्रॉम्प्ट में:

C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|shell@android:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
shell@android:/data $ cd data
cd data
shell@android:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
 bus_timetable_lines.db > /sdcard/db_copy.db                                   <
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit   ^
exit
shell@android:/ $ exit
exit

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

अब SDCARD निर्देशिका पर जाएं और अपनी फ़ाइल db_copy.db प्राप्त करें। यहां तक ​​कि वह छिपा हुआ था, लेकिन मैं इसे ईमेल करने में कामयाब रहा। Windows में वापस, मैं SQLite डेटाबेस ब्राउज़र के साथ db फ़ाइल खोलने में सक्षम था। :)


मैंने कोशिश की -> रन-ऐज <app_package_name> लेकिन adb didnn ने मेरे app_package_name को मान्यता नहीं दी। मैंने अपने AndroidManifest.xml में निर्दिष्ट पैकेज_नाम का उपयोग किया। क्या मैं कुछ छोड़ रहा हूं?
ARK

3

रूट एक्सेस प्राप्त करने के लिए निम्नलिखित दो चरण हैं:

  1. आपके Android उपकरणों को रूट किया जाना चाहिए।
  2. ADB शेल में, su और android डिवाइस टाइप करेगा y / n? आप अनुमति चुनें।

type su .. मोबाइल डिवाइस पर शीघ्र देगा ..
सुपरसुसर के

2

उत्पादन बनाता / दर्ज नहीं कर सकते / डेटा / अनुप्रयोग

drwxrwx--- system   cache             1970-01-01 08:00 cache
drwxrwxr-x root     system            1970-01-01 08:00 mnt 
drwxrwx--x system   system            1970-01-01 08:15 data

इसे संचालित करने के लिए सही स्वामी में परिवर्तन की आवश्यकता हो सकती है।


2

समस्या यह हो सकती है कि हमें विशेष रूप से नवीनतम सीएम में विकसित विकल्पों में एडीबी रूट एक्सेस की आवश्यकता है .. यहाँ मैंने वही किया है।

abc @ abc-L655: ~ $ sudo adb किल-सर्वर
abc @ abc-L655: ~ $ sudo adb root start-server * डेमॉन नहीं चल रहा है। अब इसे पोर्ट 5037 * * पर शुरू करना सफलतापूर्वक शुरू हुआ * रूट एक्सेस सिस्टम सेटिंग द्वारा अक्षम है - सेटिंग्स में सक्षम -> विकास विकल्प

विकास विकल्पों में फेरबदल के बाद ...

abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb shell
root@android:/ # ls /data/ .... good to go.. 

1

यदि आप एप्लिकेशन पैकेज को जानते हैं तो आप cdसीधे उस फ़ोल्डर में देख सकते हैं।

जैसे cd data/data/com.yourapp

यह आपको एक निर्देशिका में छोड़ देगा जो कि read/writableआप आवश्यकतानुसार फाइलों को बदल सकते हैं। चूंकि फ़ोल्डर समान है emulator, आप फ़ोल्डर पथ प्राप्त करने के लिए इसका उपयोग कर सकते हैं।


2
मैं सीधे फ़ोल्डर में सीडी कर सकता हूं, लेकिन मुझे अभी भी "ओपेंडिर विफल, अनुमति से वंचित" त्रुटि मिल रही है।
टायलर कोलियर

ऐसा इसलिए है क्योंकि adb के "शेल" उपयोगकर्ता ने निर्देशिकाओं पर अनुमति निष्पादित की है, लेकिन अनुमति नहीं पढ़ी है।
क्रिस स्ट्रैटन

0

यदि आप बस अपने DB & Tables देखना चाहते हैं तो सबसे आसान तरीका है Stetho। हर एंड्रॉइड डेवलपर के लिए बहुत अच्छा टूल जो SQLiteबायट का उपयोग करता है Facobook developed

Steps to use the tool

  1. अपने एप्लिकेशन की फ़ाइल में निर्भरता नीचे जोड़ें (मॉड्यूल: ऐप)

'संकलन' com.facebook.stetho: स्टेथो: 1.4.2 '

  1. अपनी गतिविधि onCreate () पद्धति में कोड की निम्न पंक्तियाँ जोड़ें
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

अब, अपने एप्लिकेशन का निर्माण करें और जब एप्लिकेशन चल रहा हो, तो आप url में क्रोम खोलकर, अपने ऐप डेटाबेस को ब्राउज़ कर सकते हैं:

chrome://inspect/#devices

उसी के स्क्रीनशॉट नीचे के रूप में हैं_

ChromeInspact

ChromeInspact

आपका डी.बी.

आपका डी.बी.

आशा है कि यह सभी को मदद करेगा! :)


0

यह काम करता है यदि आपका एंड्रॉइड डिवाइस किसी भी तरह से रूट किया गया है (सुनिश्चित नहीं है कि यह बिना रूट किए काम करता है)।

  1. adb shell - खोल का उपयोग करें
  2. su - सुपरसुसर बनें।

अब आप सभी निर्देशिकाओं में सभी फ़ाइलों को पढ़ सकते हैं।


-3

डिवाइस को रूट किए बिना आप निम्न cmd स्क्रीनशॉट द्वारा फ़ाइलों तक पहुंच सकते हैं:

  1. अपने उपकरण के अनुसार प्लेटफ़ॉर्म-टूल फ़ोल्डर से cmd का उपयोग करके adb शुरू करें

    cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools

    यह किसी अन्य फ़ोल्डर में हो सकता है यह इस बात पर निर्भर करता है कि आपने इसे कहाँ स्थापित किया है।

  2. काम कर रहे उपकरणों को प्रदर्शित करें।

    adb devices

    प्रतिक्रिया के लिए ओएस ओएस आदेश है

    List of devices attached
    0123456789ABCDEF     device
  3. कमांड लिखें

        adb -s 0123456789ABCDEF shell "su"

    यह खुल जाएगा

        root@theDeviceName:/ #

4.सफ़ल फ़ाइलें, सभी फ़ाइलों को सूचीबद्ध करें

ls

और किसी भी जहां डेटा फ़ोल्डर की तरह किसी और पर चांग निर्देशिका

cd data/data

1
C: \ Users \ bruker \ AppData \ Local \ Android \ sdk \ platform-tools> adb -s emulator-5554 शेल "su" / system / bin / sh: su: not found
सोलो

मेरे मामले में यह एंड्रॉइड 5.0.2 था, मुझे नहीं पता कि क्या यह संस्करण से दूसरे @Koen पर अलग है
महमूद अशरफ

पथ इस बात पर निर्भर करता है कि आपने एंड्रॉइड स्टूडियो कहां स्थापित किया है और यह SDKs @Solo
महमूद अशरफ

1
समस्या यह नहीं है कि adb कहाँ है। यह मेरे पेट में है। फ़ाइलों की सूची प्राप्त करना (या निष्पादित करना su) काम नहीं करता / अनुमति नहीं है। Android 4.3 के साथ परीक्षण।
कोएन

su नहीं मिला है
Brill Pappin

-5

जब आप डिवाइस के लिए शेल डायरेक्टरी में हैं। बस दौडो

su - root

तब आपको डेटा / फ़ोल्डर तक पहुंचने में सक्षम होना चाहिए।

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