Làm cách nào để truy cập thư mục dữ liệu / dữ liệu trong thiết bị Android?


316

Tôi đang phát triển một ứng dụng và tôi biết cơ sở dữ liệu của mình *.dbsẽ xuất hiện trongdata/data/com.****.***

Tôi có thể truy cập tệp này từ AVD trong Eclipse với sự trợ giúp của trình quản lý sqlite

Nhưng tôi không thể truy cập tệp này trong điện thoại Android của mình.
Tôi google nó và nó nói rằng tôi cần root điện thoại của mình để làm điều đó, nhưng tôi không muốn làm điều đó. (Điện thoại mới, vấn đề bảo hành và vấn đề bảo mật)

Vì vậy, đây là câu hỏi của tôi: Làm thế nào tôi có thể truy cập data/data/.....thư mục của mình trong điện thoại Android " mà không cần root "?

Tôi có thể thay đổi quyền của người dùng cho thư mục data/data.....mà không cần root nó không?


1
Bạn có tập tin cơ sở dữ liệu không .. ???
Amit Prajapati

si đang sử dụng cơ sở dữ liệu - "openOrCreateDatabase (....)"
Hoàng tử Naveen P

5
Bạn chắc chắn sẽ cần phải root điện thoại trước hết. Sau đó, bạn sẽ cần một ứng dụng quản lý tập tin có thẩm quyền mà bạn có thể sử dụng. Trình quản lý tệp ASTRO rất phổ biến nhưng nó không có hỗ trợ truy cập root nên nó vô dụng đối với người dùng có quyền lực. Bạn sẽ có thể sử dụng ES File Explorer hoặc File Expert. Gần đây tôi đã gặp sự cố khi xem / dữ liệu / dữ liệu hoặc các thư mục được bảo vệ khác với ES File Explorer và đã bỏ khá nhiều dữ liệu đó và hiện tôi đang sử dụng File Expert. Cả hai đều yêu cầu bạn đi vào cài đặt và bật tùy chọn trình thám hiểm gốc (và đôi khi cũng gắn kết hệ thống tệp dưới dạng có thể ghi). Vì vậy, bạn cần phải làm điều đó đầu tiên.
Samir

Đây không phải là câu hỏi liên quan đến lập trình cũng như câu trả lời.
SkyWalker

Câu trả lời:


375

Truy cập các tệp trực tiếp trên điện thoại của bạn rất khó khăn, nhưng bạn có thể sao chép chúng vào máy tính của mình, nơi bạn có thể làm bất cứ điều gì bạn muốn với nó. Không cần root máy, bạn có 2 tùy chọn:

  1. Nếu ứng dụng có thể gỡ lỗi, bạn có thể sử dụng run-aslệnh trong shell adb

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. Ngoài ra, bạn có thể sử dụng chức năng sao lưu của Android.

    adb backup -noapk com.your.packagename

    Bây giờ bạn sẽ được nhắc 'mở khóa thiết bị của bạn và xác nhận thao tác sao lưu'. Tốt nhất KHÔNG nên cung cấp mật khẩu, nếu không việc đọc dữ liệu sẽ trở nên khó khăn hơn. Chỉ cần nhấp vào 'sao lưu dữ liệu của tôi'. Tệp 'backup.ab' kết quả trên máy tính của bạn chứa tất cả dữ liệu ứng dụng ở định dạng sao lưu Android. Về cơ bản nó là một tập tin tar nén. Trang này giải thích cách bạn có thể sử dụng lệnh zlib của OpenSSL để giải nén nó. Bạn có thể sử dụng adb restore backup.dblệnh để khôi phục lại bản sao lưu.


15
adb backup -f \location\on\local\drive -noapk app.package.namelàm việc cho tôi mà không cần root
theblang 4/12/13

24
Sử dụng lệnh này để giải nén tệp sao lưu của bạn:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
Trong Tùy chọn 1, làm cách nào để tôi biết lệnh cp để lưu chúng vào máy tính xách tay (Mac)? Nếu bạn đưa ra một ví dụ Win, tôi cũng muốn biết và sẽ chỉ dịch nó. Cảm ơn.
Gerard

10
Quan trọng: Chạy adb backup -noapk com.your.packagenamesẽ lưu tệp ab trên thư mục hiện tại , vì vậy hãy đảm bảo bạn đã điều hướng trong thư mục bên phải (ví dụ cd Desktop..)
Menelaos Kotsollaris

6
Lưu ý rằng phương pháp sao lưu sẽ mang lại một bản sao lưu trống nếu ứng dụng của bạn đã vô hiệu hóa các bản sao lưu thông qua android:allowBackup="false"trong bảng kê khai.
Tom

130

Nếu bạn đang sử dụng Android Studio 3.0 hoặc phiên bản mới hơn thì hãy làm theo các bước sau.

  1. Bấm Xem > Công cụ Windows > Trình khám phá tệp thiết bị .
  2. Các nút mở rộng / data / data / [tên gói] .

Bạn chỉ có thể mở rộng các gói chạy trong chế độ gỡ lỗi trên thiết bị chưa root.

Các bước tiếp theo trong Android Studio 3.0


1
Tôi không thể nhìn thấy bất cứ điều gì trong bến tàu này. và nói tôi không có gì hiển thị. Bạn có biết vấn đề là gì không?
Mahdi Azadbar

1
Điều này chỉ hoạt động trong chế độ gỡ lỗi, không phải cho bản phát hành-xây dựng
bắt đầu từ

Cảm ơn bạn đã chỉ ra cách không có pita để xem xét hệ thống tập tin!
Lensflare

Tôi dường như không có tùy chọn trong phiên bản 3.0.1, nó đã di chuyển chưa?
Mã hóa

1
điều này thật tuyệt. Ước gì tôi đã biết điều này một thời gian trước đây.
checkmate711

59

Bạn cũng có thể thử tìm nạp db bằng ứng dụng root explorer. Và nếu điều đó không hiệu quả thì bạn có thể thử điều này:

  1. Mở cmd
  2. Thay đổi thư mục của bạn và đi vào 'Công cụ nền tảng'
  3. Nhập ' adb shell'
  4. su
  5. Nhấn 'Cho phép' trên thiết bị
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Mở khung nhìn DDMS trong Eclipse và từ đó mở 'FileExplorer' để có được tệp mong muốn của bạn

Sau này, bạn sẽ có thể duyệt các tập tin trên thiết bị đã root.


2
Tôi nghĩ ứng dụng khám phá root chỉ hoạt động cho điện thoại đã root. Tôi sẽ thử phương pháp thứ 2
Naveen Prince P

5
Không thể chmod / dữ liệu: Không được phép thao tác
bofredo

@bofredo Tôi nghĩ đó là vì điện thoại của bạn không được root. bạn nên root điện thoại của mình và sau đó thử cái này
Sheraz Ahmad Khilji

1
@mahemadhi vâng, có lẽ bạn sẽ phải chạy lệnh này theo cách thủ công cho mọi thư mục vì tất cả các thư mục đều có quyền riêng tư đối với chúng.
Sheraz Ahmad Khilji

1
@VivekChavda yup họ yêu cầu điện thoại đã được root
Sheraz Ahmad Khilji

21

Để thực hiện bất kỳ thao tác nào ở trên (tức là truy cập các thư mục được bảo vệ từ chính điện thoại của bạn), bạn vẫn cần root. (Điều đó bao gồm thay đổi quyền gắn kết trên thư mục / data và truy cập vào nó)

Không có root, truy cập /datatrực tiếp để đọc ngoại trừ từ bên trong ứng dụng của bạn thông qua mã là không thể. Vì vậy, bạn có thể thử sao chép tệp đó vào sdcard hoặc nơi nào đó có thể truy cập được và sau đó, bạn sẽ có thể truy cập tệp bình thường.

Root sẽ không làm mất hiệu lực bảo hành của bạn nếu bạn có một thiết bị dành cho nhà phát triển. Tôi xin lỗi, không có cách nào khác AFAIK.


tôi không sử dụng thiết bị dành cho nhà phát triển Của tôi là Xperia U
Hoàng tử Naveen P

Tôi có thể chỉnh sửa quyền của người dùng thư mục dữ liệu bằng các lệnh chmode không?
Hoàng tử Naveen P

Toàn bộ phân vùng được gắn dưới dạng chỉ đọc. Tôi muốn nói rằng đặt cược tốt nhất của bạn sẽ được adb pullđề cập trong câu trả lời dưới đây.
Anirudh Ramanathan

Tôi có thể nếu ứng dụng cho phép nó. Tất cả các thư mục đều có quyền x cho mọi người (nhưng không có r cho mọi người, vì vậy bạn phải biết đường dẫn). Hơn nó phụ thuộc vào việc ứng dụng làm cho thế giới tập tin có thể truy cập được hay không. Một số tập tin là, hầu hết là không.
Jan Hudec

Đầu tiên bạn nói không thể đọc được, sau đó bạn đề nghị sao chép tệp ở nơi khác. Nhưng, làm thế nào để sao chép một tập tin mà không đọc nó ở nơi đầu tiên? Tôi nghĩ rằng câu trả lời này là lỗi.
cho đến

13

Cách dễ nhất (chỉ một bước đơn giản) để kéo tệp từ thư mục ứng dụng có thể gỡ lỗi của bạn (giả sử /data/data/package.name/databases/file) trên thiết bị Android 5.0+ chưa được đăng ký là sử dụng lệnh này:

adb exec-out run-as package.name cat databases/file > file

12
  1. Mở dấu nhắc lệnh của bạn
  2. Thay đổi thư mục thành E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
  3. Nhập các lệnh dưới đây
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Thay đổi thư mục cd /sdcardđể đảm bảo database.dblà có.
  7. adb pull /sdcard/database.db hoặc đơn giản là bạn có thể sao chép cơ sở dữ liệu từ thiết bị.

Hoạt động hoàn hảo cho tôi. Cảm ơn! Nhưng trong trường hợp của tôi, tên tệp cơ sở dữ liệu không có phần mở rộng .db.
Technik

10

Sử dụng File Explorer trong nhật thực. Chọn Windows => Hiển thị Chế độ xem => Khác ... => File Explorer.

Một cách khác là kéo tệp qua adb:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

5

Tôi cũng có vấn đề tương tự một lần. Không có cách nào để truy cập trực tiếp tệp trong các thiết bị Android ngoại trừ vỏ adb hoặc thiết bị root.

Bên cạnh đây là 02 lựa chọn thay thế:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, 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) {

    }
}

2) Hãy thử điều này: https://github.com/sanathp/DatabaseManager_For_Android


5

Để sao lưu từ Android sang máy tính để bàn

Mở dòng lệnh cmd và chạy cái này: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . Không nhập mật khẩu và bấm vào Sao lưu dữ liệu của tôi. Đảm bảo không lưu vào ổ C root. Bạn có thể bị từ chối. Đây là lý do tại sao tôi lưu trên C: \ Intel.

Để giải nén tệp * .ab

  1. Truy cập vào đây và tải xuống: https://sourceforge.net/projects/adbextractor/
  2. Giải nén tập tin đã tải xuống và điều hướng đến thư mục nơi bạn giải nén.
  3. chạy cái này với tên tệp của riêng bạn: java -jar abe.jar giải nén c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

1
Đây là một câu trả lời tuyệt vời, cảm ơn bạn. Làm việc cho tôi để trích xuất bản sao lưu một ứng dụng được tạo trên thiết bị Xiaomi (có phần mở rộng .bak). Không cần root máy
Nga

4

Trên một thiết bị đã root , giải pháp chính xác là:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

Giải pháp ban đầu đã hoạt động, nhưng chmod sẽ trả về thư mục không xác định. Việc thay đổi lệnh chmod thành / data / data / * đã cấp quyền truy cập vào tất cả các thư mục con trong thư mục dữ liệu từ DDMS trong Intellij. Tôi giả sử giải pháp tương tự là đúng với DDMS Eclipse.

CẬP NHẬT Vì vậy, những gì tôi tìm thấy là lạ. Tôi đang chạy Nexus 6 bằng DDMS trong IntelliJ (Trình theo dõi thiết bị Android). Tôi đã xây dựng một ứng dụng khởi động nhỏ. Ứng dụng đã nói lưu dữ liệu vào tệp .csv trong dữ liệu / data / com.example.myapp / files

Khi tôi lần đầu tiên bắt đầu thử truy cập tệp này trên Nexus 6, tôi thấy rằng tôi phải root thiết bị .. Tôi có thể thấy thư mục dữ liệu, nhưng cố gắng mở nó sẽ không hoạt động. Như đã đề cập trực tuyến ở những nơi khác, bản mở rộng + sẽ biến mất sau đó xuất hiện lại ngay sau đó (lưu ý, có các giải pháp trên web tuyên bố cho phép truy cập vào các thư mục này mà không cần root máy, tôi đã không tìm thấy chúng cho đến quá muộn và tôi không chắc chắn liệu tôi có muốn không root hay không ((tôi muốn có thể làm điều đó bằng tay hơn là dựa vào một ứng dụng hoặc dấu nhắc lệnh để đưa cho tôi giải pháp của mình)). Tôi đã root 6 và thử lại DDMS.

Tại thời điểm này, nó cho tôi thấy thư mục dữ liệu và tôi có thể mở rộng thư mục và xem com. thư mục, nhưng tôi không thể mở bất kỳ trong số họ. Đó là khi tôi phát hiện ra giải pháp trên. Các hướng dẫn ban đầu sẽ không hoạt động trên phần này:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

Đó là khi tôi thử giải pháp tôi đã đăng:

chmod 777 /data /data/data /data/data/*

Giải pháp đó dường như hoạt động, nhưng chỉ trên một số thư mục nhất định. Bây giờ tôi có thể mở rộng thư mục myapp của mình, nhưng không thể mở rộng thư mục tệp trong đó.

Tại thời điểm này, tôi đã chơi xung quanh một lúc rồi tìm hiểu tại sao không thử nó trên thư mục tôi cần thay vì thử các mục ký tự đại diện này.

chmod 777 /data /data/data /data/data/com.example.myapp/*

Theo dõi bởi:

chmod 777 /data /data/data /data/data/com.example.myapp/files

Các lệnh này cho phép tôi mở rộng và xem các tệp trong thư mục ứng dụng của mình để xác nhận rằng .csv đã được lưu chính xác.

Hy vọng điều này sẽ giúp được ai đó. Tôi đã vật lộn với điều này trong nhiều giờ!

(để kết hợp với điều này một chút nữa, thật kỳ lạ, các quyền không được chuyển đến tệp .csv được chuyển đến thư mục tệp. - .. chỉ fyi)


2

Bạn có thể tải xuống một tập tin sigle như thế:

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

Trước khi tải xuống, bạn có thể không xem cấu trúc tệp trong Danh mục ứng dụng của mình. Đối với điều này làm các bước sau đây THelpernhận thấy ở trên:

adb shell
run-as com.your.packagename 
cd files
ls -als .

Các Android-Studio cách Shahidulđề cập ( https://stackoverflow.com/a/44089388/1256697 làm việc) cũng có. Đối với những người không thấy DeviceFile ExplorerTùy chọn trong Menu: Hãy chắc chắn, để mở / android-Directory trong Android Studio. Ví dụ: người dùng bản địa phản ứng có cái này bên trong Thư mục dự án của họ ngay trên cùng cấp với / ios-Directory.


1

Một trong những cách đơn giản là tạo cơ sở dữ liệu của bạn trên Thẻ SD. Bởi vì bạn không thể truy cập vào thư mục dữ liệu điện thoại của mình trong bộ nhớ trong, trừ khi bạn root điện thoại. Vậy tại sao không chỉ đơn giản là tạo cơ sở dữ liệu của bạn trên Thẻ SD.

Ngoài ra, nếu bạn muốn, bạn có thể viết một số mã sao chép tệp để sao chép tệp cơ sở dữ liệu hiện có của bạn (từ bộ nhớ trong) sang bộ nhớ ngoài mà không yêu cầu bất kỳ root nào.


làm thế nào để làm nó? Làm cách nào tôi có thể tạo db trong sdcard
Naveen Prince P

Đây phương pháp này sẽ giúp bạn tạo cơ sở dữ liệu trên sd-card. Đơn giản chỉ cần cung cấp một đường dẫn Fileđến Thẻ SD và bạn sẽ ổn
waqaslam

1

có thể để truy cập thư mục này bạn cần quyền quản trị.

vì vậy bạn có hai lựa chọn: -

  1. root thiết bị của bạn và cố gắng truy cập thư mục này
  2. sử dụng trình giả lập

ps: nếu bạn đang sử dụng bất kỳ tùy chọn nào ở trên, bạn có thể truy cập thư mục này bằng cách làm theo các bước sau

mở phối cảnh DDMS -> thiết bị của bạn -> (Chọn File Explorer từ tùy chọn cửa sổ bên phải) chọn gói -> dữ liệu -> dữ liệu -> tên gói -> tệp

và từ đó bạn có thể kéo tập tin của bạn lên


1

adb backupkhông hoạt động với tôi, vì vậy đây là những gì tôi đã làm (Xiaomi Redmi Note 4X, Android 6.0):
1. Truy cập Cài đặt> Cài đặt bổ sung> Sao lưu & đặt lại> Sao lưu cục bộ .
2. Nhấn 'Sao lưu' ở dưới cùng của màn hình.
3. Bỏ chọn dấu kiểm 'Hệ thống' và 'Ứng dụng'.
4. Nhấn vào nút tiết lộ chi tiết ở bên phải ô 'Ứng dụng' để điều hướng đến màn hình chọn ứng dụng.
5. Chọn ứng dụng bạn muốn và nhấn OK.
6. Sau khi sao lưu xong, tập tin thực tế cần được định vị bằng cách nào đó. Của tôi có thể được tìm thấy tại / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ .
7. Sau đó, tôi làm theo các bước từ câu trả lời này bằng cách RonTLVđể thực sự chuyển đổi tệp sao lưu (.bak trong trường hợp của tôi) thành tar (sao chép từ câu trả lời ban đầu):
"
a) Truy cập vào đây và tải xuống: https://sourceforge.net/projects/adbextractor/
b) Trích xuất tệp đã tải xuống và điều hướng đến thư mục nơi bạn trích xuất.
c) chạy tệp này với tên tệp của riêng bạn: java -jar abe.jar giải nén c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"


0

bạn có thể sao chép tệp db này vào một nơi nào đó trong eclipse explorer (ví dụ: sdcard hoặc PC) và bạn có thể sử dụng sqlite để truy cập và cập nhật tệp db này.


0

Câu hỏi là: làm thế nào để truy cập dữ liệu-dữ liệu-thư mục-trong-thiết bị android?


Nếu thiết bị android là Bluestacks * Root Browser APK hiển thị dữ liệu / dữ liệu / ..


Hãy thử tải xuống Trình duyệt gốc từ https://apkpure.com/root-browser/com.jrummy.root.browserfree


Nếu tệp là tệp văn bản bạn cần nhấp vào "Mở dưới dạng", "Tệp văn bản", "Mở dưới dạng", "Trình soạn thảo văn bản RB"


0

Bạn cũng có thể thử sao chép tệp vào thư mục Thẻ SD, đây là thư mục chung, sau đó bạn có thể sao chép tệp vào PC nơi bạn có thể sử dụng sqlite để truy cập.

Dưới đây là một số mã bạn có thể sử dụng để sao chép tệp từ dữ liệu / dữ liệu sang thư mục lưu trữ công cộng:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.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) {
        e.printStackTrace();
    }
}

Rõ ràng:

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

Không thể truy cập tất cả hành động đối với tệp sao chép nếu tệp không chia sẻ Đọc quyền cho người khác
Steve Luck

0

Cơ sở dữ liệu SQLlite được lưu trữ trên Điện thoại của người dùng và nó ẩn trong đường dẫn:

/Data/Data/com.companyname.AppName/File/

bạn có 2 lựa chọn ở đây:

  1. bạn có thể root điện thoại để có quyền truy cập để xem tệp db3 ẩn của bạn
  2. đây không phải là một giải pháp mà là một công việc xung quanh Tại sao không chỉ tạo trang thử nghiệm hiển thị bảng cơ sở dữ liệu của bạn trong đó bằng cách sử dụng thống kê 'select'.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.