অ্যান্ড্রয়েড - এসকিউলেট ডাটাবেস অ্যান্ড্রয়েড ডিভাইস টানছে


103

আমি সর্বত্র সন্ধান করেছি এবং আমি কীভাবে এটি করতে পারি তার কোনও সঠিক সুনির্দিষ্ট উত্তর বা টিউটোরিয়াল খুঁজে পাচ্ছি না।

কোনও অ্যান্ড্রয়েড ডিভাইসের ডেটাবেসকে রুট না করে কোনও উপায়ে টানানো কি সম্ভব? আমার পিসিতে এটি সংগ্রহ করার জন্য আমার কেবল কোনও উপাত্তটি বের করতে হবে, তবে আমি কীভাবে এটি সম্পাদন করতে পারি? অ্যাপটি বা আপনি যে পদ্ধতি সম্পর্কে ছেলেরা জানবেন তা কি আমাকে পুনরায় প্রোগ্রাম করতে হবে তবে ডিভাইসটি রুট না করে মনে রাখবেন। ধন্যবাদ


এখানে কার্যকর সমাধান হল: stackoverflow.com/a/29257875/291427
kmalmur


4
stackoverflow.com/questions/13006315 রুট ছাড়াই ডিবি টানুন
নবীন প্রিন্স পি

উত্তর:


79

আপনি যা চান তা অর্জনের একটি সাধারণ উপায় হ'ল এডিবি পুল কমান্ডটি ব্যবহার করা।

আমি বেশিরভাগ ক্ষেত্রেই পছন্দ করি এমন অন্য উপায়টি হ'ল এসডি কার্ডে কোড দ্বারা ডাটাবেস অনুলিপি করা:

try {
    File sd = Environment.getExternalStorageDirectory();

    if (sd.canWrite()) {
        String currentDBPath = "/data/data/" + getPackageName() + "/databases/yourdatabasename";
        String backupDBPath = "backupname.db";
        File currentDB = new File(currentDBPath);
        File backupDB = new File(sd, backupDBPath);

        if (currentDB.exists()) {
            FileChannel src = new FileInputStream(currentDB).getChannel();
            FileChannel dst = new FileOutputStream(backupDB).getChannel();
            dst.transferFrom(src, 0, src.size());
            src.close();
            dst.close();
        }
    }
} catch (Exception e) {

}

নীচের মত আপনার ম্যানিফেস্টে এসডিতে লেখার অনুমতি সেট করতে ভুলবেন না।

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4
আচ্ছা আমি এটি একটি সামস্যাঙ গ্যালাক্সি ট্যাবে ব্যবহার করব যাতে এসডি কার্ড নেই তাই আমি কীভাবে করব?
DeX03

এবং, আমাকে ডাবল // ব্যবহার করতে হবে?
DeX03

হ্যাঁ, এটি কারণ / বিশেষ স্ট্রিং চর হিসাবে। // আপনার "//" এর ফলাফল / হবে।
কার্লকার্লসম

4
ডাটাবেস পাথ তৈরির পরিবর্তে, এসকিউএলডিটিবেস-এর একটি getPathপদ্ধতি রয়েছে।
উইল

উজ্জ্বল উত্তর। খুব স্মার্ট, দরকারী এবং সহজ।
গুন্ডু ব্যান্ডগার

179

যদি আপনার ডিভাইস অ্যান্ড্রয়েড ভি 4 বা তার বেশি চলমান থাকে, আপনি কমান্ডটি ব্যবহার না করে রুট ছাড়াই এটির ডেটাবেস সহ অ্যাপ্লিকেশন ডেটা টানতে পারেন adb backup, তারপরে ব্যাকআপ ফাইলটি বের করুন এবং স্ক্লাইট ডেটাবেস অ্যাক্সেস করুন।

নিম্নলিখিত কমান্ডটি দিয়ে ইউএসবি কেবলের মাধ্যমে আপনার পিসিতে প্রথম ব্যাকআপ অ্যাপ্লিকেশন ডেটা প্রয়োগ করুন, app.package.nameঅ্যাপ্লিকেশনটির আসল প্যাকেজের নামটি প্রতিস্থাপন করুন ।

adb backup -f ~/data.ab -noapk app.package.name

এটি আপনাকে "আপনার ডিভাইসটি আনলক করতে এবং ব্যাকআপ ক্রিয়াকলাপটি নিশ্চিত করতে" অনুরোধ করবে। ব্যাকআপ এনক্রিপশনের জন্য একটি পাসওয়ার্ড সরবরাহ করবেন না , যাতে আপনি এটি পরে বের করতে পারেন। আপনার ডিভাইসে "আমার ডেটা ব্যাক আপ করুন" বোতামটি ক্লিক করুন। আপনি যে প্যাকেজটি ব্যাকআপ করছেন তার নাম স্ক্রিন প্রদর্শন করবে, তারপরে সফলতার সাথে শেষ হয়ে যাবে close

data.abআপনার হোম ফোল্ডারে ফলাফল প্রাপ্ত ফাইলটিতে অ্যান্ড্রয়েড ব্যাকআপ ফর্ম্যাটে অ্যাপ্লিকেশন ডেটা রয়েছে। এটি নিষ্কাশন করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

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

যদি উপরেরটি openssl:Error: 'zlib' is an invalid command.ত্রুটি দিয়ে শেষ হয় তবে নীচে চেষ্টা করুন।

dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -

ফলাফল apps/app.package.name/স্ক্লাইট ডাটাবেস সহ অ্যাপ্লিকেশন ডেটাযুক্ত ফোল্ডার।

আরও তথ্যের জন্য আপনি মূল ব্লগ পোস্টটি চেক করতে পারেন ।


9
যাদের zlib ছাড়াই zlib সংকলন নেই, অজগর দিয়ে ডেটা আহরণ করতে blog.shvetsov.com/2013/02/… এ উত্তরটি চেকআউট করুন ।
ingh.am

4
উইন্ডোজ ব্যবহারকারীদের জন্য যেখানে আনপ্যাক কমান্ডটি অনুপলব্ধ রয়েছে, আপনি "অ্যান্ড্রয়েড ব্যাকআপ এক্সট্রাক্টর" জাভা অ্যাপ্লিকেশন ( উত্সফোর্জন . नेट / প্রকল্পগুলি / অ্যাডব্যাক্ট্র্যাক্টর ) ব্যবহার করতে পারেন । .Ab ফাইলটি আনপ্যাক করার জন্য কমান্ডগুলির জন্য ফোরাম.এক্সডিএডিফলারস / শো -থ্রেড.ফ্প?t=2011811 দেখুন ।
ললিটম

7
আমার ম্যাকবুক প্রোতে, আমি বার্তাটি পেয়েছি openssl:Error: 'zlib' is an invalid command., যা আমি dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -হাওয়ারের সাথে প্রতিক্রিয়া জানিয়েছি , এটি দেখানোর পরে 17+0 records in17+0 records out17 bytes transferred in 0.000064 secsফোল্ডারে কোনও কিছু করার কোনও প্রমাণ নেই। যেহেতু এটি মাত্র 17 বাইট আমি অনুমান করি যে কমান্ডটিও ব্যর্থ হয়েছিল। আমি মনে করি এটি একটি খারাপ কীভাবে আমি adb pullকোনও ডিবাগ অ্যাপ্লিকেশন থেকে ডাটাবেসটি পারি না !!
কেউ কোথাও কোথাও

12
প্রো টিপ: অ্যাপ্লিকেশনটির ম্যানিফেস্টটি দেখানো হলে এই ব্যাকআপ স্টাফগুলি কাজ করবে নাandroid:allowBackup="false"
কোথাও

9
আমার opensslম্যাক OS X সমর্থন না zlibকমান্ড পারেন, তাই আমি চোলাই সঙ্গে এক পুনরায়: brew reinstall openssl। এটি আপনার সিস্টেম ওপেনসেলকে প্রতিস্থাপন করবে না। অতএব আমি কেবল চলতি সেশনের জন্য PATH কমান্ডটি পরিবর্তন করেছি: এর export PATH=/usr/local/opt/openssl/bin:$PATHপরে এই উত্তর থেকে সফলভাবে কমান্ডগুলি সম্পাদন করতে পারে।
আলেকস এন।

69

জন্য ডিবাগযোগ্য অ্যাপস 1 উপর অ মূলী ডিভাইসের , আপনি নিম্নলিখিত ব্যবহার করতে পারে কমান্ড প্রয়োগ করুন:

adb shell run-as package.name chmod 666 /data/data/package.name/databases/file
adb pull /data/data/package.name/databases/file

উদাহরণ:

adb shell run-as com.app chmod 666 /data/data/com.app/databases/data.db
adb pull /data/data/com.app/databases/data.db

এনভায়ারোমেন্ট ভেরিয়েবলের জন্য PATH অ্যাডবি সেট করুন বা অ্যান্ড্রয়েড এসডিকে ফোল্ডার প্ল্যাটফর্ম-সরঞ্জামগুলিতে সিডি কমান্ড ব্যবহার করুন।

উদাহরণ:

cd /folder/android-sdk/platform-tools/

তারপরে উপরের কমান্ডটি ব্যবহার করুন


1 নোট করুন যে প্লে স্টোরের বেশিরভাগ অ্যাপস ডিবাগযোগ্য নয় কারণ এটিতে ম্যানিফেস্টে ডিবাজেবল পতাকা সেট করা দরকার ।


8
আমি package.nameঅ্যাপ্লিকেশনটির প্যাকেজটির সাথে প্রতিস্থাপন করার পরে , ত্রুটিটি ফিরে run-as: Package 'com.my.app' is unknown
কেউ কোথাও

4
দেখে মনে হচ্ছে এটি সমস্ত ফোনের জন্য কাজ করে না। Nexus 4 এর জন্য কাজ করে, উদাহরণস্বরূপ SGS4 এর জন্য কাজ করে না।
রোমান মিনেনোক

4
কোথায় ডিবি ফাইল সংরক্ষণ করা হয়?
ভোজটাচ পেরেক

4
এটি আমার জন্য কাজ করত, তবে অ্যান্ড্রয়েড 5 এ আপডেট হওয়া আমার নেক্সাস 7 এ কাজ করার জন্য আমি এটি পাব বলে মনে হচ্ছে না 5 কি কেউ নিশ্চিত করতে পারেন যে এটি অ্যান্ড্রয়েড 5 এ কাজ করে?
গাছগুলিএই কোথাও

15
এখানে অ্যান্ড্রয়েড 5 (ললিপপ) অ্যাডবি শেল "রান-অ্যাস [প্যাকেজ_নাম] chmod -R 777 / ডেটা / ডেটা / [প্যাকেজ নাম] / ডাটাবেসগুলির জন্য একটি হ্যাক রয়েছে" এমডিডিআর-পি / এসডিকার্ড / টেম্পডিবি "অ্যাডবি শেল" সিপি -আর / ডেটা / ডেটা / [প্যাকেজ_নাম] / ডাটাবেস / / এসডিকার্ড / টেম্পডিবি / "। অ্যাডবি টান এসডিকার্ড / টেম্পডিবি /। অ্যাডবি শেল "আরএম-আর / এসডিকার্ড / টেম্পডিবি / *"
রুবিন ইউ

55

এখানে থাকা বেশিরভাগ উত্তরগুলি তার চেয়ে বেশি জটিল। আপনি যদি নিজের ফোন থেকে আপনার অ্যাপ্লিকেশনটির ডাটাবেসটি আপনার কম্পিউটারে অনুলিপি করতে চান তবে আপনার কেবল এই আদেশটি দরকার:

adb -d shell "run-as your.package.name cat databases/database.name" > target.sqlite

উপরের কমান্ডটি পূরণ করার জন্য আপনাকে যা করতে হবে তা হ'ল আপনার অ্যাপ্লিকেশনটির প্যাকেজের নাম, ডাটাবেসটি কী বলা হয় এবং allyচ্ছিকভাবে আপনি / যেখানে ডাটাবেস অনুলিপি করতে চান তা চান।

দয়া করে মনে রাখবেন যে এই নির্দিষ্ট আদেশটি কেবলমাত্র তখনই কাজ করবে যদি আপনার কম্পিউটারে কেবল একটি ডিভাইস সংযুক্ত থাকে। -dপ্যারামিটার মানে যে শুধুমাত্র সংযুক্ত ডিভাইস লক্ষ্যবস্তু করা হবে না। তবে অন্যান্য পরামিতি রয়েছে যা আপনি পরিবর্তে ব্যবহার করতে পারেন:

  • -e একমাত্র চলমান এমুলেটরকে লক্ষ্যবস্তু করবে
  • -s <serialnumber> নির্দিষ্ট ক্রমিক নম্বর সহ একটি ডিভাইস লক্ষ্যবস্তু করবে।


আমি এই ফাইলটি কীভাবে খুলতে পারি?
জেহাদ

@ জেহাদ: আমারও একই সমস্যা ছিল। আমি এইভাবে খুঁজে পেয়েছি এবং এটি আমার পক্ষে কাজ করে। আপনার ফোনে এসএসএইচড্রয়েড ইনস্টল করুন ফাইলজিলা adb -d shell "run-as your.package.name cat databases/database_name.db > /mnt/sdcard/database_name.db" শুরু করুন SSHDroidএবং এসএফটিপি প্রোটোকলের মাধ্যমে আপনার ফোনে সংযোগ করুন। / Mnt / sdcard কে ডিফল্ট দূরবর্তী ডিরেক্টরি হিসাবে সেট করুন।
জোল্টন সলে

আপনার নিজের অ্যাপের ডাটাবেস পেতে চাইলে সবচেয়ে সহজ উত্তর। দুটি সংযোজন: 1) আপনি যদি আপনার ডাটাবেসের নাম সম্পর্কে নিশ্চিত না হন তবে আপনি ডাটাবেস ফোল্ডারে ( adb -d shell "run-as your.package.name ls databases") এবং 2) ফাইলগুলি তালিকা করতে একটি ls কমান্ড ব্যবহার করতে পারেন, আপনি ডাটাবেসের সাথে অন্য কোনও যুক্ত ফাইল পেতে চাইতে পারেন, এসকিউএলাইটের জন্য ডাটাবেস খোলার জন্য ডিবি ব্রাউজারের একমাত্র উপায় - এসএমএইচ এবং ওয়ালওয়াল ফাইলগুলি বের করা আমার কেস ছিল
রোনান

এটি খুব সহজেই কাজ করে যদি অ্যাপটি ডিবাজিযোগ্য হয়
ডিজিডব্লিউ

36

অ্যান্ড্রয়েড স্টুডিও 3.0.০ বা তারপরের সংস্করণ ব্যবহার করে ডেটাবেস টানানো সম্ভব (এছাড়াও ভাগ করা পছন্দসই, ক্যাশে ডিরেক্টরি এবং অন্যান্য) যদি অ্যাপ্লিকেশনটি রুটবিহীন ডিভাইসে ডিবাগ মোডে চলে।

অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে ডাটাবেস টানতে এই পদক্ষেপগুলি অনুসরণ করুন।

  1. ক্লিক করুন দেখুন > টুল উইন্ডোজ > ডিভাইস ফাইল এক্সপ্লোরার
  2. ডেটা / ডেটা / ডেটা / [প্যাকেজ-নাম] নোডগুলি প্রসারিত করুন ।

অ্যান্ড্রয়েড স্টুডিও 3.0 এ অনুসরণ করা পদক্ষেপগুলি


ধন্যবাদ একটি এমুলেটর থেকে ফাইলগুলি ডাউনলোড করা হয়েছে, যখন তা অ্যারোটেড গ্যালাক্সি এস 4 থেকে পাওয়া যায় না।
শীতলমাইন্ড

আপনি কি কোনও অ্যাপ্লিকেশন, বা কেবল নিজের অ্যাপ থেকে ডাটাবেস টানতে পারেন?
লাইভ-লাভ

পূর্ব শর্ত অ্যাপ্লিকেশন কোনও অ্যাপ্লিকেশন অবশ্যই ডিবাজেবল হতে হবে।
শহিদুল

6
 adb shell "run-as [package.name] chmod -R 777 /data/data/[package.name]/databases" 
 adb shell "mkdir -p /sdcard/tempDB" 
 adb shell "cp -r /data/data/[package.name]/databases/ /sdcard/tempDB/." 
 adb pull sdcard/tempDB/ . 
 adb shell "rm -r /sdcard/tempDB/*"

5

উবুন্টুর জন্য (কেবল নয়?):

দেখতে Sergeis উত্তর কিন্তু OpenSSL ব্যবহার zlib-flate পরিবর্তে:

বিড়াল appbackup.ab | (ডিডি বিএস = 24 কাউন্ট = 0 এড়িয়ে যান = 1; বিড়াল) | zlib-flate-uncompress> appbackup.tar

অন্যথায় ওপেনসেল সম্ভবত নিক্ষেপ করবে:

ওপেনসেল: ত্রুটি: 'zlib' একটি অবৈধ আদেশ।

কারণ ওপেনসেল উবুন্টুতে জ্লিব সমর্থনের সাথে সংকলিত নয়


1

যেহেতু, আসলেই আমার পক্ষে কিছুই কাজ করে না। আমি একসাথে মিলিত অন্যান্য উত্তরের উপর ভিত্তি করে একটি সামান্য উইন্ডোজ ব্যাচ স্ক্রিপ্ট তৈরি করি। আশা করি এটি কারও সাহায্য করবে। সহজভাবে ব্যবহার: ব্যাকআপডেটিবেস <প্যাকেজনাম> <অ্যাপ্লিকেশন নাম> [টার্গেট ডিরেক্টরি) এটি সের্গেইয়ের ব্যাকআপ পদ্ধতি এবং অ্যান্ড্রয়েড ব্যাকআপ এক্সট্র্যাক্টর ব্যবহার করে

@echo off

if [%1]==[] goto usage
if [%2]==[] goto usage
if NOT [%4]==[] goto usage

@echo Processing: preparations
set PACKAGE=%1
set APPLICATION_NAME=%2
set TARGET_DIR=%cd%
IF NOT "%~3"=="" set TARGET_DIR=%3

set PATH_ADB="c:\Program Files (x86)\Android\android-studio\sdk\platform-tools"
set PATH_ABE="c:\Programs\android-backup-extractor-20140630-bin"
set PATH_7Z="c:\Program Files\7-Zip"

@echo Processing: backup
%PATH_ADB%\adb.exe backup -f %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab -noapk %PACKAGE%

@echo Processing: unpack
java -jar %PATH_ABE%\abe.jar unpack %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab %TARGET_DIR%\%APPLICATION_NAME%\%APPLICATION_NAME%.ab.tar

@echo Processing: extract
cd %TARGET_DIR%\%APPLICATION_NAME%
%PATH_7Z%\7z.exe e %APPLICATION_NAME%.ab.tar "apps\%PACKAGE%\db\%APPLICATION_NAME%"

@echo Processing: cleaning
del %APPLICATION_NAME%.ab
del %APPLICATION_NAME%.ab.tar
goto :eof

:usage
@echo.Pull out SQLite database file from your android device.
@echo.Needs: - connected device
@echo.       - device enable backup.
@echo.       - application enable backup
@echo.       - application in debug mode
@echo.       - installed Android Backup Extractor 
@echo.       - installed command line TAR extractor (7z, ...)
@echo.Does NOT need: root device
@echo.
@echo.Uses: - ADB backup (set PATH_ADB)
@echo.      - Android Backup Extractor (http://sourceforge.net/projects/adbextractor/) (set PATH_ABE)
@echo.      - Extract TAR container, uses 7z (set PATH_7Z)
@echo.
@echo.Usage: backupDatabase ^<PackageName^> ^<ApplicationName^> [TargetDirectory]
@echo.Example: backupDatabase com.foo.example ExampleApp 
@echo Example: backupDatabase com.foo.example ExampleApp workspace\AndroidProjects\Example
exit /B 1

1

আপনি সহজেই আপনার ডিভাইস থেকে স্ক্লাইট ফাইলটি বের করতে পারেন (মূল প্রয়োজন নেই)

  1. এসডিকে ফোল্ডারে যান
  2. সিডি প্ল্যাটফর্ম-সরঞ্জাম
  3. শুরু adb

    সিডি / এসডিকে / প্ল্যাটফর্ম-সরঞ্জাম ./adb শেল

    তারপরে টার্মিনালে নিম্নলিখিত কমান্ডটি টাইপ করুন

    ./adb -d শেল "রান হিসাবে com.your_packagename বিড়াল /data/data/com.your_packagename/databases/jokhanaNepal> /sdcard/jokhana.sqlite"

    জন্য যেমন


1

যদি আপনি এটি অ্যান্ড্রয়েড 6 এ করার চেষ্টা করছেন তবে অনুমতিটির জন্য অনুরোধ করুন এবং এই প্রশ্নের উত্তরের কোডটি ব্যবহার করুন

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_RC); 
    return; 
} 

একবার তা মঞ্জুর হয়

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == STORAGE_PERMISSION_RC) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //permission granted  start reading or writing database
        } else { 
            Toast.makeText(this, "No permission to read external storage.", Toast.LENGTH_SHORT).show();
        } 
    } 
} 

1

বিকল্পভাবে আপনি আমার গ্রন্থাগার আল্ট্রা ডিবাগারটি ব্যবহার করতে পারেন । এটি ফাইল হিসাবে ডাটাবেস ডাউনলোড করতে বা ব্রাউজারে সরাসরি মান সম্পাদনা করার অনুমতি দেয়। কোনও রুট প্রয়োজন নেই, ব্যবহার করা খুব সহজ।


1

ম্যাকে (কোনও মূল প্রয়োজন নেই)

1. Go to platform-tools folder.
2) Run following command in terminal.

./adb -d shell "run-as your.package.name cat databases/database.sqlite" > database.sqlite

এটি প্ল্যাটফর্ম-সরঞ্জাম ফোল্ডারে স্ক্লাইট ফাইলটি অনুলিপি করবে।


অ্যাপটি ডিবাগিংয়ের জন্য সংকলিত থাকলে কেবল এটিই কাজ করে work
ডেভিড বেরি

@ ডেভিডবেরি হ্যাঁ, ডিবাগিংয়ের জন্য সংকলিত থাকলে এটি ডিবি টানবে, অন্যথায় আপনি যে কোনও অ্যাপের ডিবি টানতে পারতেন। এবং এটি অ্যাপটির গুরুতর সুরক্ষা ইস্যু হবে। :)
যোগেশ সুথর

0
 > is it possible to pull in any way a database of an Android device without having to root it? 

হ্যাঁ যদি আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি ডেটাবেসের একটি ফাইল অনুলিপি তৈরি করে যা প্রত্যেকেরই অ্যাক্সেসযোগ্য।

অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির ব্যক্তিগত ডেটা সুরক্ষিত করে যাতে এটি অন্যান্য অ্যাপ্লিকেশন দ্বারা দৃশ্যমান / অ্যাক্সেসযোগ্য হয় না। একটি ডাটাবেস হল ব্যক্তিগত তথ্য private আপনার অ্যাপ্লিকেশন অবশ্যই ডেটাবেস-ফাইলটি পড়তে পারে যাতে এটি কিছু জনসাধারণের কাছে দৃশ্যমান ফাইলে একটি ফাইল-অনুলিপি করতে পারে।


0

মূলযুক্ত ডিভাইসে আপনি এটি করতে পারেন:

// check that db is there
>adb shell
# ls /data/data/app.package.name/databases
db_name.sqlite // a custom named db
# exit
// pull it
>adb pull /data/app.package.name/databases/db_name.sqlite

আমি ১০০% নিশ্চিত নই তবে আমি মনে করি টান
লাগার

0

ল্যাম ভিঞ্জের দেওয়া উত্তরের ভিত্তিতে, এখানে একটি সাধারণ ব্যাচ ফাইল রয়েছে যা আমার 1 ম জেনারেল নেক্সাস 7 এ আমার জন্য কাজ করে It ইন সি: \ অস্থায়ী। এটি ধরে নেয় আপনার পরিবেশের ভেরিয়েবলগুলিতে অ্যান্ড্রয়েড এসডিকে সেট আছে।

@echo off
cd c:\temp\

set /p UserInputPackage= Enter the package name: 
set /p UserInputDB= Enter the database name: 

@echo on
adb shell "run-as %UserInputPackage% chmod 666 /data/data/%UserInputPackage%/databases/%UserInputDB%.sqlite"
adb pull /data/data/%UserInputPackage%/databases/%UserInputDB%.sqlite
@echo off
pause

0

আপনি যদি অ্যান্ড্রয়েড 4.0.০ বা তার বেশি থাকেন এবং আপনি কোনও ম্যাকের উপরে থাকেন তবে এখানে একটি রুবি স্ক্রিপ্ট রয়েছে যা আপনার অ্যাপের সামগ্রীগুলি ডেস্কটপে সংরক্ষণ করবে। আমি ভেবেছিলাম এটি উবুন্টুতেও কাজ করবে, যদিও আমি এটি পরীক্ষা করেছিলাম না।

puts "enter your package name"
package_name = gets.chomp
puts "press the 'Back up my data' button on your device"
`adb backup -f ~/Desktop/data.ab -noapk #{package_name}`
puts "press enter once once the 'Backup finished' toast has appeared"
gets.chomp
puts "extracting..."
`dd if=data.ab bs=1 skip=24 | openssl zlib -d | tar -xvf -`

চালানোর জন্য -> রুবি আপনার_রবি_ফিল_নাম.আরবি

এই স্ক্রিপ্টটি কেবল "সুখী পথ", সুতরাং আপনার ডিভাইসটি সংযুক্ত রয়েছে এবং আপনার প্রোফাইলে সেই বিজ্ঞাপনটি যুক্ত করা হয়েছে তা নিশ্চিত করুন।


0

আমি অভ্যন্তরীণ স্টোরেজটিতে (অ্যাডাবির সাথে পিসিতে নয়) অ্যাপ্লিকেশন ডাটাবেসটিকে "সংরক্ষণ" এবং "পুনরুদ্ধার" এর সম্পূর্ণ সমাধান দিই।

আমি সংরক্ষণের জন্য দুটি এবং ডেটাবেস পুনরুদ্ধার করার জন্য দুটি পদ্ধতি করেছি। মেইনএ্যাকটিভিটির () বা অন্বেষণ করতে বা ডাটাবেসটি পুনরুদ্ধার করতে চাইলে এক বা অন্যটি) এই পদ্ধতিগুলি ব্যবহার করুন)

অভ্যন্তরীণ স্টোরেজে ডাটাবেস সংরক্ষণ করুন:

void copyDatabase (){
        try {
            final String inFileName = "/data/data/<pakage.name>/databases/database.db";
            final String outFileName = Environment.getExternalStorageDirectory() + "database_backup.db";
            File dbFile = new File(inFileName);
            FileInputStream fis = new FileInputStream(dbFile);


            Log.d(TAG, "copyDatabase: outFile = " + outFileName);

            // 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();
        }catch (Exception e){
            Log.d(TAG, "copyDatabase: backup error");
        }
    }

অভ্যন্তরীণ স্টোরেজ থেকে ডাটাবেস পুনরুদ্ধার:

void restoreDatabase (){
        try {
            final String inFileName = Environment.getExternalStorageDirectory() + "database_backup.db";
            final String outFileName = "/data/data/<package.name>/databases/database.db";
            File dbFile = new File(inFileName);
            FileInputStream fis = new FileInputStream(dbFile);

            Log.d(TAG, "copyDatabase: outFile = " + outFileName);

            // 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();
        }catch (Exception e){
            Log.d(TAG, "copyDatabase: backup error");
        }
    }

0

জিনিসগুলি স্বয়ংক্রিয়ভাবে চালিত হলে এটি সর্বদা ভাল hat এজন্য এডিবি ব্যবহার করে ডিভাইস থেকে ডিবি ফাইল অনুলিপি করার জন্য আমি সাধারণ পাইথন স্ক্রিপ্টটি কেন লিখলাম । আপনি ঘন ঘন এটি করা থাকলে এটি বিকাশের অনেক সময় সাশ্রয় করে।

ডিভাইস রুটে না থাকলে কেবল ডিবাগযোগ্য অ্যাপ্লিকেশনগুলির সাথে কাজ করে

এখানে সংক্ষেপে লিঙ্ক।

এটি চালান: python copyandroiddbfile.py

import sys
import subprocess
import re

#/
# Created by @nieldeokar on 25/05/2018.
#/

# 1. Python script which will copy database file of debuggable apps from the android device to your computer using ADB.
# 2. This script ask for PackageName and DatabaseName at runtime.
# 3. You can make it static by passing -d at as command line argument while running script and setting defaults in following way.
# 4. Edit script and change the values of varialbe packageName and dbName to debuggable app package name and database name then
# run script as : python Copydbfileandroid.py -d 

useDefaults = False


def checkIfPackageInstalled(strSelectedDevice) :

    packageName = 'com.nileshdeokar.healthapp.debug'
    dbName = 'healthapp.db'


    if not useDefaults : 
        print('Please enter package name : ')
        packageName = raw_input()

    packageString = 'package:'+packageName

    try:
        adbCheckIfPackageInstalledOutput = subprocess.check_output('adb -s ' + strSelectedDevice + ' shell pm list packages | grep -x '+ packageString, shell=True)
    except subprocess.CalledProcessError as e:
                print "Package not found"
                return


    if packageString.strip() == adbCheckIfPackageInstalledOutput.strip() : 
        if not useDefaults : 
            print('Please enter db name : ')
            dbName = raw_input()

        adbCopyDbString = 'adb -s '+strSelectedDevice + ' -d shell \"run-as '+packageName+' cat /data/data/'+packageName+'/databases/'+ dbName +'\" > '+dbName

        try:
            copyDbOp = subprocess.check_output(adbCopyDbString,shell=True)
        except subprocess.CalledProcessError as e:
                return

        if "is not debuggable" in copyDbOp :
            print packageString + 'is nto debuggable'

        if copyDbOp.strip() == "":
            print 'Successfully copied '+dbName + ' in current directory'

    else :
        print 'Package is not installed on the device'



defaultString = "-d"
if len(sys.argv[1:]) > 0 and sys.argv[1] == defaultString :
        useDefaults = True

listDevicesOutput = subprocess.check_output("adb devices", shell=True)
listDevicesOutput = listDevicesOutput.replace("List of devices attached"," ").replace("\n","").replace("\t","").replace("\n\n","")

numberofDevices = len(re.findall(r'device+', listDevicesOutput))

connectedDevicesArray = listDevicesOutput.split("device")   
del connectedDevicesArray[-1] 


strSelectedDevice = ''
if(numberofDevices > 1) :
    print('Please select the device : \n'),

    for idx, device in enumerate(connectedDevicesArray):
        print idx+1,device

    selectedDevice = raw_input()

    if selectedDevice.isdigit() :
        intSelected = int(selectedDevice)
        if 1 <= intSelected <= len(connectedDevicesArray) :
            print 'Selected device is : ',connectedDevicesArray[intSelected-1]
            checkIfPackageInstalled(connectedDevicesArray[intSelected-1])
        else :
            print 'Please select in range'
    else : 
        print 'Not valid input'

elif numberofDevices == 1 :
    checkIfPackageInstalled(connectedDevicesArray[0])
elif numberofDevices == 0 :
    print("No device is attached")

-1

আপনি যদি আপনার ডাটাবেস ফাইল চান

ডিডিএমএস> ফাইল এক্সপ্লোর দেখুন

আপনার প্যাকেজের নাম থেকে আপনার ডিবি ফাইলটি সন্ধান করুন

তারপরে ডিভাইস থেকে একটি ফাইল টানুন ক্লিক করুন (কেবলমাত্র শিকড় ডিভাইস)


4
এটি করা যেতে পারে তবে একটি রুট ডিভাইসে, যা আমার প্রশ্নের মূল বিষয়, এটি কোনও রুটযুক্ত ডিভাইসে কীভাবে করা যায়
DeX03

4
এটি কোনও মূলবিহীন ডিভাইসে কাজ করে না। আপনার উত্তরে তা উল্লেখ করা উচিত।
tony9099
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.