Kotlinを使っていて感じるつらさ
ちなみにこの記事を書いたのはかなり昔のことなので、今はだいぶ環境が変わっている。マシンスペックによる辛さも含まれていたので、現在ではだいぶ解消されていると思って読んで欲しい。
なにせ3年もまえの記事だからね・・・あんまり真に受けないように。19年時点の私はだいぶKotlinラバーですから。
ちなみにこの記事を書いたのはかなり昔のことなので、今はだいぶ環境が変わっている。マシンスペックによる辛さも含まれていたので、現在ではだいぶ解消されていると思って読んで欲しい。
なにせ3年もまえの記事だからね・・・あんまり真に受けないように。19年時点の私はだいぶKotlinラバーですから。
Dagger2を使って依存性剥がしてみたらって話。古いブログから移設してきた記事なんで、参考程度にどうぞ。
USBデバッグがONになっていると動かないアプリがあるらしい。銀行系アプリで動かないらしいという話は聞いたことがあったのだが、私は使っていないから特になんとも思っていなかった。まあセキュリティ的な問題でしょうがないんだろうな程度だ。
しかし自分が使っているアプリが今後USBデバッグON状態では動きませんと言われてしまった。自分の影響のあるところで話が出てくるとちょっと困る。
私はスマホにアカウントを2つ登録して使っている。メインのアカウント(以降Aと呼称)とゲーム用のアカウント(以降Bと呼称)って言う感じで分けているのだ。
で、そうやってアカウントを2つ使っていると、ゲーム内課金を行うときにちょっと困ったことが起こる。課金するアカウントにどっちが選ばれるか問題である。
Android6.0からアプリのインストール時ではなく、パーミッションを必要となる操作を行う前に許可を求める形式になった。これ自体はとてもよいこと。インストール時にやたら権限を要求するアプリがなんだか怖くてインストールすらしなかったのが、これのおかげでとりあえず試して見れるようになったのはとてもよい。
新しいアプリを作るときにしかやらないので、いつもやり方を忘れてしまうCrashlyticsのレポート設定のメモ。
デバッグビルドでまでクラッシュレポートが報告されてしまうと、通知がうっとうしいだけですし、手元でスタックトレースが読めるわけですから完全に無駄です。必要なのは基本的にはリリースビルドだけでしょうから、開発中は無効にしてしまうのが便利です。
やることは下記のページのとおりです。
https://docs.fabric.io/android/crashlytics/build-tools.html?gradle#build-tools
まずはレポートを無効にしたいbuildTypeにext.enableCrashlytics = falseを追加します。
この設定はGradleのビルド時に、Crashlyticsで使うIDなんかを生成する処理を行わないようにするもののようです。レポート送信を止めるわけではないので、これを追加しただけでは下記のようなエラーが出てしまいます。
This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
install an Android build tool and ask a team member to invite you to this app's organization.
開発時にレポート送信自体を止めるためには、アプリ実行時にCrashlytics自体が動かないようにする必要があります。そのためには、Crashlyticsの初期化を行う部分で、下記のように初期化を行います。
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder()
.disabled(BuildConfig.DEBUG).build())
.build();
Fabric.with(this, crashlyticsKit);
ちなみにdebuggableがfalseなんだけどCrashlyticsのレポートを無効化したい、なんていう場合には、.disabled(BuildConfig.DEBUG || BuildConfig.BUILD_TYPE.equals("test"))のようにしてやればOK。
アプリの任意の場所でthrow new RuntimeException("Crashlytics report test");と例外を投げてみればOK。
ただし例外を投げる場所に注意が必要です。Crashlyticsの初期化が終わっていないと、そもそもレポートが送信できません。Applicationクラスの外か、ActivityのonCreateの外で例外を投げるようにしないとテストにならないので注意しましょう。
https://docs.fabric.io/android/crashlytics/introduction.html
UI作るのに苦手意識を持ってるんだけどどうしたらいいのかなぁって話。
Android Wearのアプリを作成する際には、パッケージ名をスマホ側と同じにしなければなりません。
新規プロジェクトで初めからWear用のアプリも含めて開発する際は関係ない話です。Android Studioの新規プロジェクトウィザードでターゲットにWearを追加するだけなので、両者のパッケージ名を別のものにしようと思ってもできません。
気をつけなければならないのは、スマホ用のアプリを作成していて、途中からWear用のモジュールを追加する場合です。「Wear用のモジュールだからパッケージ名変えたほうがいいかな」なんて気を利かせると逆にハマります(私のように)。
(ちなみにここで言っているパッケージ名は、アプリのパッケージ名のことです)
開発時はWear用のモジュールを実行、スマホ用のモジュールを実行という感じでアプリをインストールして実行できるので問題に気づきにくいのですが、Wearとスマホで通信を行おうとした際にハマります。
具体的にはCapability APIを使って通信可能なノードを取得する際に、パッケージ名が違うとそのノードが取得できません。
https://stackoverflow.com/questions/35136881/cant-detect-node-using-the-capability-api
Capability APIはWearからの要求に応答可能なデバイスを探すための仕組みです。例えば自分で 「say_helloという要求を行う」と定義しておけば、Wearからメッセージを送信する際にsay_helloが定義されているデバイスだけを、Capability APIを使うことによって取得することが出来るのです。しかし、それはパッケージ名が同じアプリであればの話です。
ちなみにNode APIを使えばパッケージ名が異なっていようが関係なく、ペアリングされているノードが取得できます。パッケージ名が異なると接続されているノードが取得できないのはCapability APIを使った場合の話のようです。
Wearアプリを作成する場合、パッケージ名を変えることは基本的にはないと思いますが、Wearのパッケージ名とスマホのパッケージ名を異なるものにすると弊害があるぞというお話でした。特に後からWear用のパッケージを追加するときには気をつけましょう。
Android WearデバイスをBluetooth経由でデバッグする方法について。
Android WearもUSB経由でパソコンに接続してデバッグする方が何かと便利です。ですが、USB経由で接続しようと思うと、Wearデバイスに直接USBケーブルをつなぐタイプのものなら問題無いでしょうが、クレードル経由で接続するタイプの製品だと腕につけた状態でデバッグできません。
そんなときはBluetooth経由でデバッグすると便利です。
https://developer.android.com/training/wearables/apps/bt-debugging.html
Bluetooth経由でのデバッグを有効化しておく必要があります。
まず設定→端末情報→ビルド番号を7回タップして開発者オプションを有効にします。
すると開発者オプションを選択できるようになるので、そこからADBデバッグとBluetooth経由でデバッグを有効にします。
以上でWear側の事前準備はOK。
Android Wearとペアリングしているスマホ側でもBluetooth経由のデバッグを有効化してやる必要があります。
Android Wear companion app(日本語だと単にAndroid Wear)を実行します。Android Wearとのペアリングしたりするアプリです。
使いたいAndroid Wearデバイスとのペアリングした状態で、Appbarにある歯車アイコンを押します。
すると設定画面が開くので、その一番下にあるBluetooth経由のデバッグを有効にしてやります。
ホスト:未接続、ターゲット:接続済みとなっていると思います。
それができたら次のステップ。
以下のコマンドを実行。
adb forward tcp:4444 localabstract:/adb-hub
adb connect localhost:4444
adb connect localhost:4444でConnection Refuesedとなってしまう場合、localhostの部分を127.0.0.1とすれば接続できると思います。
接続できればスマホで「ホスト:未接続」となっていた部分が「ホスト:接続済み」となると思います。
そうすればAndroid StudioからAndroid Wearデバイスが見えるようになっていると思います。
adb disconnect 127.0.0.1:4444
adb forward —remove tcp:4444
ちなみにポートフォワーディングしているかどうかを確認するにはadb forward —listで確認可能。
私はLG G watch Rを持っていたのだけれども、長いこと使っていなかった。普段腕時計をしないし、するにしても薄くて軽いやつをずっと使っていたので、スマートウォッチの大きさが我慢できず、そのうちつけるのをやめた。
そんな放置していたスマートウォッチを久しぶりに使ってみた。