2021年11月18日木曜日

七転八倒

いつもタイトル通りのような気がしますが、一時期まともにビルドできなかったAndroidStudio(DEV版ですが)がようやくまともにビルドできるようになった感じなので使用しているアプリから順にビルドし直していたりします。

Googleさんからちょくちょくとポリシー変更なりなんなりのメールが来てはいたのですが、先日、軒並み公開中のアプリがストアから削除されたという報告メールが多数送られてくるという事態に。

きっかけと思われるのは、あるアプリのレビューがとてつもなく幼稚なレビューが書き込まれることが目についたので、対象年齢を18歳以上としたことが原因なんだと思います。

ほかのアプリは特に対象年齢は指定していなかったのですが、おそらく中の人かAIがほかのアプリも対象年齢をごまかしているに違いないという憶測で一気にストア上から排除したんだと思います。

基本的にレビューに対して直接返信することはしないようにしていたりします。理由は単純でうまく意思の疎通が取れるとは思えないからということ。ですが、結構レビューはちゃんと見てたりします。全く知らない言語で書かれていても翻訳してなんとか意味を汲み取ったりしていますが、言葉の壁は厚いw

しかしながら、どうしょもないようなレビューで★☆☆☆☆とか連発されると慣れたとはいえ精神衛生上よろしくないので、なにか対抗手段はないものかと思いついたのが年齢制限。意味はなさそうですが(笑)

そんなこともあり、リビルドせにゃいかんと思ってはいたので時間ができたときに気を改めてAndroidStudioのアップデートを行ったところリリース版ではうまくゆかず。新規プロジェクトを作っても一回目のビルドは通るのに二回目から失敗するとか意味わからん。

直接的な原因はgradleのテンポラリだかキャッシュだかのフォルダを手で削除すればビルドは通った(メッセージを見るとどうもマージがうまくできていないようでした)のですが、なんか気持ち悪すぎるのであきらめてDEV版を使って試したところ、ようやくまともにビルドが通るようになりました。なんていうか、AndroidStudioのビルド動作ってgradleのバージョンが上がりすぎてついていけてない感じになっててかなり面倒なんですよね。

ビルドが通るようになったので、gradleの書き換えやらリポジトリ変更に伴う書き換えやら、SDKのバージョンアップに伴うライブラリやアーティファクトの書き換えやらを半ば機械的に行いながら作業を行っていました。

そして地道に作業を進めていたのですが、ここ数日でドはまりしていたのがSSID Widgetです。とりあえずSDK31でビルドが通るようにしようとしていたのですが、ビルド後の動作がうまく動かず何が原因かわからず丸2日ほど途方に暮れ、仕方なしにSDKバージョンを下げて動作するかどうか確かめることにしました。

ちなみに手元にあるデバイスはAndroid10なのでSDKは29です。

Wifiの扱い方が大きく変わるのがSDK31からっぽいのですが、それまでにも権限周りの扱い方がSDK26(Oreo)から変わっていてかなり面倒になってはいました。その後は、そんな変わっていないだろうと見ない振りをしていました。しかし、細かいところでさらに面倒なことになっていたようで…

ACCESS_BACKGROUND_LOCATIONなんて知るか!しかもWIFI関連でFINEロケーションが必要とか聞いてないですw

https://developer.android.com/training/location/permissions?hl=ja#request-background-location

ただのアクティビティーならもうちょい楽だったのにねぇ。

動作させてみていると、何かのきっかけでまれにSSIDが表示されることがあったんです。もうね、何が原因なのか見当もつかずで。

で、SDK29でとりあえず満足することにして、一旦SDK31ベースに追加したコードは捨てることに(31用に追加しなければいけないコードがあって面倒だったんですが、見通しが悪くなりすぎるのと、ビルドも通らなくなるので(笑))。さらに全体的な動作を見直し、動作確認していると、権限を変更すると動作が不安定になったり、サービス自体が消えたままとなってしましました。

一部はコードに原因があったりしましたが、助長な部分を削ったり、怪しいところは片っ端からデバッグログを入れたりして様子を見ていましたが、どうも権限を変更するとサービスの動作があまり安定しないことがわかりました。

マイクロソフトやASUSのメールアプリで挙動不審というか、メール受信がしなくなることがあったのですが、原因はきっとAndroidのサービスの扱い方が雑というところなんでしょう。単純に思いつくのは、適当なタイミングでサービスの動作チェックをする必要がありそうだということ。Androidって結構こんな感じがします。そもそもプロセスなども強制終了させて起動し直せばいいでしょ適な発想が主体だし。クソ仕様ですがw

で、Widgetでそこまでするか?

ストアで公開すると結構文句言われそうですけど、とりあえずする気はないw実用的に問題なさそうだしw

通常アクティビティーがあるアプリなら、権限許可を得るためにダイアログを表示させて、許可されたタイミングで処理が行えるのですが、Serviceなんてそんなダイアログ開けませんし、最悪アプリの詳細から設定したり、権限管理系の設定画面で許可されたりするので何とかできないか調べましたが、使えそうなブロードキャストは無さそうでした。

そもそも権限が変更されるとどうなるの?ってことで触ってみて実感したのは、

権限を新たに許可した場合、そのまま。

許可された権限を取り消した場合、実行中のアプリはリスタートされる。バックグラウンドのServiceは一定時間経過後に強制終了され、直後にStartされる。もしかすると終了させられることを通知するintentか何かを受け取っているのかもしれないけど…どうなんだろう?

権限を取り消したり、許可したり少し雑にちょこちょこ切り替えてみると、アプリが落ちたままとなってしましました。

色々触ってみた結果、権限関連以外はまともに動いてそうなので、とりあえず一段落かな?

0 件のコメント:

コメントを投稿