Bagaimana cara mengakses data / folder data di perangkat Android?


316

Saya sedang mengembangkan aplikasi dan saya tahu basis data saya *.dbakan munculdata/data/com.****.***

Saya dapat mengakses file ini dari AVD di Eclipse dengan bantuan manajer sqlite

Tetapi saya tidak dapat mengakses file ini di ponsel Android saya.
Saya google dan mengatakan saya perlu me-root ponsel saya untuk melakukannya, tetapi saya tidak ingin melakukannya. (Telepon baru, masalah garansi, dan masalah keamanan)

Jadi, inilah pertanyaan saya: Bagaimana saya bisa mengakses data/data/.....direktori saya di ponsel Android saya " tanpa rooting "?

Bisakah saya mengubah izin pengguna untuk direktori data/data.....tanpa rooting?


1
apakah Anda punya file database.db .. ???
Amit Prajapati

si am using database - "openOrCreateDatabase (....)"
Naveen Prince P

5
Anda harus melakukan root pada ponsel terlebih dahulu. Maka Anda akan membutuhkan aplikasi pengelola file yang kompeten yang dapat Anda gunakan. Manajer file ASTRO populer tetapi tidak memiliki dukungan akses root sehingga tidak berguna bagi pengguna yang kuat. Anda harus dapat menggunakan ES File Explorer atau File Expert. Baru-baru ini saya memiliki masalah dalam melihat / data / data atau folder yang dilindungi lainnya dengan ES File Explorer dan sudah cukup banyak meninggalkannya, dan sekarang saya menggunakan File Expert. Keduanya mengharuskan Anda masuk ke pengaturan dan mengaktifkan opsi root explorer (dan kadang-kadang juga me-mount sistem file sebagai dapat ditulis). Jadi, Anda perlu melakukan itu terlebih dahulu.
Samir

Ini bukan pemrograman pertanyaan terkait atau jawaban.
SkyWalker

Jawaban:


375

Mengakses file secara langsung di ponsel Anda sulit, tetapi Anda mungkin dapat menyalinnya ke komputer di mana Anda dapat melakukan apa pun yang Anda inginkan dengannya. Tanpa rooting, Anda memiliki 2 opsi:

  1. Jika aplikasi ini debuggable Anda dapat menggunakan run-asperintah di adb shell

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
  2. Atau Anda dapat menggunakan fungsi cadangan Android.

    adb backup -noapk com.your.packagename

    Anda sekarang akan diminta untuk 'membuka kunci perangkat Anda dan mengkonfirmasi operasi pencadangan'. Sebaiknya TIDAK memberikan kata sandi, jika tidak maka akan semakin sulit untuk membaca data. Cukup klik 'backup data saya'. File 'backup.ab' yang dihasilkan di komputer Anda berisi semua data aplikasi dalam format cadangan android. Pada dasarnya ini adalah file tar terkompresi. Halaman ini menjelaskan bagaimana Anda dapat menggunakan perintah zlib OpenSSL untuk mengompresnya. Anda dapat menggunakan adb restore backup.dbperintah untuk memulihkan cadangan.


15
adb backup -f \location\on\local\drive -noapk app.package.namebekerja untuk saya tanpa root
theblang

24
Gunakan perintah ini untuk mengompres file cadangan Anda:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
Dalam Opsi 1, bagaimana cara memberi tahu perintah cp untuk menyimpannya di laptop saya (Mac)? Jika Anda memberikan contoh Win, saya ingin tahu juga, dan hanya akan menerjemahkannya. Terima kasih.
Gerard

10
Penting: Menjalankan adb backup -noapk com.your.packagenameakan menyimpan file ab pada direktori saat ini , jadi pastikan Anda telah menavigasi di direktori yang benar (mis. cd Desktop..)
Menelaos Kotsollaris

6
Perhatikan bahwa pendekatan pencadangan akan menghasilkan cadangan kosong jika aplikasi Anda telah menonaktifkan pencadangan melalui android:allowBackup="false"dalam manifes.
Tom

130

Jika Anda menggunakan Android Studio 3.0 atau versi yang lebih baru maka ikuti langkah-langkah ini.

  1. Klik Lihat > Alat Windows > Device File Explorer .
  2. Bentangkan / data / data / [nama paket] nama .

Anda hanya dapat memperluas paket yang berjalan dalam mode debug pada perangkat yang tidak di-rooting.

Langkah-langkah diikuti di Android Studio 3.0


1
saya tidak bisa melihat apa pun di dermaga ini. dan katakan aku tidak menunjukkan apa-apa. apakah kamu tahu apa masalahnya?
Mahdi Azadbar

1
Ini hanya berfungsi dalam mode debug, bukan untuk rilis-build
itinance

Terima kasih telah menunjukkan cara no-pita untuk melihat ke dalam sistem file!
Lensflare

Saya sepertinya tidak memiliki opsi dalam versi 3.0.1, sudahkah pindah?
Codingale

1
ini luar biasa. Seandainya saya tahu ini beberapa waktu yang lalu.
checkmate711

59

Anda juga dapat mencoba mengambil db menggunakan aplikasi root explorer. Dan jika itu tidak berhasil maka Anda dapat mencoba ini:

  1. Buka cmd
  2. Ubah direktori Anda dan masuk ke 'Platform tools'
  3. Ketik ' adb shell'
  4. su
  5. Tekan 'Izinkan' di perangkat
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. Buka tampilan DDMS di Eclipse dan dari sana buka 'FileExplorer' untuk mendapatkan file yang Anda inginkan

Setelah ini, Anda harus dapat menelusuri file pada perangkat yang di-rooting.


2
Saya pikir aplikasi jelajah root hanya berfungsi untuk ponsel yang di-rooting Saya akan mencoba metode 2
Naveen Prince P

5
Tidak dapat chmod / data: Operasi tidak diizinkan
bofredo

@ bofredo Saya pikir ini karena ponsel Anda tidak di-rooting. Anda harus me-root ponsel Anda dan kemudian coba ini
Sheraz Ahmad Khilji

1
@mahemadhi ya Anda mungkin harus menjalankan perintah ini secara manual untuk setiap direktori karena semua direktori memiliki izin pribadi untuk mereka.
Sheraz Ahmad Khilji

1
@VivekChavda ya mereka membutuhkan ponsel yang di-root
Sheraz Ahmad Khilji

21

Untuk melakukan hal-hal di atas (mis. Mengakses folder yang dilindungi dari dalam ponsel Anda sendiri), Anda masih perlu root. (Itu termasuk mengubah izin pemasangan pada folder / data dan mengaksesnya)

Tanpa root, mengakses /datalangsung untuk membaca kecuali dari dalam aplikasi Anda melalui kode tidak mungkin. Jadi Anda dapat mencoba menyalin file itu ke sdcard atau tempat yang dapat diakses, dan kemudian, Anda harus dapat mengaksesnya secara normal.

Rooting tidak akan membatalkan garansi Anda jika Anda memiliki perangkat pengembang. Maaf, tidak ada cara lain AFAIK.


saya tidak menggunakan perangkat pengembang. Milik saya adalah Xperia U
Naveen Prince P

dapatkah saya mengedit izin pengguna folder data dengan perintah chmode?
Naveen Prince P

Seluruh partisi dipasang sebagai hanya-baca. Saya akan mengatakan taruhan terbaik Anda akan adb pullseperti yang disebutkan dalam jawaban di bawah ini.
Anirudh Ramanathan

Saya dimungkinkan jika aplikasi mengizinkannya. Direktori semua memiliki x izin untuk semua orang (tetapi tidak ada r untuk semua orang, jadi Anda harus tahu jalannya). Itu tergantung pada apakah aplikasi membuat dunia file dapat diakses atau tidak. Beberapa file, sebagian besar tidak.
Jan Hudec

Pertama Anda mengatakan tidak mungkin untuk membaca, maka Anda menyarankan untuk menyalin file di tempat lain. Tapi, bagaimana cara menyalin file tanpa membacanya di tempat pertama? Saya pikir jawaban ini bermasalah.
hingga

13

Cara termudah (hanya satu langkah sederhana) untuk menarik file dari folder aplikasi debuggable Anda (katakanlah /data/data/package.name/databases/file) pada perangkat Android 5.0+ yang tidak dicabut adalah dengan menggunakan perintah ini:

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

12
  1. Buka prompt perintah Anda
  2. Ubah direktori ke E: \ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
  3. Masukkan perintah di bawah ini
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. Ubah direktori untuk cd /sdcardmemastikan database.dbada.
  7. adb pull /sdcard/database.db atau cukup Anda dapat menyalin database.db dari perangkat.

Berfungsi sempurna untuk saya. Terima kasih! Tetapi dalam kasus saya, nama file database tidak memiliki ekstensi .db.
technik

10

Gunakan File Explorer di gerhana. Pilih Windows => Tampilkan Lihat => Lainnya ... => File Explorer.

Cara lain adalah menarik file melalui adb:

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

5

Saya juga pernah mengalami masalah yang sama. Tidak ada cara untuk mengakses langsung file di dalam perangkat android kecuali adb shell atau rooting device.

Di samping ini ada 02 alternatif:

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) Coba ini: https://github.com/sanathp/DatabaseManager_For_Android


5

Untuk membuat cadangan dari Android ke Desktop

Buka cmd baris perintah dan jalankan ini: adb backup -f C: \ Intel \ xxx.ab -noapk your.app.package . Jangan masukkan kata sandi dan klik Cadangkan data saya. Pastikan untuk tidak menyimpan pada drive C root. Anda mungkin ditolak. Inilah mengapa saya menyimpan di C: \ Intel.

Untuk mengekstrak file * .ab

  1. Buka di sini dan unduh: https://sourceforge.net/projects/adbextractor/
  2. Ekstrak file yang diunduh dan navigasikan ke folder tempat Anda mengekstraksi.
  3. jalankan ini dengan nama file Anda sendiri: java -jar abe.jar unpack c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar

1
Ini jawaban yang bagus, terima kasih. Bekerja untuk saya untuk mengekstraksi cadangan aplikasi tunggal yang dibuat pada perangkat Xiaomi (dengan ekstensi .bak). Tidak diperlukan rooting
Rusia

4

Pada perangkat yang di- rooting , solusi yang benar adalah ini:

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

Solusi asli berhasil, tetapi chmod akan mengembalikan direktori yang tidak dikenal. Mengubah perintah chmod ke / data / data / * memberi akses ke semua subfolder di direktori data dari DDMS di Intellij. Saya menganggap solusi yang sama berlaku untuk Eclipse DDMS.

MEMPERBARUI Jadi, apa yang saya temukan aneh. Saya menjalankan Nexus 6 menggunakan DDMS di IntelliJ (Monitor Perangkat Android). Saya telah membangun aplikasi pemula kecil. Aplikasi tersebut menyimpan data ke file .csv dalam data / data / com.example.myapp / file

Ketika saya pertama kali mulai mencoba mengakses file ini pada Nexus 6 saya, saya menemukan bahwa saya harus melakukan root pada perangkat .. Saya dapat melihat folder data, tetapi mencoba membukanya tidak akan berhasil. Seperti disebutkan secara online di tempat lain, perluasan + akan hilang kemudian muncul kembali tidak lama kemudian (perhatikan, ada solusi di web yang mengklaim untuk mengizinkan akses ke folder ini tanpa rooting, saya tidak menemukannya sampai terlambat, dan saya tidak yakin apakah saya lebih memilih untuk tidak me-root ((Saya lebih suka bisa melakukannya secara manual daripada mengandalkan aplikasi atau command prompt untuk memberi saya solusi saya)))). Saya melakukan root 6 dan mencoba DDMS lagi.

Pada titik ini, itu menunjukkan kepada saya folder data dan saya dapat memperluas folder dan melihat com. direktori, tetapi saya tidak bisa membuka salah satunya. Saat itulah saya menemukan solusi di atas. Instruksi awal tidak akan berfungsi pada bagian ini:

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

Saat itulah saya mencoba solusi yang saya posting:

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

Solusi itu tampaknya berhasil, tetapi hanya pada folder tertentu. Saya sekarang dapat memperluas folder myapp saya, tetapi tidak dapat memperluas direktori file di dalamnya.

Pada titik ini, saya bermain-main sebentar kemudian menemukan mengapa tidak mencobanya di direktori yang saya butuhkan daripada mencoba entri wildcard ini.

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

Diikuti oleh:

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

Perintah ini memungkinkan saya untuk memperluas dan melihat file di direktori aplikasi saya untuk mengonfirmasi bahwa .csv disimpan dengan benar.

Semoga ini bisa membantu seseorang. Saya berjuang dengan ini selama berjam-jam!

(untuk menambahkan sedikit lebih jauh, anehnya, izin tidak lolos ke file .csv yang diteruskan ke direktori file. Izin direktori file saya membaca drwxrwxrwx dan izin file log.csv saya baca -rw-rw --- - .. hanya fyi)


2

Anda dapat mengunduh file sigle seperti itu:

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

Sebelum mengunduh, Anda mungkin tidak perlu melihat struktur file di Direktori Aplikasi Anda. Untuk ini lakukan langkah-langkah berikut yang THelperdiperhatikan di atas:

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

The Android-Studio cara Shahidulyang disebutkan ( https://stackoverflow.com/a/44089388/1256697 ) juga bekerja. Bagi mereka yang tidak melihat DeviceFile ExplorerOpsi di Menu: Pastikan, untuk membuka direktori / android-di Android Studio. Misalnya bereaksi-pribumi pengguna memiliki ini dalam mereka Proyek-Folder kanan pada Tingkat yang sama seperti / ios-direktori.


1

Salah satu cara sederhana adalah membuat database Anda di SD-Card. Karena Anda tidak bisa mendapatkan akses ke folder data ponsel Anda di memori internal, kecuali Anda melakukan root pada ponsel Anda. Jadi mengapa tidak membuat database Anda di SD-Card.

Selain itu, jika Anda mau, Anda dapat menulis beberapa kode penyalinan file untuk menyalin file basis data yang ada (dari memori internal) ke memori eksternal tanpa memerlukan root apa pun.


Bagaimana cara melakukannya? bagaimana saya bisa membuat db di sdcard
Naveen Prince P

Metode ini akan membantu Anda membuat basis data pada kartu-sd. Cukup sediakan jalur Filemenunjuk ke SD-Card dan Anda baik untuk pergi
waqaslam

1

mungkin untuk mengakses folder ini Anda memerlukan hak administratif.

jadi Anda memiliki dua opsi: -

  1. root perangkat Anda dan daripada mencoba mengakses folder ini
  2. gunakan emulator

ps: jika Anda menggunakan salah satu dari dua opsi di atas, Anda dapat mengakses folder ini dengan mengikuti langkah-langkah ini

buka perspektif DDMS -> perangkat Anda -> (Pilih File Explorer dari opsi jendela kanan) pilih paket -> data -> data -> nama paket -> file

dan dari sana Anda dapat menarik file Anda


1

adb backuptidak bekerja untuk saya, jadi inilah yang saya lakukan (Xiaomi Redmi Note 4X, Android 6.0):
1. Buka Pengaturan> Pengaturan Tambahan> Pencadangan & reset> Pencadangan lokal .
2. Ketuk 'Cadangkan' di bagian bawah layar.
3. Hapus centang pada tanda centang 'Sistem' dan 'Aplikasi'.
4. Ketuk tombol pengungkapan detail di sebelah kanan sel 'Aplikasi' untuk menavigasi ke layar pemilihan aplikasi.
5. Pilih aplikasi yang diinginkan dan ketuk OK.
6. Setelah cadangan selesai, file yang sebenarnya harus ditemukan. Milik saya dapat ditemukan di / MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ .
7. Kemudian saya mengikuti langkah-langkah dari jawaban ini dengan RonTLVuntuk benar-benar mengonversi file cadangan (.bak dalam kasus saya) menjadi tar (duplikasi dari jawaban asli):
"
a) Buka di sini dan unduh: https://sourceforge.net/projects/adbextractor/
b) Ekstrak file yang diunduh dan arahkan ke folder tempat Anda mengekstraksi.
c) jalankan ini dengan nama file Anda sendiri: java -jar abe.jar buka kemasan c: \ Intel \ xxx.ab c: \ Intel \ xxx.tar
"


0

Anda dapat menyalin file db ini ke suatu tempat di eclipse explorer (mis: sdcard atau PC), dan Anda dapat menggunakan sqlite untuk mengakses dan memperbarui file db ini.



0

Anda juga dapat mencoba menyalin file ke folder SD Card, yang merupakan folder publik, kemudian Anda dapat menyalin file ke PC Anda di mana Anda dapat menggunakan sqlite untuk mengaksesnya.

Berikut ini beberapa kode yang dapat Anda gunakan untuk menyalin file dari data / data ke folder penyimpanan publik:

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();
    }
}

Nyata:

<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" />

Semua tindakan untuk file salinan tidak dapat diakses jika file tersebut tidak membagikan izin Baca kepada Orang Lain
Steve Luck

0

Database SQLlite disimpan di Ponsel pengguna dan tersembunyi di bawah jalur:

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

Anda memiliki 2 opsi di sini:

  1. Anda dapat me-root ponsel Anda sehingga Anda mendapatkan akses untuk melihat file db3 hidding Anda
  2. ini bukan solusi tetapi sebuah solusi. Mengapa tidak membuat halaman pengujian yang menampilkan tabel database Anda di dalamnya menggunakan statemen 'pilih'.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.