কীভাবে কেউ নিজের অ্যান্ড্রয়েড অ্যাপের (ব্যক্তিগত) ডেটা টানতে পারে?


100

ব্যবহার করে একটি একক ফাইল টানতে চেষ্টা করা হচ্ছে

adb pull /data/data/com.corp.appName/files/myFile.txt myFile.txt

সঙ্গে ব্যর্থ

failed to copy '/data/data/com.corp.appName/files/myFile.txt myFile.txt' to 'myFile.txt': Permission denied

তবুও ইউএসবি ডিবাগিংটি ডিভাইসে সক্ষম করা হয়েছে।

প্রত্নতাত্ত্বিক পথ দিয়ে আমরা সমস্যাটি ঘুরে দেখতে পারি

adb shell
run-as com.corp.appName
cat files/myFile.txt > myFile.txt

তবে এটি একাধিক ফাইলের জন্য অকার্যকর।

আমি কীভাবে আমার ম্যাকবুকের /data/data/com.corp.appName/files ডিরেক্টরিটি টানতে পারি?

এটি সরাসরি বা storage / স্টোরেজ / sdcard0 / myDir এর ট্রানজিটের মাধ্যমে করা (যেখান থেকে আমি অ্যান্ড্রয়েড ফাইল স্থানান্তর দিয়ে চালিয়ে যেতে পারি) ঠিক আছে।

অতিরিক্ত মন্তব্য

এটি সম্ভবত চলমান হতে পারে

adb backup  -f myFiles com.corp.appName

আমি যে ফাইলগুলি সন্ধান করছি তা তৈরি করবে। সেক্ষেত্রে আমি ফলাফল ব্যাকআপটি আনটার / আনজিপ করার কোনও উপায় খুঁজছি!


5
ডিভাইসটি রুট করা না হলে আপনি কেবল এটি করতে পারবেন না।
323go

আমি আশা করি আপনি ভুল করেছেন, তবে কেবলমাত্র আপনার মন্তব্যে একটি উত্তর হয়ে যান। আপনি কেন এমনটা মনে করেন তা ব্যাক আপ করার জন্য আপনি কোনও ধরণের রেফারেন্স যুক্ত করতে পারেন? আমার প্রোগ্রামের বগি সংস্করণগুলি যে সমস্ত জাঙ্ক ফাইলগুলি রক্ষা করেছে তা নিশ্চিত করতে আমার নিকট-থেকে-মুক্তির প্রোগ্রামটি নিখুঁতভাবে সমস্ত ধরণের ইনপুট ফাইল পরিচালনা করবে।
কালাফ

4
এর অর্থ কি এই যে কেউ পৃথিবী থেকে ডিরেক্টরিটি chmod করতে পারে: x থেকে পৃথিবীতে: আরএক্স দীর্ঘ ফাইলগুলি আনতে সক্ষম?
কালাফ

4
@ ননোসোস এটি সত্ত্বেও যে এটি আমার অ্যাপ্লিকেশন, কোনও অ্যাপ্লিকেশন তাদের ডিভাইসে যে ব্যক্তিগত ডেটা সংরক্ষণ করেছে তার অনুলিপি ব্যবহারকারীদের পক্ষে সংরক্ষণ করা কি বৈধ নয়? সর্বোপরি, সম্ভবত ডেটাটি ডিভাইসের মালিকের, অ্যাপের লেখকের নয় belong
কালাফ

4
সমস্যাটি হ'ল আপনি কীভাবে আপনার অ্যাপ্লিকেশনগুলির ব্যক্তিগত ডেটা দিয়ে ইন্টারফেস করার চেষ্টা করছেন এবং কীভাবে দূষিত অ্যাপ / প্রোগ্রামের মধ্যে পার্থক্য রয়েছে। (যার কোনও ব্যবহারকারীর ব্যক্তিগত ডেটা থাকতে পারে)
ন্যানোসোস

উত্তর:


105

অ্যাডবি ব্যাকআপ একটি অ্যান্ড্রয়েড-নির্দিষ্ট সংরক্ষণাগার লিখবে:

adb backup  -f myAndroidBackup.ab  com.corp.appName

এই সংরক্ষণাগারটি ব্যবহার করে টর ফর্ম্যাটে রূপান্তর করা যেতে পারে:

dd if=myAndroidBackup.ab bs=4K iflag=skip_bytes skip=24 | openssl zlib -d > myAndroidBackup.tar

তথ্যসূত্র:

http://nelenkov.blogspot.ca/2012/06/unpacking-android-backups.html

সেই লিঙ্কটিতে "আপডেট" অনুসন্ধান করুন।


বিকল্পভাবে, অ্যান্ড্রয়েড ব্যাকআপ ( ) ফাইল থেকে ফাইলগুলি বের করতে অ্যান্ড্রয়েড ব্যাকআপ এক্সট্র্যাক্টর ব্যবহার .abকরুন।


5
bs=24 skip=1bs=1 skip=24(আমার সিস্টেমে 38.6 এমবি / সে বনাম 1.7 এমবি / গুলি) এর চেয়ে অনেক দ্রুতগতিতে :)
নেটভোপ

19
পাইথনের বিকল্প যেখানে dd if=data.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" | tar -xvf -
ওপেনসেলটি জিলিবের

6
ddকর্মক্ষেত্রে আমার ম্যাকবুকের কমান্ডটি নিয়ে আমি কখনও সাফল্য পাইনি । পরিবর্তে, আমি ব্যবহার java -jar ./abe.jar unpack data.ab data.tar। আপনি এর থেকে আবে ইউটিলিটি ডাউনলোড করতে পারেন sourceforge.net/projects/adbextractor/files/?source=navbar
কেউ কোথাও

4
এছাড়াও, আমি লক্ষ্য করেছি যে আমাকে এমন অ্যাপটি জোর করে বন্ধ করতে হয়েছে যার ডেটা আমি ব্যাকআপ করতে চাইছি অন্যথায় ব্যাকআপটি খালি! (অ্যান্ড্রয়েড 4.৪.২) ম্যানিফেস্ট হিসাবে প্রদর্শিত হওয়ার মতোই একই প্রভাবandroid:allowBackup="false"
কেউ আবার কোথাও

4
আরও ভাল, সরাসরি স্থানীয় ডিরেক্টরিতে ফাইলগুলি বের করুন:dd if=myAndroidBackup.ab bs=24 skip=1 | openssl zlib -d | tar -x
মেরিচেল্ট

51

আমারও একই সমস্যা ছিল তবে এটি চালিয়ে গিয়ে সমাধান করেছি:

$ adb shell
$ run-as {app-package-name}
$ cd /data/data/{app-package-name}
$ chmod 777 {file}
$ cp {file} /mnt/sdcard/

এটির পরে আপনি চালাতে পারেন

$ adb pull /mnt/sdcard/{file}

4
ধন্যবাদ মানুষ! এটিকে পুনরাবৃত্তির অনুলিপি তৈরি করতে আপনার "সিপি-আর" ব্যবহার করতে হবে। stackoverflow.com/questions/39961621/...
朱西西

31

আমার জন্য যা কাজ করেছে তা এখানে:

adb -d shell "run-as com.example.test cat /data/data/com.example.test/databases/data.db" > data.db

আমি সরাসরি স্থানীয় ফাইলে ডাটাবেস মুদ্রণ করছি।


4
ঠিক এই আদেশটি আমার db ফাইলটি দূষিত করে। তবে আমি এটি নীচের পদক্ষেপগুলি দিয়ে কাজ করতে পেরেছি: ------ adb shell ------ শেল চালানোর অভ্যন্তরে run-as com.example.test ------ শেল রানের অভ্যন্তরে cat ...db > /mnt/sdcard/file.db------ adb pull /mnt/sdcard/file.db .------ শেষ (দুঃখিত, লাইন ব্রেকগুলি কাজ করছে না)
কিরিল ওসিফেরভ 23:38

@ কিরিলঅফিসারভ ভাল হবে যদি এই আদেশগুলি একটি লাইনে লেখা যায়
ইমান

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

কিছু কারণে ব্যবহার adb shellআমার পক্ষে কাজ করে না, তবে এই উত্তরটি অনুসরণ করে এবং adb exec-outএটি ব্যবহার করে কাজ করে!
এপিকপান্ডাফোরস

21

ম্যাকোসএক্স-এ, কালাফ এবং অলি ফোর্ডের উত্তরগুলি একত্রিত করে নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে।

কমান্ড লাইনে (নিশ্চিত হয়ে নিন যে অ্যাডাবী আপনার পথে রয়েছে, আমার ~ / লাইব্রেরি / অ্যান্ড্রয়েড / এসডিকে / প্ল্যাটফর্ম-সরঞ্জাম / অ্যাডবিতে ছিল) এবং আপনার অ্যান্ড্রয়েড ডিভাইসটি প্লাগ ইন এবং ইউএসবি ডিবাগিং মোডে চালনা করুন:

 adb backup -f backup com.mypackage.myapp

আপনার অ্যান্ড্রয়েড ডিভাইস আপনাকে আপনার ডেটা ব্যাকআপ করার অনুমতি চাইবে। "আমার ডেটা ব্যাকআপ" নির্বাচন করুন

কয়েক মুহূর্ত অপেক্ষা করুন।

যে ফাইলটি আপনি adb চালিয়েছিলেন সেই ফাইলটিতে ব্যাকআপটি উপস্থিত হবে।

এখন চালান:

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

এখন আপনার কাছে একটি ব্যাকআপ.আটার ফাইল থাকবে যাতে আপনি এটির মতো করে তুলতে পারেন:

 tar xvf backup.tar

এবং আপনার অ্যাপ্লিকেশন দ্বারা সঞ্চিত সমস্ত ফাইল দেখুন।


আপনার ম্যাক সংস্করণ কাজ করে! দ্রষ্টব্য: উভয় adb backupএবং ddটার রূপান্তর পদক্ষেপগুলি কাজ করার সময় কোনও স্থিতি সরবরাহ করে না এবং আপনার কাছে প্রচুর ডেটা থাকলে কয়েক মিনিট সময় নিতে পারে। ধৈর্য্য ধারন করুন!
মেচেথন

4
আমি পাচ্ছি: "zlib.error: ত্রুটি -3 ডেটা সঙ্কোচন করার সময়: ভুল শিরোনাম পরীক্ষা করুন" আমার ব্যাকআপ যদিও এনক্রিপ্ট করার জন্য একটি পাসওয়ার্ড চাইছে। এই অজগর পদ্ধতিটি ব্যাকআপ ডিক্রিপ্ট করার জন্য পাসওয়ার্ড চাইবে না। উপরের উদাহরণে মন্তব্যগুলিতে আবে.জার পাসওয়ার্ডের জন্য জিজ্ঞাসা করে, তবে আমি সেই পদ্ধতিটি ব্যবহার না করে সমস্ত ফাইল পাইনি।
ডেভ থমাস

একটি এনক্রিপ্ট করা ব্যাকআপে অ্যাবেজারের সাথে আমার দ্বিতীয় প্রচেষ্টা কাজ করেছিল।
ডেভ থমাস

7

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

আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি ডিভাইসে ইউএসবি ডিবাগিং সক্ষম করেছেন

  1. ডিভাইস ফাইল এক্সপ্লোরার খুলতে টুল> উইন্ডো> ডিভাইস ফাইল এক্সপ্লোরার বা টুল উইন্ডো বারের ডিভাইস ফাইল এক্সপ্লোরার বোতামটি ক্লিক করুন।
  2. ড্রপ ডাউন তালিকা থেকে একটি ডিভাইস নির্বাচন করুন।
  3. ফাইল এক্সপ্লোরার উইন্ডোতে ডিভাইসের সামগ্রীর সাথে ইন্টারেক্ট করুন। একটি নতুন ফাইল বা ডিরেক্টরি তৈরি করতে একটি ফাইল বা ডিরেক্টরিতে ডান ক্লিক করুন, আপনার মেশিনে নির্বাচিত ফাইল বা ডিরেক্টরিটি সংরক্ষণ করুন, আপলোড করুন, মুছুন বা সিঙ্ক্রোনাইজ করুন। অ্যান্ড্রয়েড স্টুডিওতে কোনও ফাইল খুলতে ডাবল ক্লিক করুন।

    অ্যান্ড্রয়েড স্টুডিওগুলি আপনার প্রকল্পের বাইরে অস্থায়ী ডিরেক্টরিতে আপনি এইভাবে খোলা ফাইলগুলি সংরক্ষণ করেন। আপনি যদি ডিভাইস ফাইল এক্সপ্লোরার ব্যবহার করে খোলা কোনও ফাইলটিতে পরিবর্তন করেন এবং আপনার পরিবর্তনগুলি ডিভাইসে ফিরে সংরক্ষণ করতে চান তবে আপনাকে অবশ্যই ডিভাইসে ফাইলটির পরিবর্তিত সংস্করণটি আপলোড করতে হবে।

ফাইল এক্সপ্লোরার

সম্পূর্ণ ডকুমেন্টেশন


6

আপনি নীচে এই শেল স্ক্রিপ্ট ব্যবহার করতে পারেন। এটি অ্যাপ্লিকেশন ক্যাশে থেকেও ফাইলগুলি টানতে সক্ষম, adb backupসরঞ্জামটির মতো নয় :

#!/bin/sh

if [ -z "$1" ]; then 
    echo "Sorry script requires an argument for the file you want to pull."
    exit 1
fi

adb shell "run-as com.corp.appName cat '/data/data/com.corp.appNamepp/$1' > '/sdcard/$1'"
adb pull "/sdcard/$1"
adb shell "rm '/sdcard/$1'"

তারপরে আপনি এটি ব্যবহার করতে পারেন:

./pull.sh files/myFile.txt
./pull.sh cache/someCachedData.txt

10
সবচেয়ে ভাল অংশটি হল যখন আপনি যুক্তি না দেন এবং তারপরে rm /sdcard/বিকল্পগুলি দেন, ভাগ্যবান এটি হয় না -rf
TWiStErRob অক্টোব

4
আপনি হোস্টের সরাসরি কোনও ফাইলের জন্য সরাসরি বিড়াল করতে পারেন: "অ্যাডবি শেল রান-অ্যাস কম.ওয়াইথ্য.ফোনর্ড বিড়াল / ডেটা / ডেটা / কম.ফোনর্ড / ডেটাবেসস / ব্লগিং.ডিবি> / টিএমপি / ফু" (যেখানে / টিএমপি / foo হোস্ট মেশিনে একটি ফাইল, অ্যান্ড্রয়েড ডিভাইস নয়)
জেমস মুর

ঠিক এখনই বুঝতে পেরেছিল @ ডেভ-থোমাস কিছুক্ষণ আগে সমস্যার সমাধান করেছে। আমার ডাউনটোট সরানো হচ্ছে।
ডন হ্যাচ

বা না :-( "এই উত্তরটি সম্পাদনা না করা হলে আপনার ভোট এখন লক হয়ে গেছে" "
ডন হ্যাচ

টিবিএইচ আমি এই সম্পর্কে কোলাহল বুঝতে পারি না। (মূল) স্ক্রিপ্টটি ডিরেক্টরিটি কখনই মুছে ফেলতে পারে না (অনুপস্থিত - আরএফ স্যুইচ), যদি এটি খালি না থাকে। আমি যাচাই করিনি তবে ডিরেক্টরিটি ফাঁকা থাকলেও আমি সন্দেহ করি যে স্ক্রিপ্টটি ডিরেক্টরিটিকে একটি মাউন্ট পয়েন্ট হিসাবে মুছে ফেলবে। স্ক্রিপ্টটি বিপজ্জনক বলে মনে হয়েছিল, তবে এটি কখনও ছিল না ...
তমাস

5

যদি আপনি Mac মেশিন এবং একটি স্যামসাং ফোনে ব্যবহার করে থাকেন, তাহলে এটি আপনাকে কী করতে হবে (যেহেতু হয় run-as কাজ করছে না স্যামসাং এবং zlib কাজ করে না ম্যাক দিকে)

  1. আপনার অ্যাপ্লিকেশনটির ডেটা ডিরেক্টরিতে একটি ব্যাকআপ নিন adb backup -f /Users/username/Desktop/data.ab com.example

  2. আপনার ফোনে এনক্রিপ্ট করার জন্য আপনাকে একটি পাসওয়ার্ড জিজ্ঞাসা করা হবে, কোনও প্রবেশ করান না। কেবল "আমার ডেটা ব্যাকআপ করুন" এ আলতো চাপুন। দেখুন কিভাবে ব্যাকআপ নিতে?

  3. একবার সফলভাবে ব্যাক আপ হয়ে গেলে, আপনি data.abআপনার ডেস্কটপে ফাইল দেখতে পাবেন । এখন আমাদের এটিকে tarফর্ম্যাটে রূপান্তর করা দরকার ।

  4. এর জন্য অ্যান্ড্রয়েড ব্যাকআপ এক্সট্র্যাক্টর ব্যবহার করুন। ডাউনলোড | সোর্স কোড

  5. এটি ডাউনলোড করুন এবং আপনি abe.jarফাইল দেখতে পাবেন । এটি আপনার PATH ভেরিয়েবলে যুক্ত করুন।

  6. টার ফাইলটি তৈরি করতে এটি সম্পাদন করুন:java -jar abe.jar unpack /Users/username/Desktop/data.ab /Users/username/Desktop/data.tar

  7. সমস্ত ফাইল অ্যাক্সেস করতে ডেটা.আটার ফাইলটি বের করুন


4
এটি যথাযথভাবে অনুসরণ করেছে এবং data.tarস্রেফ data.tar.cpgzপ্রত্যক্ষগুলি একটি @ হেনরি
ব্যবহারকারী

2

নিম্নলিখিত কোড যুক্ত করে সঠিক অনুমতি সেট করার পরে:

File myFile = ...;
myFile.setReadable(true, false); // readable, not only for the owner

adb pull পছন্দসই হিসাবে কাজ করে।

দেখতে File.setReadable ()


4
ডিবাগ করার সময় অনুমতিগুলি পরিবর্তন করা ঠিক আছে, তবে মুক্তির কাছাকাছি সময়ে এমনটি করা ডিফল্টরূপে প্রদত্ত সুরক্ষাটিকে পরাস্ত করবে (অন্যান্য অ্যাপ্লিকেশনগুলিকে অ্যাক্সেস করতে / ফাইলগুলিতে গণ্ডগোল করা থেকে বিরত রাখতে)। সুতরাং বিকাশকারীদের পক্ষে কেবল ব্যবহারকারী-পঠনযোগ্য / লিখিতযোগ্য হওয়া সত্ত্বেও ফাইলগুলি অ্যাক্সেস করার একটি উপায় আরও আকাঙ্ক্ষিত।
কালাফ

2

এই উত্তরটি আমার উত্তর এবং উত্তরগুলিতে মন্তব্যের সাথে আমার অভিজ্ঞতার ভিত্তিতে তৈরি। আমার আশা আমি একই পরিস্থিতিতে কাউকে সাহায্য করতে পারি।

আমি টার্মিনালের মাধ্যমে ওএসএক্স এ করছি ।

পূর্বে ভিনিসিয়াস অ্যাভেলারের উত্তর আমার পক্ষে দুর্দান্ত কাজ করেছিল। ডিবাগ অ্যাপ্লিকেশন থেকে আমি কেবল বেশিরভাগ সময় ডিভাইসটির ডেটাবেস প্রয়োজন ছিল।

আজ আমার একটি ব্যবহারের কেস ছিল যেখানে আমার একাধিক ব্যক্তিগত ফাইলের প্রয়োজন ছিল । আমি দুটি সমাধান দিয়ে শেষ করেছি যা এই ক্ষেত্রে ভাল কাজ করেছে।

  1. কারও কারও ওএসএক্স নির্দিষ্ট মন্তব্যের সাথে স্বীকৃত উত্তরটি ব্যবহার করুন। একটি ব্যাকআপ তৈরি করুন এবং তৃতীয় পক্ষের সমাধানটি ব্যবহার করুন, Sourceforge.net/projects/adbextractor/files/?source=navbar একটি ট্যারে আনপ্যাক করুন। আমি এই উত্তরটির নীচে এই সমাধানটি সহ আমার অভিজ্ঞতা সম্পর্কে আরও লিখব। আপনি যদি সন্ধান করছেন এটি যদি নীচে স্ক্রোল করুন।

  2. একটি দ্রুত সমাধান যা আমি স্থির করেছি। তামাসের উত্তরের অনুরূপ একাধিক ফাইলগুলি টানতে আমি একটি স্ক্রিপ্ট তৈরি করেছি। আমি এটি এই উপায়ে করতে সক্ষম হলাম কারণ আমার অ্যাপ্লিকেশনটি একটি ডিবাগ অ্যাপ্লিকেশন এবং আমার ডিভাইসটিতে আমার চালনার মতো অ্যাক্সেস রয়েছে। আপনার রান-অ্যাক্সেস না থাকলে এই পদ্ধতিটি আপনার জন্য OSX এ কাজ করবে না।

আমি একাধিক প্রাইভেট ফাইল টানার জন্য আমার স্ক্রিপ্ট এখানে রইলাম যা আমি আপনার সাথে ভাগ করব, পাঠক, যারা এই দুর্দান্ত প্রশ্নটি তদন্ত করছেন;):

#!/bin/bash
#
# Strict mode: http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -euo pipefail
IFS=$'\n\t'

# 
# Usage: script -f fileToPull -p packageName
# 

# This script is for pulling private files from an Android device
# using run-as. Note: not all devices have run-as access, and
# application must be a debug version for run-as to work.
# 
# If run-as is deactivated on your device use one of the
# alternative methods here:
# http://stackoverflow.com/questions/15558353/how-can-one-pull-the-private-data-of-ones-own-android-app
# 
# If you have encrypted backup files use:
# sourceforge.net/projects/adbextractor/files/?source=navbar 
# From comments in the accepted answer in the above SO question
# 
# If your files aren't encrypted use the accepted answer 
# ( see comments and other answers for OSX compatibility )
# 
# This script is open to expansions to allow selecting 
# device used. Currently first selected device from
# adb shell will be used.

#Check we have one connected device
adb devices -l | grep -e 'device\b' > /dev/null

if [ $? -gt 0 ]; then
    echo "No device connected to adb."
    exit 1
fi

# Set filename or directory to pull from device
# Set package name we will run as
while getopts f:p: opt; do
    case $opt in
        f)
            fileToPull=$OPTARG
            ;;
        p)
            packageName=$OPTARG
            ;;
    esac
done;

# Block file arg from being blank
if [ -z "$fileToPull" ]; then
    echo "Please specify file or folder to pull with -f argument"
    exit 1
fi

# Block package name arg from being blank
if [ -z "$packageName" ]; then
    echo "Please specify package name to run as when pulling file"
    exit 1
fi

# Check package exists
adb shell pm list packages | grep "$packageName" > /dev/null
if [ $? -gt 0 ]; then
    echo "Package name $packageName does not exist on device"
    exit 1
fi

# Check file exists and has permission with run-as
fileCheck=`adb shell "run-as $packageName ls $fileToPull"`
if [[ $fileCheck =~ "Permission denied" ]] || [[ $fileCheck =~ "No such file or directory" ]]; then
    echo "Error: $fileCheck"
    echo "With file -> $fileToPull"
    exit 1
fi

# Function to pull private file
#
# param 1 = package name
# param 2 = file to pull
# param 3 = output file
function pull_private_file () {

    mkdir -p `dirname $3`

    echo -e "\033[0;35m***" >&2
    echo -e "\033[0;36m Coping file $2 -> $3" >&2
    echo -e "\033[0;35m***\033[0m" >&2

    adb shell "run-as $1 cat $2" > $3
}

# Check if a file is a directory
# 
# param 1 = directory to check
function is_file_dir() {

    adb shell "if [ -d \"$1\" ]; then echo TRUE; fi"
}

# Check if a file is a symbolic link
# 
# param 1 = directory to check
function is_file_symlink() {

    adb shell "if [ -L \"$1\" ]; then echo TRUE; fi"
}

# recursively pull files from device connected to adb
# 
# param 1 = package name
# param 2 = file to pull
# param 3 = output file
function recurse_pull_private_files() {

    is_dir=`is_file_dir "$2"`
    is_symlink=`is_file_symlink "$2"`

    if [ -n "$is_dir" ]; then

        files=`adb shell "run-as $1 ls \"$2\""`

        # Handle the case where directory is a symbolic link
        if [ -n "$is_symlink" ]; then
            correctPath=`adb shell "run-as $1 ls -l \"$2\"" | sed 's/.*-> //' | tr -d '\r'`
            files=`adb shell "run-as $1 ls \"$correctPath\""`
        fi

        for i in $files; do

            # Android adds nasty carriage return that screws with bash vars
            # This removes it. Otherwise weird behavior happens
            fileName=`echo "$i" | tr -d '\r'` 

            nextFile="$2/$fileName"
            nextOutput="$3/$fileName"
            recurse_pull_private_files "$1" "$nextFile" "$nextOutput"
        done
    else

        pull_private_file "$1" "$2" "$3"
    fi
}

recurse_pull_private_files "$packageName" "$fileToPull" "`basename "$fileToPull"`"

সংক্ষেপ: https://gist.github.com/davethomas11/6c88f92c6221ffe6bc26de7335107dd4


পদ্ধতি 1 এ ফিরে , অ্যান্ড্রয়েড ব্যাকআপ এক্সট্র্যাক্টর ব্যবহার করে একটি ব্যাকআপ ডিক্রিপ্ট করে

আমি আমার ম্যাকটিতে যে পদক্ষেপগুলি নিয়েছি এবং এখানে যে বিষয়গুলি আমি এসেছি সেগুলি এখানে:

প্রথমে আমি একটি ব্যাকআপ সারি রেখেছি (এবং আমার ব্যাকআপটি এনক্রিপ্ট করার জন্য একটি পাসওয়ার্ড সেট করেছি, আমার ডিভাইসের এটির প্রয়োজন ছিল):

adb backup -f myAndroidBackup.ab  com.corp.appName

দ্বিতীয়টি আমি এখান থেকে মাত্র abe.jar ডাউনলোড করেছি: https://sourceforge.net/projects/adbextractor/files/abe.jar/download

পরবর্তী আমি দৌড়েছি:

java -jar ./abe.jar unpack myAndroidBackup.ab myAndroidBackup.tar

এই মুহুর্তে আমি একটি ত্রুটি বার্তা পেয়েছি। যেহেতু আমার সংরক্ষণাগারটি এনক্রিপ্ট করা আছে, জাভা আমাকে একটি ত্রুটি দিয়েছে যা আমার কিছু সুরক্ষা নীতি লাইব্রেরি ইনস্টল করার প্রয়োজন ছিল।

  • তাই আমি http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html এ গিয়ে আমার প্রয়োজনীয় সুরক্ষা নীতি জারগুলি ডাউনলোড করেছি। এখন আমার ক্ষেত্রে ইনস্টলের নির্দেশাবলী আমাকে জার ফাইলগুলি রাখার জন্য ভুল অবস্থানটি বলেছে। এটি বলে যে সঠিক অবস্থানটি <জাভা-হোম> / লিবিব / সুরক্ষা । আমি তাদের প্রথমে সেখানে রেখেছি এবং তবুও ত্রুটির বার্তা পেয়েছি। তাই আমি জাভা ১.৮ দিয়ে তদন্ত করেছি এবং আমার ম্যাকে তাদের রাখার সঠিক জায়গাটি ছিল: <জাভা-হোম> / জেআর / লিবিব / সুরক্ষা । আমি আসল নীতি জারের ব্যাকআপ নেওয়ার বিষয়টি নিশ্চিত করেছি এবং সেগুলি সেখানে রেখেছি। ভোলা আমি abe.jar এর সাথে একটি পাসওয়ার্ড প্রবেশ করতে সক্ষম হয়ে একটি টার ফাইলটিতে ডিক্রিপ্ট করেছিলাম।

শেষ পর্যন্ত আমি দৌড়েছি ( আবার আগের কমান্ডটি চালানোর পরে )

tar xvf myAndroidBackup.tar

এখন এটি লক্ষণীয় গুরুত্বপূর্ণ যে আপনি যদি কেবলমাত্র রান্না এবং বিড়ালটিকে চালাতে পারেন তবে এটি অনেক দ্রুত। এক, আপনি কেবল নিজের পছন্দ মতো ফাইল পাবেন এবং পুরো অ্যাপ্লিকেশনটি নয়। দুই, আরও ফাইল (আমার জন্য + এনক্রিপশন) স্থানান্তর করা ধীর করে দেয়। সুতরাং আপনার যদি ওএসএক্স-এ রান-অজ না থাকে তবে এই পদ্ধতিটি করা জেনে রাখা গুরুত্বপূর্ণ, তবে স্ক্রিপ্টটি প্রথমে ডিবাগ অ্যাপ্লিকেশনটির জন্য হওয়া উচিত।

মনে মনে আমি এটি আজ লিখেছি এবং এটি কয়েকবার পরীক্ষা করেছি, সুতরাং দয়া করে আমাকে কোনও বাগ সম্পর্কে অবহিত করুন!


4
পদ্ধতি # 1 এর সাথে আপনার প্রতিক্রিয়াটির জন্য ধন্যবাদ আমি একটি প্রোডাকশন নন-রুটেড ডিভাইসে ইনস্টল করা একটি ডিবাগ টার্গেট অ্যাপ থেকে প্যাকেজ ব্যাকআপ পেতে এবং এটি সন্ধান করতে সক্ষম হয়েছি, তবে ব্যাকআপটিতে কেবল ম্যানিফেস্ট ফাইল রয়েছে। পদ্ধতি # 2 দিয়ে আমি সমস্ত অ্যাপ্লিকেশনটির ডেটা ডাউনলোড করেছি, তবে বাইনারি (যেমন এসকিউএলাইট ফাইল) অপঠনযোগ্য। আমি আপনার স্ক্রিপ্টের ভিত্তিতে একটি সমাধান যুক্ত করি যা আমার জন্য কাজ করেছিল।
পাওলোনে

1

ফর্ম শুরু করে ডেভ টমাস লিপিটি 2 টি সমস্যা থেকে উত্তরণের জন্য আমি আমার নিজস্ব সমাধান লিখতে সক্ষম হয়েছি:

  1. আমার ব্যাকআপটিতে কেবল মেনিফেস্ট ফাইল ছিল
  2. বাইনারি ফাইলগুলি ডেভ থমাসের সাথে পেয়েছিল যেখানে অপঠনযোগ্য

এটি আমার স্ক্রিপ্ট, এটি এসডিকার্ডে অ্যাপ্লিকেশন ডেটা অনুলিপি করে এবং তারপরে এটি টান

#Check we have one connected device
adb devices -l | grep -e 'device\b' > /dev/null

if [ $? -gt 0 ]; then
    echo "No device connected to adb."
    exit 1
fi

# Set filename or directory to pull from device
# Set package name we will run as
while getopts f:p: opt; do
    case $opt in
        f)
            fileToPull=$OPTARG
            ;;
        p)
            packageName=$OPTARG
            ;;
    esac
done;

# Block package name arg from being blank
if [ -z "$packageName" ]; then
    echo "Please specify package name to run as when pulling file"
    exit 1
fi

# Check package exists
adb shell pm list packages | grep "$packageName" > /dev/null
if [ $? -gt 0 ]; then
    echo "Package name $packageName does not exist on device"
    exit 1
fi

    adb shell "run-as $packageName cp -r /data/data/$packageName/ /sdcard/$packageName"
    adb pull /sdcard/$packageName
    adb shell rm -rf /sdcard/$packageName

1

তমাসের উত্তরের অনুরূপ , ম্যাক ওএস এক্সের জন্য your.app.idআপনার ডিভাইস থেকে অ্যাপের জন্য সমস্ত ফাইল আনতে এবং সেগুলিতে (এই ক্ষেত্রে) সংরক্ষণ করার জন্য এখানে একটি ওয়ান-লাইনার রয়েছে ~/Desktop/your.app.id:

(
    id=your.app.id &&
    dest=~/Desktop &&
    adb shell "run-as $id cp -r /data/data/$id /sdcard" &&
    adb -d pull "/sdcard/$id" "$dest" &&
    if [ -n "$id" ]; then adb shell "rm -rf /sdcard/$id"; fi
)
  • বাদ দিন -dএমুলেটর থেকে টান
  • আপনার সেশন ভেরিয়েবলগুলি স্টম্প করে না
  • আপনি টার্মিনাল.এপ এ পুরো ব্লকটি পেস্ট করতে পারেন (বা চাইলে নতুন লাইনগুলি সরিয়ে ফেলুন)

0

Apk সহ গেমের ডেটা ব্যাক আপ । নওগাত অনেপলস 2।

**adb backup "-apk com.nekki.shadowfight" -f "c:\myapk\samsung2.ab"**

adb backup -f myapp.ab -apk com.myapp # backup on one device adb restore myapp.ab # restore to the same or any other device
স্টিভেন লিন 16

0

এর অর্থ কি এই যে কেউ পৃথিবী থেকে ডিরেক্টরিটি chmod করতে পারে: x থেকে পৃথিবীতে: আরএক্স দীর্ঘ ফাইলগুলি আনতে সক্ষম?

হ্যাঁ অবশ্যই. অদ্ভুতভাবে যথেষ্ট, আপনার xবিট সেট করার জন্য ফাইলও দরকার । (কমপক্ষে Android 2.3 এ)

chmod 755 সমস্ত উপায় ডাউন কোনও ফাইল অনুলিপি করে কাজ করেছে (তবে আপনি যদি ডিভাইসটি ব্যবহার চালিয়ে যাওয়ার পরিকল্পনা করেন তবে আপনার অনুমতিগুলি পরে নেওয়া উচিত)।


0

আপনি করতে পারেন:

অ্যাডবি টান / সঞ্চয়স্থান / এমুলেটেড / 0 / অ্যান্ড্রয়েড / ডেটা //


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