2016-05-21 7 views
0

私は私のアプリのsqliteのデータベースに直接データを挿入したいのですが、私はどこでもAndroidのスタジオ・パス上のそれを見つけることができない、でも私のルートパス上:アンドロイドスタジオはLinux devマシンにsqlite dbをどこに保存しますか?

$sudo find/-type f -name 'myapp.db' 

私はいくつかの同様の質問が求められている知っているbeforeしかし、Windowsの答えはUbuntu Linuxで役に立たなかった。あなたの助けに感謝します。

+1

ローカルマシン上にデータベースを作成し、それをAndroidスタジオプロジェクトプロジェクトにコピーするだけです。 https://github.com/jgilfelt/android-sqlite-asset-helper –

答えて

1

Android Studioは、データベースをローカルコンピュータに保存しません。新しいデバイスに展開するたびに、データベースは&のデバイスにのみ存在し、その新しいデバイスでデータベースが新規作成されます。だからあなたのコンピュータでそれを見つけることができないのです。ここでは、データベースがデバイスに配置されている場合:

/data/data/full_qualified_java_package_name/databases/database_name.db 

を今、あなたは直接データを挿入したい場合、あなたはそれを修正し、エミュレータオフデータベースを引っ張ってAndroidのメーカー&利用ADBにターミナルを使用することができ、あなたはおそらくあなたがそれをデバイスからそれを引っ張ることなくそれに必要なものを挿入することができる十分なLinuxを知っているなら確信しています。ここではそのためのAndroid Studioの端子のためのいくつかのサンプルコマンドは次のとおりです。

~/Android/Sdk/platform-tools/adb devices 

は、デバイス番号、取得:

~/Android/Sdk/platform-tools/adb -s emulator-#### pull /data/data/full_qualified_java_package_name/databases/database_name.db <local-filepath> 

をバックでそれを送信するために、それだけである:

~/Android/Sdk/platform-tools/adb -s emulator-#### push <local-filepath> /data/data/full_qualified_java_package_name/databases/database_name.db 

例:

~/Android/Sdk/platform-tools/adb -s emulator-5554 pull /data/data/com.danielkaparunakis.stackoverflowquestions/databases/Questiondatabase.db /Users/DanielKaparunakis/Desktop 

追加ヒント:あなたはこのように引っ張ったときに空白のままにした場合:それは自動的にプロジェクトのルートフォルダにそれを引っ張ってくる

~/Android/Sdk/platform-tools/adb -s emulator-5554 pull /data/data/com.danielkaparunakis.stackoverflowquestions/databases/Questiondatabase.db 

+0

うん、私は私のローカルのdevマシン上のデータベースを検索していた!しかし、私はどのようにadbターミナルに行くことができますか? – Karlom

+1

ADBは '〜/ SDK/platform-tools/adb'フォルダにあります。 SDKマネージャに移動してSDKがインストールされている場所を確認すると、その場所が正確にわかります。一度そこにいれば、コマンドを実行できます。 –

+0

ターミナルで '$〜/ Android/Sdk/platform-tools/adb -s emulator-5554 shell pull/data/data/myapp/databases/myapp.db'を実行すると'/system/bin/sh:プル:見つからない 'どんなアイデアなの? – Karlom

1

あなたのアプリのDBは、唯一のデバイス上にあります。接続されたすべてのデバイスから接続することができます– 非ルートの物理デバイス。このスクリプトは最初のデバイスからそれを取り出します。

このトリックはrun-as <package name>です。このトリックは、アプリのデータに完全にアクセスできるアプリのディレクトリシェルを実行します。

$packageをアプリのパッケージ名に置き換え、$dbをあなたのアプリのdbの名前に置き換えてください。

$ LC_ALL=C adb exec-out run-as $package cat databases/$db >db.sqlite 

LC_ALL=Cいくつかのシステムでは、いくつかの奇妙なロケール動作を回避することです。

adbは、デフォルトでAndroidスタジオによって~/Android/Sdk/platform-tools/adbにインストールされます。

更新

プログラム 'ADBは、' 現在インストールされていません。 'adb'を実行するには、管理者に 'android-tools-adb'パッケージをインストールするように依頼してください。

これは、Ubuntuパッケージマネージャからインストールできることを伝えるUbuntuです。

通常、Android Studioの一部として既にインストールされています。

アップデート2

私が一緒に仕事しませんpushrun-asので、戻ってそれをプッシュするため、まだスクリプトを持っていません。このような(テストされていない)何かをしなければならないでしょう。

$ adb push db.sqlite /sdcard/temp.sqlite 
$ cat <<EOF | adb shell 
run-as $package 
cat /sdcard/temp.sqlite >databases/$db 
exit 
exit 
EOF 
+0

このコマンドはどこで実行しますか?私はアンドロイドにはとても新しいので、スタジオの端末にアクセスする方法はわかりません。 – Karlom

+0

私はそれを私のシェル(bash)から実行します。 'adb'はあなたの道になければなりません。 – totoro

+0

Linuxマシンの端末であれば、次のようになります: 'me @ pc:〜$ LC_ALL = C adb exec-out run-as $ package cat databases/$ db> db.sqlite 'adb'プログラムは現在インストールされます。 'adb'を実行するには、管理者に 'android-tools-adb'パッケージをインストールしてください。ubuntuリポジトリにそのようなパッケージはありません。 – Karlom

関連する問題