Androidアプリは完成しませんでした

この記事はKosen Advent Calendar 2016の15日目となります。

高専について書くことは、微積の勉強をしないと留年しかけますよ、くらいしかないので、Androidアプリの話をします。

Androidアプリが完成しないという話です。

https://github.com/pakutoma/iijmiocouponwidget←こんなの作っているんですが、完成しません。

とあるAPIを叩くだけのウィジェットなのですが、ボタンが落ちたり自動的に通信するサービスが落ちたりします。

数日設置しっぱなしにしていると、ボタンが反応しなくなったり、自動更新が動作しなくなったりするのです。

色々試してはいるんですが、かれこれ6ヵ月くらい解決できずに悩んでいます。というか作り始めた時からずっと悩んでいます。

Androidアプリは元々インターネットで情報が多いジャンルではないのですが、ウィジェットになると本当に数えるほどしかありません。それも1.6とか2.3とかの時代のやつ。

読めない英語を読んでAndroid Developersを探してもトラブルシュートの情報はあまりなく、StackOverflowにも大して情報はなく、世の中でウィジェットを開発している人間は本当にいるのかみたいな気分になってきます。

多少ニッチなジャンルになるとここまで情報がなくなるということを感じてしまうと、将来自分がWeb以外のことをやろうとしたときにやっていけるのかなあと不安になってきます。

というかAndroid開発についての最近の情報が本当に少なくて、いっそどこかのAndroidアプリ製作会社とかでバイトでもした方が身につくんじゃないかみたいな気がしてきます。

札幌近郊でAndroidの開発していて学生のバイトが受け入れられる会社とかありませんかね…

ヤマもオチもないですが書くことがないので、Androidウィジェットの恨みつらみを書いて終わりにします。

Activityっていうクラスを継承する画面のオブジェクトであることことを前提としてAndroidの非同期システムは作られているんですけど、WidgetってActivityを継承しないので、普通に非同期処理をする手段が存在しないんですよね。
しかもインターネットアクセスをUIスレッドですると、その瞬間Android的に駄目ですって言われて殺されるんですよね。
なのでServiceっていうバックグラウンド処理のシステムを使って非同期処理をする、IntentServiceっていうクラスを継承したやつに非同期処理を投げてやってもらう、という形になるんですけど、これがまた非常に面倒なんですよね。今時メソッド呼び出しとコールバックで非同期処理を全部書くわけですよ。それもJavaで。
Androidのコールバックっていうのがまた、Intentっていうシステムを使って通信するんですけど、それに呼び出し元とか呼び出し先とかがないもんだから(最初の呼び出し以外のコールバックとかは全部ブロードキャスト)、パッケージ名とクラス名を文字列にしたものを定数として宣言してそれと比較~とかするんですけど、これまた面倒。
あとServiceを宣言した時とかにAndroidManifest.xmlとかいうのになんかいちいち書かなきゃいけなくて、そんなのコンパイルしたら使うに決まってるんだろって感じなんですけどいちいちこれ呼ぶよとかインテントこれ使うよとか全部書いて、そしてそのクラスので使う権限があったらこの権限使うよってのも全部書いて、しかもこの権限が必要なのも必要じゃないものある上に別に必要なものでもIDEで補完されるわけでもなく、日本語での一覧みたいな資料もなく、エラーが起こってもこの権限が足りないとか言ってくれないからそこで意味不明なハマり方をするし、情報が少ないし本当に最悪。
あと、突然AlarmIntentっていう何秒後にイベント呼び出ししますーみたいな機能の設定が、何かする度にすぐ消される(アプリの更新とか電源の入れ切りとか)し、その消されるイベントを感知して自前で再設定するのも自分で書かなきゃいけないし、しかもその「イベントの感知」に権限が必要だし、権限がなくても別にエラーとか吐くわけじゃなく「権限がないのでイベントの通知がされない」だけだし、何がおかしいのかわからない。
PendingIntentっていうボタンとかに使うイベントリスナもあるんですけど、これも再起動とかアプリの更新とか画面の回転とか(←は?)ホーム画面の再描画とか(←は???)で消されるし、その度に多分再設定しなきゃいけないんだけど(ここが分かってないからボタンのイベントが突然死んでボタン反応しなくなって今困ってる)一体いつイベントリスナが消されたのかみたいなのはログに残らないから全くわからないし、良くわからない。本当にやめてほしい。Android開発の闇という感じ。

あと、僕はHUAWEI P9liteっていうスマートフォンを使ってるんですけど、このスマートフォンが乗せているAndroidカスタムOSであるEMUIってOSが、唐突にタスクキルしてきたり、唐突にタスクキルしてきたり、唐突にアプデしてきたと思ったらタスクキルから保護する対象がリセットされてたり、デバッグビルドを実行するためにアンインストールしたらタスクキルから保護する対象から外れたり(すべてのアプリを保護、にチェック入れてるのに新しいアプリをインストールした瞬間にそのチェックを外して勝手にタスクキル対象に入れやがる)、そんなことを無限にしていたらEMUIが無限に嫌いになったので皆さんは独自カスタムが入ったAndroidスマートフォンを買わないようにしましょう。Nexusが最高なのでNexusを買いましょう。

以上。Android開発は心が強いか周りに強い人がいるかのどちらかではないと死ぬのでやめましょう。
強い人がいると詰まった時にツイートするだけで教えてくれたりするので本当に開発が捗ります。芝生さん本当にいつもいつもありがとうございます。

最後に一言。

Android開発するにはまず人脈♪

すみませんでした…

おわり