adbを使用するときにデータフォルダーへのアクセスが拒否されるのはなぜですか?


181

adbと次のコマンドを使用してライブデバイスに接続しました。

C:\>adb -s HT829GZ52000 shell
$ ls
ls
sqlite_stmt_journals
cache
sdcard
etc
system
sys
sbin
proc
logo.rle
init.trout.rc
init.rc
init.goldfish.rc
init
default.prop
data
root
dev
$ cd data
cd data
$ ls
ls
opendir failed, Permission denied

アクセスが拒否されたことに驚きました。このようなコマンドラインを使用してディレクトリを参照できないのはなぜですか?

電話でrootアクセスを取得するにはどうすればよいですか?


簡単...電話の画面がオンになっていることを確認してください。Unknownにrootへのアクセスを許可するかどうかを尋ねられたら、「許可」をクリックします。できました。

データベースにアクセスできる簡単なavdを作成することにしました。開発者向けの「カスタム」フレアとグラフィックスなしで、ガイドへのリンクを持っている人はいますか?購入したデバイスでプレーンバニラandroidを取得する方法。
2011年

Android 7.1.1デバイスでは、このようなプロンプトは表示されません。しかし、adbは先に進み、ディレクトリーの内容をリストします。問題は、コンテンツが実際には存在しないことです。コンテンツを追加するためにadb-syncを使用しています。それはかなり奇妙です。
トムラッセル

回答:


139

デバイス上のすべてを閲覧する場合、2つの点に注意してください。

  1. Androidフォンのデータフォルダーを閲覧するには、ルートアクセスが可能なフォンが必要です。つまり、開発者デバイス(ADP1またはGoogle I / OのION)を持っているか、他の方法で電話を「ルート化」する方法を見つけたということです。
  2. ルートモードでADBを実行している必要があります。これを実行するには、次のコマンドを実行します。 adb root

77
また、「adb root」にはadbのカスタムビルドが必要です。それ以外の場合、「adbdはプロダクションビルドではrootとして実行できません」
bortzmeyer

16
adbのカスタムビルド?どこから入手できますか?
Gopinath、

9
@Gopinathの質問に対する答えは?
Ewoks 2012年

2
@Gopinath:ndkを使用してrootが許可するように構成されたターゲットデバイスのソースからビルドし、バイナリファイルのイメージと共にデバイスにフラッシュする必要があると思います。
Ben Jaguar Marshall

4
私の知る限り、adbのカスタムビルドは必要ありません。ルートとしてadbdサポートを実行する必要がありますが、このadbdはデバイス上にあるため、デバイスにルートアクセスを許可するように変更を加えれば十分です。
nitzanms 2014年

222

APIレベル8(Android 2.2)以降、デバッグ可能なアプリケーション(リリースビルドが要求されない限り、Android Studioによって常にビルドされるアプリケーション)では、シェルrun-asコマンドを使用して、特定のユーザー/アプリケーションとしてコマンドまたは実行可能ファイルを実行できます。または、アプリケーションのUIDに切り替えるだけで、データディレクトリにアクセスできます。

yourappのディレクトリコンテンツを一覧表示します。

run-as com.yourapp ls -l /data/data/com.yourapp

com.yourappの UIDに切り替え、そのuidを使用して以降のすべてのコマンドを実行します(を呼び出すまでexit)。

run-as com.yourapp
cd /data/data/com.yourapp
ls -l
exit

 
注1:一部のHTC Desire電話には既知の問題があります。/data/dataディレクトリの所有者/権限が標準ではないため、run-asこれらの電話でコマンドを実行できません。

注2:@Avioのコメントで指摘されているように、 run-asこのプラットフォームで/data/dataはへのシンボリックリンクであるため、Cyanogenmodを任意のバージョン(7から10.1まで)で実行しているSamsung Galaxy S電話機にも問題があり/datadataます。この問題を解決する1つの方法は、symlinkを実際のディレクトリに置き換えることです(残念ながら、これには通常、ルートアクセスが必要です)。


2
これは、説明したとおりに機能しますrun-as com.mypackage。私が遭遇した問題sqlite3 /data/data/com.mypackage/databases/mydbは、「sqlite3:許可が拒否されました」です。sqlite3はrootでのみ実行できますか?
スタイル

5
内部ストレージに保存されているファイルの一覧表示に関しては、魅力のように機能します。
zaplec

5
アプリケーションとして実行しているcpを実行できなかったため、ファイルをsdcardに移動できるようにするには、ファイルのアクセス許可を変更する必要がありました。したがって、1)run-as com.package.example、chmod 777 databasefile.db。2)終了し、sdcard、cp /data/data/com.package.example/databases/databasefile.dbに移動します。そして、ステップ3は777権限を元に戻す必要があります
Maragues

3
端末にどのように正しく綴っても、パッケージは不明です:(
Costa

3
これは、根ざしていない電話に使用する正しい方法であるため、正しいとマークされた答えである必要があります。
LNI 2016

49

始める前に、あなたは根ざした電話を持っていますか?そうでなければ、私はあなたがジャンプをする時が来たことを強くお勧めします。これを行うのに役立つチュートリアルの99%は、ルート化された電話を持っていることを必要とします(私は、ルート化された電話なしでそれを行う方法を探すために約1時間費やしましたが、何も見つかりませんでした。 )また、あなたがそれについて考えるなら、あなたのiPhoneもこれと同じタスクを実行するために応援する必要があります。だからそれは全く合理的です。回答の最後に応援する方法の詳細。

コマンドラインから:

adb shell

これにより、Androidシェルのコマンドラインが表示されます(次のように表示されます:shell@android:/ $ここで入力:

shell@android:/ $run-as com.domain.yourapp

これにより、次のデータディレクトリに直接移動しますcom.domain.yourapp

shell@android:/data/data/com.domain.yourapp $ 

表示されない場合(つまり、エラーが発生した場合)は、root化された電話を持っていないか、rootユーザー権限を使用していません。rootユーザー権限を使用するsuには、adbコマンドラインに入力して、何が起こるかを確認します。エラーが発生した場合、電話はroot化されていません。そうでない場合は、最初にroot化してから、これらの手順を続行してください。

そこから入力するlsと、dbsを含むすべてのディレクトリが表示されます。

shell@android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

その後、sqlite3を使用してdbaseを参照できます。インストールされていない場合は(と入力sqlite3して確認できます。取得された場合command not foundは、インストールする必要があります。sqlite をインストールするには、こちらの手順に従ってください。)

応援について:これまでに携帯電話を応援したことがなく、携帯電話のねじ込みについて心配している場合は、心配することは何もないと確信を持って伝えることができます。ほとんどすべての新旧モデルの迅速で簡単な電話応援チュートリアルがたくさんあり、Macを持っている場合でも電話を応援できます(私は私のs3を私のMacで応援しました)。


8
機能するためrun-asに根ざした電話は必要ありません。私は生産ビルドギャラクシーネクサスSにそれを試してみました
テッドのHopp

@TedHoppなどのb / cは、プロダクションビルドのGalaxy Nexus Sで問題なく動作します。すべてのAndroidスマートフォンで問題なく動作しますか?
14

まず、私の電話は、ルート化された電話が不要であることを示す反例です。第二に、はい、それは少なくともAndroid 2.2であるルート化されていないすべてのデバイスで動作するはずです(それが私の電話で動作するためではなくそれが動作するはずの方法であるためです; Idolonによる回答を参照してください)。
Ted Hoppが2014

@TedHopp個人的には、私はAndroid開発者ではありません。そのため、このような手順build the application as debuggable (either by building it with the Eclipse, or ant debug command)は簡単に聞こえるかもしれませんが、ちょっと私を脅迫しています。私の答えは、Androidフォンを応援することに慣れているが、Android開発者の世界に精通していない人のためのものです。しかし、私はこの議論ができてうれしいです。私は私の答えの読者に他の根を
張ら

1
素晴らしい答えの男。私はここでいくつかの異なる電話(MotoX、nexus4、LG G3、SGIII)を使用していますが、これはすべての人にかなり適しています。
チャドビンガム2014年

44

$ adb shell

$ cd / data

$ ls

opendirが失敗しました、許可が拒否されました


これを行う必要があります:

$ adb shell

$ cd /data

shell@android:/data $ run-as com.your.package 

shell@android:/data/data/com.your.package $ ls

OK!


これでうまくいきます!コマンドを実行する前に行うべきいくつかのこと。電話で開発者向けオプションを有効にしたら、USBデバッグも有効にする必要があります。さらに、Select debug appという名前の電話(HTC M8)で何かを有効にして、自分のアプリを選択しました。すべての電話で標準である可能性があります...
srinij '19年

30

ルート権限を取得したSamsung Galaxy Sで操作しようとすると、同様の問題が発生しました。コンピューターのシェルからコマンドを発行します

> adb root

「プロダクションビルドではrootとして実行できません」というメッセージで失敗します。これがrootになるための簡単な方法です。

前の代わりに、次の2つのコマンドを順番に発行します

> adb shell
$ su

最初のコマンドの後、上記のようにプロンプ​​トが「>」から「$」に変わった場合は、adbシェル環境に入ったことを意味します。その後、2番目のコマンドを発行した後にプロンプ​​トが「#」に変わった場合、それは現在rootであることを意味します。これで、rootとして、デバイスで何でも好きなことができます。

「セーフ」シェルに戻すには、

# exit

プロンプト「$」が再び表示されることがわかります。これは、rootとしてではなく、ユーザーとしてadbシェルにいることを意味します。


13
su:許可が拒否されました
petrnohejl

3
素晴らしいです、ありがとう!ところで、これを行うには根ざした電話が必要です。また、SuperSUまたは同様のものが必要ですか?少なくとも私が "su"を使用しようとしたとき、SuperSUは私の電話にダイアログを表示しました。
Richard Fung 2013年

16
/ system / bin / sh:su:not found
matt lohkamp '25

1
:)ありがとうございますadb shell + su。迷惑な許可は永久に解決されました。su: not foundAndroid 4.3で問題が発生しましたが、4.4.2にアップグレードしてから問題が解決しました。4.3に問題があるようです。

3
su、Nexus 5 / Android 5.1は利用できません-回避策はありますか?
CodeManX 2015

19

私もこれで多くの問題を抱えていました。私はまだパーミッションとルート実行を完全に理解していませんが、これは私(以前の回答の1つ)の/ data / data / [package name] /databases/my_db.dbからデータベースファイルをコピーするのに役立ちました。何らかの理由でシェルrootまたはシェルでsuを実行しても機能せず、dbファイルをコピーすることもできませんでした(ただし、ディレクトリに移動することはできました)、sqlite3も実行できませんでした。

これでうまくいきました!DOSコマンドプロンプト:

C:\Program Files\Android\android-sdk\platform-tools>adb shell
1|shell@android:/ $ run-as de.vogella.android.locationapi.maps
run-as de.vogella.android.locationapi.maps
1|shell@android:/data/data/de.vogella.android.locationapi.maps $ cd /data
cd /data
shell@android:/data $ cd data
cd data
shell@android:/data/data $ cd de.vogella.android.locationapi.maps
cd de.vogella.android.locationapi.maps
shell@android:/data/data/de.vogella.android.locationapi.maps $ cd databases
cd databases
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ ls
ls
bus_timetable_lines.db
bus_timetable_lines.db-journal
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $ cat bus
_timetable_lines.db > /sdcard/db_copy.db
 bus_timetable_lines.db > /sdcard/db_copy.db                                   <
shell@android:/data/data/de.vogella.android.locationapi.maps/databases $exit   ^
exit
shell@android:/ $ exit
exit

C:\Program Files\Android\android-sdk\platform-tools>

次にSDCARDディレクトリに移動し、ファイルdb_copy.dbを取得します。それさえ隠されていたが、なんとかメールで送った。Windowsに戻ると、SQLiteデータベースブラウザーでdbファイルを開くことができました。:)


-> run-as <app_package_name>を試しましたが、adbが私のapp_package_nameを認識しませんでした。AndroidManifest.xmlで指定したpackage_nameを使用しました。何か足りないものはありますか?
ARK

3

ルートアクセスを取得するための2つの手順を次に示します。

  1. あなたのAndroidデバイスは根ざしている必要があります。
  2. ADBシェルでsuと入力すると、Androidデバイスはy / n?あなたは許可を選択します。

「su ..」と入力すると、モバイルデバイスでプロンプトが表示されます。スーパーユーザーからスーパー権限を要求すると、.. itが機能しました
Mahajan344

2

本番ビルドは/ data / appに入ることができません

drwxrwx--- system   cache             1970-01-01 08:00 cache
drwxrwxr-x root     system            1970-01-01 08:00 mnt 
drwxrwx--x system   system            1970-01-01 08:15 data

それを操作するには、正しい所有者に変更する必要があるかもしれません。


2

問題は、最新のCMの開発オプションでadb rootアクセスを具体的に与える必要があることである可能性があります。これが私がやったことです。

abc @ abc-L655:〜$ sudo adb kill-server
abc @ abc-L655:〜$ sudo adb root start-server *デーモンが実行されていません。今すぐポート5037で起動* *デーモンは正​​常に起動*システムの設定によりルートアクセスが無効-設定で有効->開発オプション

開発オプションを変更した後...

abc@abc-L655:~$ sudo adb kill-server
abc@abc-L655:~$ sudo adb root start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting adbd as root
abc@abc-L655:~$ adb shell
root@android:/ # ls /data/ .... good to go.. 

1

アプリケーションパッケージがわかっている場合はcd、そのフォルダーに直接アクセスできます。

例えば cd data/data/com.yourapp

これread/writableにより、必要に応じてファイルを変更できるディレクトリに移動します。上のフォルダーは同じなのでemulator、それを使用してフォルダーパスを取得できます。


2
フォルダーに直接cdできますが、「opendir failed、permission denied」エラーが引き続き表示されます。
タイラーコリアー

これは、adbの「シェル」ユーザーがディレクトリに対する実行権限を持っているが、読み取り権限がないためです。
Chris Stratton

0

DBとテーブルだけを見たい場合は、を使用するのが最も簡単な方法ですStethoSQLiteによってbuit を使用するすべてのAndroid開発者にとって、かなりクールなツールですFacobook developed

Steps to use the tool

  1. アプリケーションのgradleファイルに以下の依存関係を追加します(モジュール:app)

「コンパイル 'com.facebook.stetho:stetho:1.4.2'

  1. 以下のコード行をアクティビティのonCreate()メソッドに追加します
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }

次に、アプリケーションをビルドします。アプリケーションが実行されているときに、URLでchromeを開くことにより、アプリケーションデータベースを参照できます。

chrome://inspect/#devices

同じのスクリーンショットは以下の通りです_

ChromeInspact

ChromeInspact

あなたのDB

あなたのDB

これがすべての人に役立つことを願っています!:)


0

これは、Androidデバイスが何らかの手段でルート化されている場合に機能します(ルート化されていない場合に機能するかどうかは不明です)。

  1. adb shell -シェルにアクセスする
  2. su -スーパーユーザーになります。

これで、すべてのディレクトリのすべてのファイルを読み取ることができます。


-3

デバイスをルート化なくても、次のコマンドスクリーンショットでファイルにアクセスできます。

  1. ユーザーに応じて、platform-toolsフォルダーからcmdを使用してadbを起動します

    cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools

    別のフォルダにある場合もありますが、インストールした場所によって異なります。

  2. 動作しているデバイスを表示します。

    adb devices

    たとえば、コマンドの応答は

    List of devices attached
    0123456789ABCDEF     device
  3. コマンドを書く

        adb -s 0123456789ABCDEF shell "su"

    それは開きます

        root@theDeviceName:/ #

4.ファイルへのアクセス、すべてのファイルのリスト

ls

そして、データフォルダのような他の場所にディレクトリを変更する

cd data/data

1
C:\ Users \ bruker \ AppData \ Local \ Android \ sdk \ platform-tools> adb -s emulator-5554 shell "su" / system / bin / sh:su:not found
Solo

私の場合、それはandroid 5.0.2でした。バージョンと別の@Koenで異なるかどうかはわかりません
Mahmoud Ashraf

パスは、Androidスタジオをインストールした場所とSDKの@Soloによって異なります
Mahmoud Ashraf

1
問題は、adbがどこにあるかを見つけることではありません。それは私のPATHにあります。ファイルリストの取得(またはの実行su)は機能しないか、許可されていません。Android 4.3でのテスト。
公園

suが見つかりません
Brill Pappin

-5

デバイスのシェルディレクトリにいるとき。とにかく走れ

su - root

その後、data /フォルダーにアクセスできるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.