web-dev-qa-db-ja.com

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

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

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

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

162
gregm

デバイス上のすべてを閲覧する場合、覚えておくべきことが2つあります。

  1. Androidフォンでデータフォルダーを参照するには、ルートアクセスが可能な電話が必要です。つまり、デベロッパーデバイス( ADP1 または ION from Google I/O)を持っているか、他の電話を「ルート化」する方法を見つけたということです。方法。
  2. ルートモードでADBを実行する必要があります。実行するには、adb rootを実行します。
130
Reto Meier

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

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には、Cyanogenmodを実行しているSamsung Galaxy S電話でも問題があります(7から10.1まで)このプラットフォームでは/data/data/datadataへのシンボリックリンクであるためです。この問題を解決する1つの方法は、シンボリックリンクを実際のディレクトリに置き換えることです(残念ながら、これには通常ルートアクセスが必要です)。

195
Idolon

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

コマンドラインから次を入力します:

adb Shell

これにより、Android Shellコマンド行に移動します(次のように表示されます:Shell@Android:/ $今すぐ入力:

Shell@Android:/ $run-as com.domain.yourapp

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

Shell@Android:/data/data/com.domain.yourapp $ 

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

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

Shell@Android:/data/data/com.domain.yourapp $ ls

cache
databases
lib
shared_prefs   

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

応援について: もしあなたがこれまでにあなたの電話を根付かせたことがないなら、そしてあなたがあなたの電話をねじ込むことを心配しているなら、私は心配することは何もないという完全な自信をもってあなたに話すことができます。ほぼすべての新旧モデルに対応する、迅速かつ簡単な電話ルートチュートリアルが多数あります。また、mac(Macでs3をルート化)。

42
abbood

$ adbシェル

$ 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!

37
HelloWorld

ルート化されたSamsung Galaxy Sで操作しようとしたときに、同様の問題が発生しました。コンピューターシェルからコマンドを発行しています

> adb root

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

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

> adb Shell
$ su

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

「安全な」シェルに戻すには、次を発行します

# exit

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

29
rytis

これにも多くのトラブルがありました。私はまだパーミッションとルートの実行を完全に理解していませんが、これは(以前の回答の1つである)私のために/ data/data/[パッケージ名] /databases/my_db.dbからデータベースファイルをコピーするのに役立ちました。ランニング シェルルート、または 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 Database Browserでdbファイルを開くことができました。 :)

19
MSquare

ルートアクセスを取得する2つの手順は次のとおりです。

  1. Androidデバイスをルート化する必要があります。
  2. ADBシェルでsuと入力すると、Androidデバイスはy/nを要求しますか?許可を選択します。
3
VietHuong

本番ビルドは/ 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
keith

問題は、最新の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.. 
2
ashishsony

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

例:cd data/data/com.yourapp

これにより、read/writableというディレクトリにドロップされるため、必要に応じてファイルを変更できます。 emulator上のフォルダーは同じであるため、それを使用してフォルダーパスを取得できます。

1
Mark

DBとテーブルのみを表示する場合、最も簡単な方法はStethoを使用することです。 Facobook developedSQLite buitを使用するすべてのAndroid開発者にとって、非常に便利なツールです。

Steps to use the tool

  1. アプリケーションのgradleファイルにdependeccyを追加します(モジュール:アプリ)

'compile' com.facebook.stetho:stetho:1.4.2 '

  1. Activity 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

Your DB

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

0
Rupesh Yadav