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
注1:一部のHTC Desire電話には 既知の問題 があります。 /data/data
ディレクトリの非標準の所有者/アクセス許可のため、run-as
コマンドはそれらの電話で実行できません。
注2:@Avioのコメントで指摘されているように、run-as
には、Cyanogenmodを実行しているSamsung Galaxy S電話でも問題があります(7から10.1まで)このプラットフォームでは/data/data
が/datadata
へのシンボリックリンクであるためです。この問題を解決する1つの方法は、シンボリックリンクを実際のディレクトリに置き換えることです(残念ながら、これには通常ルートアクセスが必要です)。
始める前に、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をルート化)。
$ 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
「プロダクションビルドでルートとして実行できません」というメッセージで失敗ルートになることができる簡単な方法を次に示します。
前の代わりに、次の2つのコマンドを順番に発行します
> adb Shell
$ su
最初のコマンドの後、上記のようにプロンプトが「>」から「$」に変更された場合、adbシェル環境に入ったことを意味します。その後、2番目のコマンドを発行した後、プロンプトが「#」に変わった場合は、rootになっていることを意味します。これで、rootとして、デバイスで何でもできます。
「安全な」シェルに戻すには、次を発行します
# exit
プロンプト「$」が再表示されます。これは、ルートとしてではなくユーザーとしてadbシェルにいることを意味します。
これにも多くのトラブルがありました。私はまだパーミッションとルートの実行を完全に理解していませんが、これは(以前の回答の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ファイルを開くことができました。 :)
ルートアクセスを取得する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
それを操作するには、正しい所有者に変更する必要があるかもしれません。
問題は、最新の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..
アプリケーションパッケージがわかっている場合は、cd
をそのフォルダーに直接移動できます。
例:cd data/data/com.yourapp
これにより、read/writable
というディレクトリにドロップされるため、必要に応じてファイルを変更できます。 emulator
上のフォルダーは同じであるため、それを使用してフォルダーパスを取得できます。
DBとテーブルのみを表示する場合、最も簡単な方法はStetho
を使用することです。 Facobook developed
のSQLite
buitを使用するすべてのAndroid開発者にとって、非常に便利なツールです。
Steps to use the tool
'compile' com.facebook.stetho:stetho:1.4.2 '
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Stetho.initializeWithDefaults(this); setContentView(R.layout.activity_main); }
次に、アプリケーションをビルドします。アプリの実行中に、URLでchromeを開くことで、アプリデータベースを参照できます。
chrome://inspect/#devices
同じスクリーンショットは以下のとおりです_
ChromeInspact
あなたのDB
これがすべてに役立つことを願っています! :)