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
アクセスが拒否されたことに驚いた。このようなコマンドラインを使用してディレクトリをブラウズできないのはなぜですか?
電話でルートアクセスを取得するにはどうすればよいですか
他のヒント
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つの手順があります:
- Androidデバイスをルート化する必要があります。
- 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
- アプリケーションのgradleファイルにdependeccyを追加します(モジュール:アプリ)
'compil'com.facebook.stetho:stetho:1.4.2'
- 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
あなたのデータベース
これがすべての人に役立つことを願っています! :)
ルート化せずにデバイスを使用すると、次の方法でファイルにアクセスできます cmdスクリーンショット:
-
ユーザーに応じて、platform-toolsフォルダーからcmdを使用してadbを起動します
cd C:\Users\YourUserName\AppData\Local\Android\sdk\platform-tools
別のフォルダに置くことは、インストールした場所によって異なります。
-
動作中のデバイスを表示します。
adb devices
コマンドに対する応答osの場合
List of devices attached 0123456789ABCDEF device
-
コマンドを書く
adb -s 0123456789ABCDEF shell "su"
で開きます
root@theDeviceName:/ #
4。ファイルへのアクセス、すべてのファイルのリスト
ls
などのデータフォルダーのような他の場所へのディレクトリの変更
cd data/data
デバイスのシェルディレクトリにいるとき。実行するだけ
su - root
その後、data /フォルダーにアクセスできるはずです。