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

StackOverflow https://stackoverflow.com/questions/1043322

  •  20-08-2019
  •  | 
  •  

質問

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

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

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

役に立ちましたか?

解決

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

  1. Androidフォンでデータフォルダーを参照するには、ルートアクセスが可能な電話が必要です。つまり、デベロッパーデバイス( ADP1 または ION )または他の方法で電話を「ルート化」する方法。
  2. ADBをルートモードで実行する必要があります。実行するには次のようにします。adb root

他のヒント

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

<!> nbsp;
注1 既知の問題があります一部のHTC Desire電話。 /data/dataディレクトリの非標準の所有者/アクセス許可のため、/datadataコマンドはこれらの電話での実行に失敗します。

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

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

コマンドラインタイプから:

adb shell

これにより、Androidシェルコマンドラインに移動します(次のように表示されます:shell@android:/ $ now type:

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が表示された場合は、インストールする必要があります)。 sqliteをインストールするには、こちらの指示に従ってください。

ルート化について:以前に電話をルート化したことがなく、電話をねじ込むことを心配している場合、心配することは何もないことを完全に自信を持って伝えることができます。ほとんどすべての新しいモデルと古いモデルのための迅速かつ簡単な電話応援チュートリアルがたくさんあります、そしてあなたがMacを持っている場合でもあなたの電話を応援できます(私は私のMacでs3を応援しました) 。

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

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

> adb root

は、メッセージ<!> quot;で失敗します。実動ビルドではrootとして実行できません<!> quot;。ルートになることができる簡単な方法を次に示します。

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

> adb shell
$ su

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

「安全な」シェルに切り替えるには、次を発行します

# exit

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

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

ルートアクセスを取得するには、次の2つの手順があります:

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

プロダクションビルドは/ 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

操作するには、正しい所有者に変更する必要がある場合があります。

問題は、最新のCMの開発オプションでadb rootアクセスを明確に付与する必要があることです。 これが私がやったことです。

  

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

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

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

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

eg cd data/data/com.yourapp

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

DB <!> ampを表示するだけの場合。テーブルの場合、最も簡単な方法はStethoを使用することです。 SQLiteによるFacobook developed buitを使用するすべてのAndroid開発者向けの非常にクールなツール。

Steps to use the tool

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

'compil'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);
 }

今、アプリケーションをビルドします<!> amp;アプリの実行中に、URLでchromeを開くと、アプリデータベースを参照できます。

chrome://inspect/#devices

同じスクリーンショットは以下にあります_

  

ChromeInspact

 ChromeInspact

  

あなたのデータベース

 Your DB

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

ルート化せずにデバイスを使用すると、次の方法でファイルにアクセスできます cmdスクリーンショット:

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

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

    別のフォルダに置くことは、インストールした場所によって異なります。

  2. 動作中のデバイスを表示します。

    adb devices
    

    コマンドに対する応答osの場合

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

        adb -s 0123456789ABCDEF shell "su"
    

    で開きます

        root@theDeviceName:/ #
    

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

ls

などのデータフォルダーのような他の場所へのディレクトリの変更

cd data/data

デバイスのシェルディレクトリにいるとき。実行するだけ

su - root

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top