Androidデバイスのデータ/データフォルダーにアクセスする方法


316

アプリを開発していて、私のデータベース*.dbdata/data/com.****.***

sqlite managerの助けを借りて、EclipseのAVDからこのファイルにアクセスできます

しかし、私は私のAndroid携帯電話でこのファイルにアクセスできません。
私はそれをグーグルし、それはそれをするために私の電話を根絶する必要があると言います、しかし私はそれをしたくありません。(新しい電話、保証の問題、およびセキュリティの問題)

だからここに私の質問があります:data/data/.....ルート権限を取得せずに」Androidフォンのディレクトリにアクセスするにはどうすればよいですか?

data/data.....ルート権限を取得せずにディレクトリのユーザー権限を変更できますか?


1
あなたはdatabase.dbファイルを持っていますか.. ???
アミットプラジャパティ

siはデータベースを使用しています-"openOrCreateDatabase(....)"
Naveen Prince P

5
あなたは間違いなく最初に電話を根絶する必要があります。次に、使用できる有能なファイルマネージャーアプリが必要になります。ASTROファイルマネージャーは人気がありますが、ルートアクセスのサポートがないため、パワーユーザーには役に立ちません。ES File ExplorerまたはFile Expertを使用できるはずです。最近、ESファイルエクスプローラーで/ data / dataまたはその他の保護されたフォルダーを表示する際に問題が発生し、ほとんど見捨てられました。現在、ファイルエキスパートを使用しています。どちらも設定に移動し、ルートエクスプローラーオプションを有効にする必要があります(ファイルシステムを書き込み可能としてマウントすることもあります)。最初にそれを行う必要があります。
Samir 2013

これはプログラミング関連の質問や回答ではありません。
SkyWalker、2015

回答:


375

携帯電話でファイルに直接アクセスすることは困難ですが、ファイルをコンピュータにコピーして、好きなことができるようにすることができます。応援することなく、あなたは2つのオプションがあります:

  1. アプリケーションがデバッグ可能な場合はrun-as、adbシェルでコマンドを使用できます

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
  2. または、Androidのバックアップ機能を使用できます。

    adb backup -noapk com.your.packagename

    「デバイスのロックを解除してバックアップ操作を確認する」ように求められます。パスワードを指定しないことをお勧めします。そうしないと、データの読み取りが難しくなります。「データのバックアップ」をクリックするだけです。作成されたコンピューター上の「backup.ab」ファイルには、Androidバックアップ形式のすべてのアプリケーションデータが含まれています。基本的には圧縮されたtarファイルです。このページでは、OpenSSLのzlibコマンドを使用して解凍する方法について説明します。adb restore backup.dbコマンドを使用して、バックアップを復元できます 。


15
adb backup -f \location\on\local\drive -noapk app.package.namerootなしで私のために働いた
theblang 2013

24
バックアップファイルを解凍するには、このコマンドを使用:dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
Hooman

11
オプション1で、cpコマンドにラップトップ(Mac)に保存するように指示するにはどうすればよいですか?Winの例を挙げれば、私も知りたいと思います。翻訳します。ありがとう。
ジェラール

10
重要:実行中adb backup -noapk com.your.packagenameにABファイル保存されます、現在のディレクトリをので、あなたは正しいディレクトリにナビゲートしている作り、(例えばcd Desktop..
Menelaos Kotsollaris

6
アプリがandroid:allowBackup="false"マニフェストでバックアップを無効にしている場合、バックアップアプローチでは空のバックアップが生成されることに注意してください。
トム

130

Android Studio 3.0以降のバージョンを使用している場合は、次の手順に従ってください。

  1. [ 表示] > [ ツールウィンドウ] > [ デバイスファイルエクスプローラー]をクリックします
  2. 展開/データ/データ/ [パッケージ名]ノード。

ルート権限を取得されていないデバイスでデバッグモードで実行されるパッケージのみを展開できます。

Android Studio 3.0での手順


1
このドックには何も見えません。何も見せないで あなたは何の問題を知っていますか?
Mahdi Azadbar 2017年

1
これはデバッグモードでのみ機能し、リリースビルドでは機能しません
2017

ファイルシステムを調べるためのピタのない方法を示してくれてありがとう!
Lensflare

バージョン3.0.1にオプションがないようですが、移動しましたか?
Codingale 2018年

1
これは素晴らしいです。私が少し前にこれを知っていたらいいのに。
checkmate711

59

ルートエクスプローラーアプリを使用してdbをフェッチすることもできます。そしてそれがうまくいかない場合は、これを試すことができます:

  1. コマンドを開く
  2. ディレクトリを変更し、「プラットフォームツール」に移動します
  3. タイプ ' adb shell'
  4. su
  5. デバイスで[許可]を押します
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. EclipseでDDMSビューを開き、そこから「FileExplorer」を開いて目的のファイルを取得します

この後、ルート権限を取得されたデバイス上のファイルを参照できるはずです。


2
ルート探索アプリはルート化された電話でのみ機能すると思います。2番目の方法を試します
Naveen Prince P

5
chmod / dataを実行できません:操作は許可されていません
bofredo 2013

@bofredoお使いの携帯電話が根付いていないからだと思います。あなたはあなたの電話を根絶して、そしてこれを試すべきです
シェラズ・アフマド・キルジ14

1
@mahemadhiはい、すべてのディレクトリにはプライベートな権限があるため、すべてのディレクトリに対してこのコマンドを手動で実行する必要があります。
Sheraz Ahmad Khilji 2014

1
@VivekChavdaうん、根付いた電話が必要です
Sheraz Ahmad Khilji、2018

21

上記のいずれかを行う(つまり、電話自体から保護されたフォルダーにアクセスする)には、ルートが必要です。(これには、/ dataフォルダーのマウント許可の変更とアクセスが含まれます)

rootなしでは、コードを介しアプリケーション内からを除いて/data直接アクセスして読み取ることはできません。したがって、そのファイルをsdcardまたはアクセス可能な場所にコピーしてみると、通常どおりアクセスできるはずです。

ルート権限を取得しても、デベロッパーのデバイスがある場合は保証が無効になることはありません。申し訳ありませんが、AFAIKの他の方法はありません。


開発者のデバイスを使用していません。鉱山はXperia U
Naveen Prince P

chmodeコマンドでデータフォルダーのユーザー権限を編集できますか?
Naveen Prince P

パーティション全体が読み取り専用としてマウントされます。私はあなたの最善の策adb pullは以下の答えで言及されているとおりだと思います。
Anirudh Ramanathan 2012

アプリケーションで許可されていれば可能です。すべてのディレクトリには、すべてのユーザーに対してx権限があります(ただし、すべてのユーザーに対してrは許可されていないため、パスを知っている必要があります)。それは、アプリケーションがファイルをアクセス可能にしたかどうかによって異なります。一部のファイルはそうですが、ほとんどはそうではありません。
Jan Hudec 2013年

最初に読むことが不可能であると言い、次にファイルを別の場所にコピーすることを勧めます。しかし、そもそもファイルを読み込まずにコピーする方法は?この答えはバギーだと思います。
2015年

13

/data/data/package.name/databases/fileルート権限を取得されていないAndroid 5.0以降のデバイスでデバッグ可能なアプリケーションフォルダー(としましょう)からファイルをプルする最も簡単な方法(1つの簡単な手順)は、次のコマンドを使用することです。

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

12
  1. コマンドプロンプトを開きます
  2. ディレクトリをE:\ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-toolsに変更します
  3. 以下のコマンドを入力してください
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. ディレクトリがcd /sdcardにあることを確認するために変更しdatabase.dbます。
  7. adb pull /sdcard/database.db または単にデバイスからdatabase.dbをコピーできます。

私にぴったりの作品。ありがとう!しかし、私の場合、データベースファイル名には.db拡張子がありません。
technik 2017

10

Eclipseでファイルエクスプローラーを使用します。Windows => Show View => Other ... => File Explorerを選択します。

別の方法は、adb経由でファイルをプルすることです。

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

5

一度も同じ問題がありました。Androidデバイス内のファイルに直接アクセスする方法はありません。ただし、adbシェルまたはルート化デバイスは除きます。

ここに02の選択肢があります:

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)これを試してください:https : //github.com/sanathp/DatabaseManager_For_Android


5

Androidからデスクトップにバックアップするには

コマンドラインcmdを開き、これを実行します:adb backup -f C:\ Intel \ xxx.ab -noapk your.app.package。パスワードを入力せず、[データのバックアップ]をクリックしないでください。ドライブCのルートには保存しないでください。あなたは拒否されるかもしれません。これが、C:\ Intelに保存した理由です。

* .abファイルを抽出するには

  1. ここに移動してダウンロードしてくださいhttps : //sourceforge.net/projects/adbextractor/
  2. ダウンロードしたファイルを解凍し、解凍したフォルダーに移動します。
  3. これを独自のファイル名で実行します。java-jar abe.jar unpack c:\ Intel \ xxx.ab c:\ Intel \ xxx.tar

1
これは素晴らしい答えです、ありがとう。Xiaomiデバイス(.bak拡張子付き)で作成された単一アプリバックアップを抽出するために私のために働いた。発根は必要ありません
ロシアの

4

上のルート権限を取得されたデバイスは、正しい解決策はこれです:

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

元のソリューションは機能しましたが、chmodは不明なディレクトリを返します。chmodコマンドを/ data / data / *に変更すると、IntellijのDDMSからデータディレクトリ内のすべてのサブフォルダーにアクセスできます。同じソリューションがEclipse DDMSにも当てはまると思います。

更新 だから、私が見つけたものは奇妙です。IntelliJ(Androidデバイスモニター)でDDMSを使用してNexus 6を実行しています。小さなスターターアプリを作成しました。上記のアプリはdata / data / com.example.myapp / filesの.csvファイルにデータを保存します

Nexus 6でこのファイルへのアクセスを初めて試みたとき、デバイスをルート化する必要があることがわかりました。データフォルダーは表示されましたが、開こうとしても機能しません。他の場所でオンラインで言及されているように、展開+は消えてすぐに再表示されます(注、ルート化せずにこれらのフォルダーへのアクセスを許可すると主張するWeb上のソリューションがあり、手遅れになるまでそれらを見つけることができませんでしたとにかくroot化しないほうがよいかどうかはわかりません((アプリやコマンドプロンプトを使用して解決策を提供するよりも、手動で実行できる方が望ましいです)))。私は私の6を応援し、DDMSをもう一度試しました。

この時点で、データフォルダーが表示され、フォルダーを展開してcomを表示できます。ディレクトリ、しかし私はそれらのどれも開くことができませんでした。それは私が上記の解決策を発見したときです。最初の指示はこの部分では機能しません:

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

それは私が投稿した解決策を試したときです:

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

このソリューションは機能しているように見えましたが、特定のフォルダーでのみ機能しました。myappフォルダーを展開できましたが、その中のファイルディレクトリを展開できませんでした。

この時点で、しばらく遊んでみて、これらのワイルドカードエントリを試すのではなく、必要なディレクトリで試してみない理由を理解しました。

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

に続く:

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

これらのコマンドにより、アプリのディレクトリ内のファイルを展開して表示し、.csvが正しく保存されていることを確認できました。

これが誰かを助けることを願っています。私は何時間もこれに苦労しました!

(さらに少し奇妙なことに、これをさらに複雑にするために、権限はファイルディレクトリに渡された.csvファイルに渡されませんでした。 -..ただfyi)


2

あなたはそのようなsigleファイルをダウンロードすることができます:

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

ダウンロードする前に、App-Directoryのファイル構造を確認したくない場合があります。このためには、THelper上記の次の手順を実行します。

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

上記のAndroid-Studioの方法Shahidulhttps://stackoverflow.com/a/44089388/1256697)も機能します。DeviceFile Explorerメニューにオプションが表示されない場合:Android Studioで/ android-Directoryを開いてください。たとえば、反応ネイティブユーザーは、プロジェクトフォルダの/ ios-Directoryと同じレベルにこれ持っています。


1

簡単な方法の1つは、SDカードにデータベースを作成することです。なぜなら、ルート権限を取得しない限り、内部メモリにある電話のデータフォルダにアクセスできないからです。それでは、SDカードにデータベースを作成しないでください。

さらに、必要に応じて、ルートを必要とせずに、既存のデータベースファイルを(内部メモリから)外部メモリにコピーするためのファイルコピーコードを記述できます。


どうやってするの?SDカードでデータベースを作成する方法
Naveen Prince P

この方法は、SDカードにデータベースを作成するのに役立ちます。FileSDカードを指すパスを指定するだけで、問題ありません
waqaslam

1

このフォルダにアクセスするには、管理者権限が必要です。

したがって、2つのオプションがあります。

  1. デバイスをルートし、このフォルダにアクセスしてみます
  2. エミュレータを使用する

ps:上記の2つのオプションのいずれかを使用している場合は、次の手順に従ってこのフォルダーにアクセスできます

DDMSパースペクティブを開きます->デバイス->(右側のウィンドウオプションからファイルエクスプローラーを選択)パッケージを選択->データ->データ->パッケージ名->ファイル

そこからファイルをプルアップできます


1

adb backupうまくいかなかったので、これを実行します(Xiaomi Redmi Note 4X、Android 6.0):
1. [設定]> [追加設定]> [バックアップとリセット]> [ローカルバックアップ]に移動します。
2.画面下部の[バックアップ]をタップします。
3.「システム」と「アプリ」のチェックマークを外します。
4.「アプリ」セルの右側にある詳細開示ボタンをタップして、アプリ選択画面に移動します。
5.目的のアプリを選択し、[OK]をタップします。
6.バックアップが完了したら、実際のファイルを何らかの方法で見つける必要があります。鉱山は/ MIUI / backup / AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_にあります。
7.次に、RonTLVによるこの回答の手順を実行しました実際にバックアップファイル(私の場合は.bak)をtar(元の回答から複製)に変換するには:
"
a)ここに移動してダウンロードします:https : //sourceforge.net/projects/adbextractor/
b)ダウンロードしたファイルを抽出し、抽出したフォルダーに移動します
。c)これを独自のファイル名で実行します:java -jar abe.jar unpack c:\ Intel \ xxx.ab c:\ Intel \ xxx.tar
"


0

このdbファイルをeclipseエクスプローラー(例:sdcardまたはPC)のどこかにコピーでき、sqliteを使用してこのdbファイルにアクセスして更新できます。


0

問題は、how-to-access-data-data-folder-in-android-device?


android-deviceがBluestacksの場合*ルートブラウザAPKはdata / data / ..を表示します。


https://apkpure.com/root-browser/com.jrummy.root.browserfreeからルートブラウザをダウンロードしてみて ください


ファイルがテキストファイルの場合は、[名前を付けて開く]、[テキストファイル]、[名前を付けて開く]、[RBテキストエディター]をクリックする必要があります。


0

パブリックフォルダーであるSDカードフォルダーにファイルをコピーしてから、SQLiteを使用してアクセスできるPCにファイルをコピーすることもできます。

以下は、data / dataからパブリックストレージフォルダにファイルをコピーするために使用できるコードです。

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

マニフェスト:

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

ファイルが他のユーザーに読み取り権限を共有していない場合、ファイルのコピーに対するすべてのアクションにアクセスできません
Steve Luck

0

SQLliteデータベースはユーザーの電話に保存され、パスの下に隠れています。

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

ここには2つのオプションがあります。

  1. 電話をルート化して、隠しdb3ファイルを表示するためのアクセス権を取得できます。
  2. これは解決策ではなく、回避策です。「select」ステートメントを使用して、データベーステーブルを表示するテストページを作成しないでください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.