ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2022年10月26日水曜日

RecyclerViewでViewとbindingでハマる

すごく疲れたので愚痴ですかねぇ。

RecyclerViewを扱うために、Adapter, Holderを用意して、そこから選択状態などを扱おうとしたところからドはまりの旅が…

Android StudioはDolphin 2021.3.1ベースとなっているプロジェクトの雛形は新規に作り出したものなので、それなりに今風の作りになっているので、ActivityやFragmentではbindingを使う形になっていてリソースのレイアウトを作ると自動的にbindingクラスが用意され、コード上からはそれぞれのクラスが参照できる状態になっていました。

RecyclerViewを追加し、コードはViewベースの実装で行っていましたが、ググった参考記事がbindingが前提となっていたので何も考えずViewベースの記述をbinding形式に変更して変更していったのですが、ドはまりに…

ほとんどの部分では問題なかったのですが、どうもbinding.rootが参照できないという状態に。うまい逃げ方を思い浮かばなかったので、リソースの記述を確認し、不要部分を削ったり書き換えたりしました。が、何も変わらず。AdapterやHolderクラスの記述に問題があるのかもしれないと、色々な個所を書き換えてみましたが変わらず。途方に暮れつつ無駄に2,3日経過。私の中でなんとなくbinding系はまだ実装が不完全なのでは?という結論に。

それと、検索した中に「たまにbindingクラスが不安定」という記述を見受けたので、cleanやリビルドを行ってAndroidStudioの再起動をしてみましたが結果は変わらず。

Android Studioで更新チェックを行い更新してみたのですが、空振りし続けているようなので新たに2021.3.1 Patch 1をインストールし直してみました。

その後、更新チェックを行って環境を更新し、プロジェクトを開くとAGPの更新が通知されたのでそのまま(Android Gradle Plugin version 7.3.1.へ)更新してみました。

更新後コンパイルしてみると見慣れないエラーが表示されるように。

> Task :app:mergeDebugResources FAILED

{"msg":"Found \u003clayout\u003e but data binding is not enabled.\n\nAdd buildFeatures.dataBinding \u003d true to your build.gradle to enable it.",

などなど、どうもなにかbuild.gradleに記述が足りていないということで検索してみるとスタックオーバーフローの記事にそのものずばりの記述が

How to solve 'data binding is not enabled' error while using view binding

 buildFeatures {
        viewBinding true
        dataBinding true
 }

plugins {
     id 'kotlin-kapt'
}

機能を有効にして、プラグインも確認してみては?みたいな。

viewBinding trueはやってたけど、dataBinding trueなの見たことないんですがw

有効にしてみると、見事にbinding.rootが有効になっているようで…

2022年9月28日水曜日

Roomで(使う前に)ハマったポイント

データベース操作をするならこれからはRoomを使うのが当たり前みたいな流れなので試してみました。

が、これがもうデータ操作をする前の準備段階で結構痛い目を見ています。

参考にできそうな情報が過去と錯綜しているのと、プレビュー段階の物とか。あと、Googleのドキュメントが結構嘘っぱちすぎて辛いです。

2022/09/28現在、Roomのステーブルバージョンは 2.4.3

この状態で日本語のドキュメントと英語のドキュメントのサンプルコードの差異はほぼない感じ。

で す が

このサンプルがかなりあてにならない。

プロジェクトへの導入部分のコードが誤っているとか何というか…モジュールレベルのbuild.gradleへ追記する必要のある定義で問題

その1kspはなかったことにしよう

dependencies {
    def room_version = "2.4.3"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:2.5.0-alpha03"
}

誤りと言うのは何ともな部分ですが、「ksp "androidx.room:room-compiler:$room_version"」をコメントアウトしないと先に進まない。コメントアウトしても問題が無いのかという判断もできない状態でコメントアウトするのはかなりきつかった。色々見る限り、コンパイル時間が短くなるだけのようなので、不安定になるぐらいならこんなものいらない。ステーブルバージョンとはいったい何なのかと…

その2「implementation "androidx.room:room-paging:2.5.0-alpha03"」

結論から言えば、これが大問題で、バージョンは他と合わせる必要がありました。

なので implementation "androidx.room:room-paging:$room_version" とすれば解決できます。そもそもオプショナルってなっているのでこれもコメントアウトするだけでもいいのかもしれませんが不明。

ちなみに2.5.0-alpha03は現時点でアルファリリース状態のバージョン。

しかもです。こいつが2.5.0ベースのおかげで、SDKレベルも33以上にする必要が出て来てたりこれのおかげでえらい遠回りさせられました。

@ナントかで記述して作法通りに記述する必要があり、いくつかのデータベースプログラミング経験があってもマニュアルがないときつい気がしました。ネット上で探すとそれなりに時間を浪費する。そしてエラーが表示されても文字化けして想像を絶するという。

この文字化けは Android StudioにおけるBuild Outputの文字化けを解消 https://qiita.com/watanaby0/items/bc2459e03c81a4b708c7 で解決できました。Room以外にもたびたび悩まされた文字化けですが、Roomで発生するエラーはコード展開されたあとのコンパイラのエラーなので全く想像つきませんでした。出力は英語のままでもいいのに変なところでローカル化するから…

で表示されたエラーが「(public)より弱いアクセス権限を割り当てようとしました」という感じで、これの英語表記は多分「attempting to assign weaker access privileges; was public」となっていて、これをヒントに検索してみたところ、2.3ベースにすれば解決するっぽい記述が出てたので変更しても変化せず。

悩んだ挙句に「room-paging:2.5.0-alpha03」が原因じゃないかと当たりを付けたところようやく解決したという。

こう言うのがandorid触ってて非常に面倒くさい。windowsも似たようなことはあるのですが、環境設定レベルで動かせないとか知らない人間にとってものすごいハードルが高い気がします。

2018年12月27日木曜日

NEW_OUTGOING_CALL

OCN電話のプレフィックスを付加させる動作で手元のスマホで動作が少しおかしいので少し調べてみました。

ダイアルするときに
「発信できません。」

というダイアログが表示されるもののしっかりと付加処理後の番号でダイアルされている感じに。

通話なんて滅多に使っていませんでしたが、そういえばずいぶん前にファームのアップデートがありました。

ターゲットとなる端末の状態は…
ビルド番号 01.00.05
Android 5.0.2
カーネルバージョン 3.4.0
古い端末になりますが、買い換えようと思いつつも、SH-M02使い続けています。

動作を調べてみたところ、1回のダイヤルで2回NEW_OUTGOING_CALLを受信している感じなので、ログで動作を詳細に見てみることに。

やはり2回呼び出されていて、一回目はgetResultData()は設定されていない状態で、2回目はgetResultData()が設定されている状態でした。

abortBroadcast()させてみたり、マニフェストのandroid:priorityを変えてみましたが、この辺の処理であまり動作を変更したくないので色々と試したところ、getResultData()がセットされていないときに処理を行わないようにしたら動作が落ち着きました。

この状態で手持ちの端末で様子を見ていますが、2回呼び出しが行われているのはSH-M02だけなのでこれがAndroidバージョンによるものなのか、ビルドによるものなのか、もしくは他のアプリが原因かは不明。

2017年10月2日月曜日

Androidの画面回転で気になったこと

画面の回転がロックされていなければ、端末の画面の方向が切り替わるとActivityも回転後の画面に合わせて切り替わります。

Android 3.2(API レベル 13)以降ではActivitiyに
android:configChanges="orientation|screenSize"
が設定されていればActivityはイベントを受け取り画面サイズの変更に伴う必要な処理を行うことが要求される。

2016年5月23日月曜日

play-service -> firebase ?

Android Studioが2.1になり、動作がかなり軽くなりました。そこから致命的なセキュリティーホールのために2016/05/17に2.1.1へのアップデートがメールでも告知されました。

その間主だったアプリのメンテナンスは行っていませんでした。最近AnalyticsがFirebaseへ移行するとか何とかのアナウンスもあり、少しメンテナンスを行ってみました。

Android Nの影響もありSDK Toolsのパッケージがかなりアップデートされていてかなり覚悟
しつつ、まずは空の新規のアプリケーションを作成してgradleなどのバージョンを一致させてゆきました。

Androidプロジェクト自体の大きなファイル配置の変更はなかったようで形は何とかなりましたが、きっかけとなったFirebaseへの移行を行うためにplay-service 8.3.0ベースのものを一気に9.0.0へアップしつつFirebaseへの対応を行いました。

build.gradleを触っているので同期をを行いつつ作業しましたが、どうしてもうまくbuildができなかったのでAndroid Studioの再起動やbuildフォルダをいったん削除してようやくapkが作成されるようになりました。

Android Studio 2.1ではFirebaseを含んでいるものはそのままではインスタントランできないようでPreviewバージョンのものにアップしなければならないようなので、インスタントランは考えないことに(笑)

Firebaseのことをあまり知らなかったのですが、今回のGoogle I/Oで正式なアナウンスがあったようで、いままでplay-serviceをほぼ置き換えるものとなっているようですね。Analytics関連はimportするパッケージが完全に切り替わっているのに対し、AdMobではimportするパッケージがそのままだったり(今後変更されるのかな?すでに変わっていて、今までのものが使えるだけなのかな?)ちょっとまだ混乱しそうです。

まだイベントなど組み込んでいない状態ですが、出来上がったapkのファイルサイズを比べると、今まで1MByte程度のものが1.9MByteにまで一気に膨れ上がってしまいました。
ある程度は仕方がないとは思いつつ、ファイルサイズはもっと小さくなるように設計してほしい気がします。

2015年11月26日木曜日

g04が手元に

先日申し込んだSIMフリースマホがSimSeller(NTTレゾナント株式会社)より昨日届きました。

2015年10月3日土曜日

意外と仕組みがわからなかったcanvas

やりたいことははっきりしているが、実際どうやっているのかいまいちなことをただひたすら試行錯誤していました。

2015年8月21日金曜日

Stagefright関連のセキュリティーホールの対応

いまいち各メーカーの足並みがそろわない状態ですが、知れ渡ってからもうすぐ一か月を過ぎようとしています。
手持ちの端末で完璧とまではいきませんが、対応が早かったものとしてはやはりNexus9でした。
それでも若干もたついていた感はありました。

深刻度合が低いものを除き現状では修正されているようです。

2015年2月3日火曜日

Touch Screen Testを公開してようやくダウンロードユーザーが三ケタに

無料アプリで広告も通信もしないものとして公開して1か月ほどしてようやく100ユーザーを超えました(笑)

2014年12月18日木曜日

スマホのテザリングで接続を安定させるためのアプリ

実際にスマホ(GL07S)のテザリングを行うと思った以上にWifi接続が切れてしまうことに驚きました。
WEBブラウズ程度だとリトライなどが自動で行われ、レスポンスが悪くなる程度で実用上問題がでにくかったのですが、出先で少しゲームをすると、壊れてしまったのではないかと思うほどうまく接続できなくなることが多かった。

USBでのファイル転送ができないファイルがある。

バックアップしたapkファイルが貯まりすぎているので退避させようとPCとタブレットをUSB接続でファイル転送させようとしていましたが、PCから見るとファイルサイズが0byteになってしまっているファイルが多々存在していた。

2014年8月15日金曜日

ES ファイルエクスプローラの情報漏洩問題

先日注意喚起が行われましたが実際にbaiduという名のフォルダが作られていたのはスマホだけでした。
気にはなったもののこの問題が発せられて以降ESファイルエクスプローラー3.1.9.1自体のアップデートなどは行われてはいません。

2014年8月10日日曜日

Tegra NOTE 7の位置情報

今回ではなく前回のOTA 2.4.1で改善された機能についてのお話です。
このパッチで位置情報の取得されるまでの時間が大幅に改善されました。
ただし、その情報はWifiのステーション情報を絡めた位置情報取得を行った場合に限るようです。

2014年8月9日土曜日

Tegra NOTE 7 のポリゴン崩れ

ちょいちょい気になるポリゴン崩れ。
ピコットナイトじゃなくてピコットキングダムでもタイトル画面でポリゴン崩れが出ていて少し残念なところですが、ずいぶん前に動画だけ上げておいて放置状態なのでこのゲームをご報告。

2014年8月8日金曜日

OTA2.5で追加されたESファイルエクスプローラー

先日行われたTegra NOTE 7のOTA2.5
やはり一番の目玉はESファイルエクスプローラーが標準装備となったことでしょうか。

2014年8月5日火曜日

2014年7月30日水曜日

修理後のIdeatab A1000-Fの様子

先日手元に戻ってきたLenovoのタブレット。
とりあえず普通に家の中で使う分には問題のない感じだったので何度か外に持ち歩いて様子を見ているところです。

2014年7月20日日曜日