こんな便利でかわいいアプリが無料です。

さらに、アプリ内課金で購入すれば、いろいろなキャラが走ってくれます。
画像を用意すれば自分でキャラも作成できるようです。
ぜひ、お試しあれ!!
こんな便利でかわいいアプリが無料です。

さらに、アプリ内課金で購入すれば、いろいろなキャラが走ってくれます。
画像を用意すれば自分でキャラも作成できるようです。
ぜひ、お試しあれ!!
Gboardで単語を登録しても変換候補に反映されないときは、
キーボードの設定
↓
単語リスト(ユーザー辞書)
↓
学習した単語を削除
です。



どうやらキーボードアプリによっては(Gboardなど) これまでの入力内容によって自動作成された候補文字列が優先的に変換候補に表示されるようです。
自動作成される変換候補は今現在では意外と使えないので削除してもいいと思いますけども。
それでもダメな場合は、Gboardのキャッシュを削除すると良いです。
「設定」
↓
「アプリ」
↓
「Gboard」
↓
「ストレージ」
↓
「キャッシュを削除」


Android OS デフォルトの単語リスト登録画面よりは、「顔文字/絵文字辞書 単語リスト」が便利です。

顔文字や絵文字もガツガツ登録できます。
なんとなく面倒なのでスクリプトで。
USBで接続のあと #5555 で待たせて再起動する。
「restart」なので、kill-server → start-server は不要。

adb tcpip 5555
IPアドレスをコマンドラインから取得。
ip="$(adb shell ip route | awk '{print $9}')"
そのIPにWiFi接続。
adb connect $ip
ついでに、開発時には邪魔なスリープもOFFに。
adb shell svc power stayon true
How to prevent an android device from entering sleep (via adb command shell) - Stack Overflow
connect_via_wifi.sh
#!/bin/sh
adb tcpip 5555
sleep 1
ip="$(adb shell ip route | awk '{print $9}')"
adb connect $ip
adb shell svc power stayon true
adb devices -l
端末内 adbd の TCPモード(#5555)が起動している限り再接続が可能。

なので、USB接続なしの状態でも
IPの目処つけて 「adb connect」 でどうぞ。
~ $ adb devices
List of devices attached
~ $ get-oui -v
Renaming ieee-oui.txt to ieee-oui.txt.bak
Fetching OUI data from http://standards-oui.ieee.org/oui/oui.txt
Fetched 4084734 bytes
Opening output file ieee-oui.txt
25968 OUI entries written to file ieee-oui.txt
~ $ sudo arp-scan -l
Interface: en0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.0.1 8a:af:ec:9c:91:08 BUFFALO.INC
192.168.0.2 dc:23:76:3d:9b:75 HTC Corporation
192.168.0.3 d0:27:82:f5:e8:2a AzureWave Technology Inc.
192.168.0.8 8c:85:00:14:89:d1 Murata Manufacturing Co., Ltd.
192.168.0.4 a2:37:e3:12:9a:88 HTC Corporation
192.168.0.6 33:28:6d:29:7b:72 Google, Inc.
~ $ adb connect 192.168.0.4
connected to 192.168.0.4:5555
~ $ adb devices
List of devices attached
192.168.0.4:5555 device
初回の、USBケーブルなしでTCPモードを起動できないのはセキュリティ絡みでか。
ADBオーバーネットワークでWiFiで複数端末を一括接続する
Android Devices Being Shipped with TCP Port 5555 Enabled - DEV Community 👩💻👨💻
「分かれば簡単だけど、分かるまで難しい」
そんなこと多いですよね。
なにを悩んでいたのか。というやつ。
SQLDelight は、1.0 となり、今現在、ドキュメントやリファレンスが少なくてはまります。
おおまかに「しくみ」を捉えてからやってみること大事です。
テーブルを作成したい場合。SQLで、
CREATE TABLE player (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
number INTEGER NOT NULL,
name TEXT NOT NULL,
time TEXT DEFAULT (strftime('%s', 'now')),
UNIQUE (number, name)
);
のようなものを書きますよね。
これは、Player.sq というファイルに書いて、所定の位置に置きます。

この位置はデフォルトでは、パッケージ名 com.example.testdelight の場合、
/app/src/main/sqldelight/com/example/testdelight/Player.sq
となります。
プログラムコード上で利用したい「メソッド名」と、それに対するSQLを箇条書きにします。
selectAll:
SELECT *
FROM player;
insert:
INSERT INTO player(number, name)
VALUES (?, ?);
changes:
SELECT changes();
count:
SELECT COUNT(id)
FROM player;
これも、前述の Player.sq ファイルに追記します。

これで、テーブル周りの設定は終わりです。
ここが少し分かりづらかったのですが、
「201901281」を新バージョンにしたい場合、
「1を引いたもの」をファイル名として、
「201901280.sqm」
として置きます。

今回は、テーブル定義の変更はないので、中身なしの空ファイルです。
少し不思議な感じがしますが、書き出してみると分かってきます。
なお、このファイルを設定しなければ、適用されるバージョンは「1」となります。
ここでビルドすると、以下のようなファイルが書き出されます。

それぞれ以下のコードとなっています。



これらを使って、コードを書いていきます。
既存の .db ファイルに対して、バージョン更新を行いたい場合のキモとなるのは、書き出される Database ファイル。
object Schema : SqlDriver.Schema {
override val version: Int
get() = 201901281 // 201801280 + 1
// ...
override fun migrate(
driver: SqlDriver,
oldVersion: Int,
newVersion: Int
) {
if (oldVersion <= 201901280 && newVersion > 201901280) { // same .sqm file name
// from 201801280.sqm contents
// ...
}
}
}
.sqm のファイル名の数字が、
「新バージョンの数字」
「適用される既存.db のバージョンの数字」
を決める。
SQLDelight 1.0 使い方 #1
SQLDelight 1.0 使い方 #2
SQLiteのユーザバージョンを利用する - Basic
Pragma statements supported by SQLite
Android内に、
ただ、これだけのテーブルを作って、
CREATE TABLE player (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
number INTEGER NOT NULL,
name TEXT NOT NULL,
UNIQUE (number, name)
);
これだけのデータを入れて、
[
{ "number": 1, "name": "柴田勲" },
{ "number": 2, "name": "土井正三" },
{ "number": 3, "name": "張本勲" },
{ "number": 4, "name": "王貞治" },
{ "number": 5, "name": "シピン" },
{ "number": 6, "name": "高田繁" },
{ "number": 7, "name": "河埜和正" },
{ "number": 8, "name": "福嶋智春" },
{ "number": 9, "name": "新浦壽夫" }
]
で、実際にきちんと格納されているかどうか。
みんなはどうやって見てます?
selectAll() など書いてログに出力する。

うん、見づらい。
Flip Tables で List を見やすくログに表示する
.dbファイルをPC上にコピーして、それをそれらで開く。
$ sqlite3 test.db
SQLite version 3.24.0 2018-06-04 14:10:15
Enter ".help" for usage hints.
sqlite> select * from player;
id number name
---------- ---------- ----------
1 1 柴田勲
2 2 土井正三
3 3 張本勲
4 4 王貞治
5 5 シピン
6 6 高田繁
7 7 河埜和正
8 8 福嶋智春
9 9 新浦壽夫
はい、いちいちPC上にコピーするのが面倒。

dbファイルパーミッションの厳格化でIDEから直接見ることはできない。
ので、いちいち、PC上にコピー。
毎回、ビューアの設定やパスの指定や同期の確認。
はい、操作多すぎ。
Stetho - A debug bridge for Android applications
デバッグコードを多少埋め込む。
dependencies {
compile 'com.facebook.stetho:stetho:1.5.0'
}
public class MyApplication extends Application {
public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
}
}
埋め込んだら、Chromeで開く。
chrome://inspect/#devices

なんで、ID列が2列あるんだよっ!?
リードオンリー。

一行のみ。
debugImplementation 'com.amitshekhar.android:debug-db:1.0.4'
ログに出力されるURLをクリック。

ブラウザに表示される。

クエリー実行や行ごとの編集もブラウザから可能。
これにしよう。
「Make Debugging Great Again」ですね!
しかし、Room で見れない。
「room」 - Issues · amitshekhariitbhu/Android-Debug-Database
どうにも、「File Explorer」を使ってのファイルコピー操作がだるい。
確認のたびに、接続や同期、ファイル上書き確認が必要。
しかも、コピーするファイルって、
data/data/your-application-package/databases 以下
your-database-name
your-database-name-shm
your-database-name-wal
の3つが必要なんじゃね?
しらんけど。