- 1. 【Flutter】import するパッケージが多くなった時の対処法
- 2. [Flutter]BLoC 7.0系から8.0系の破壊的変更に対応した話(mapEventToState廃止)
- 3. vistaでandroid studio その24
- 4. Epoxyで最初のアイテムだけViewが違うRecyclerviewを実装したい
- 5. MediatorLiveDataでNullPointerExceptionが出たときの対処法
- 6. Kotlin Coroutineを使ったタイムアウト付きのリトライ処理の方法
- 7. vistaでandroid studio その23
- 8. vistaでandroid studio その22
- 9. Android StudioでWebViewアプリを作成してみる
- 10. Flow vs LiveData
- 11. 【Javascript】PWAでお絵かきアプリを作った時の技術的課題について【Apple Pencil】
- 12. vistaでandroid studio その21
- 13. vistaでandroid studio その20
- 14. Androidでリリースアプリ作成の為の情報を忘れてしまった。。。
- 15. Kotlin コルーチンの標準ライブラリのみでコルーチンを使ってみた
- 16. vistaでandroid studio その19
- 17. 【Flutter】Segmented buttons を実装する
- 18. Androidのセキュリティ的な雑談(FRP)
- 19. AndroidStudio内のリソースファイルの置き場と利用方法
- 20. Jetpack ComposeでTabにバッジをつける方法
【Flutter】import するパッケージが多くなった時の対処法
## 初めに
コーディングをしていく中で、一つのファイルでインポートするパッケージやページの数が増えてきてしまいました。
初期に書いたコードの中では、以下のように大量の import 文が並んでいるものもありました。
![スクリーンショット 2022-09-12 16.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609901/72fa0578-f6bc-63e0-e65e-95bea5fc3c52.png)
流石にここまで import 文が並ぶことは無いかもしれませんが、大きなプロジェクトになると大量のページやパッケージを import する機会はあると思うので、今回はその対処法を共有したいと思います。## 記事の対象者
+ ファイル内の大量の import を無くしたい方
+ 大規模なアプリを開発中の方
+ コードを綺麗に保ちたい方## 実装
大量の import 文を無くすためには `export` を使います。
まずは新たに 「 importer.dart 」 というフ
[Flutter]BLoC 7.0系から8.0系の破壊的変更に対応した話(mapEventToState廃止)
## はじめに
私の携わっているプロジェクトではflutter_blocを採用しており、
今回7系から8系にアップデートを行いました。https://pub.dev/packages/flutter_bloc
元々v7.0.0を利用しておりましたが8系で1点破壊的変更が入っており、
対応に関する日本語での記事が少なかった為、今回共有をさせて頂きます。## 破壊的変更点 (mapEventToState廃止)
v7.0.0を利用していた当初、何かしらのEventを発火させた後にBLOCクラス内では`mapEventToState`を用いて各種Eventのハンドリングを行なっておりました。
この`mapEventToState`は**v7.2.0から非推奨**になり**v8.0.0以降は廃止**となるようです。> In bloc v7.2.0, mapEventToState was deprecated in favor of on
. mapEventToState will be removed in bloc v8.0.0.
https://blocli
vistaでandroid studio その24
# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。# 練習問題
jniでopenglで箱を回転、表示せよ。# 写真
![device-2022-09-15-115037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/a7de5048-6f2e-3cc3-ac88-a99e6fcd9fb5.png)
# サンプルコード
“`
#include
#include
#include
#include
#include
#include
#include
#include “Matrix.hpp”#define LOG_TAG “libNative”
#define LOGI(…) __android_log_print(ANDROID_LOG_I
Epoxyで最初のアイテムだけViewが違うRecyclerviewを実装したい
# 初めに
今回はEpoxyライブラリで最初のアイテムだけViewが違うRecyclerViewを実装していきたいと思います。
### 本文
“`kotlin
override fun addModels(models: List>) {
val item = ExcampleBindingModel_().apply { id(“header”) }super.addModels(
buildList {
add(item)
addAll(models)
}
)
}
“`
`addModels`は`buildItemModel`で作った`EpoxyModel`のリストをViewに当てはめてくれる部分なのでその段階でヘッダーに設定したい`View`を最初に`add`するようにしてあげればいいだけです。
# 最後に
ヘッダーだけViewを変えたい等で役立つかと思います。
何かの実装の参考になれば幸いです。
MediatorLiveDataでNullPointerExceptionが出たときの対処法
### はじめに
以下のエラーが出た。> at androidx.databinding.ViewDataBinding.updateRegistration(ViewDataBinding.java:653)
“`java:ActivityMainBindingImpl.java
if (vModel != null) {
// read vModel.isNetworkError
vModelIsNetworkError = vModel.isNetworkError();
}
pdateLiveDataRegistration(0, vModelIsNetworkError); //この行で上記のエラー
“`>Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘void androidx.lifecycle.LiveData.observeForever(androidx.lifecycle.Observer)’ on a null object
Kotlin Coroutineを使ったタイムアウト付きのリトライ処理の方法
# KotlinCoroutineを使ったタイムアウト付きのリトライ処理の方法
## APIリクエスト失敗時にタイムアウト付きでリトライする場合
“`main.kt
class ApiService() {
//通信処理用スコープ
private val ioScope by lazy { CoroutineScope(Job() + Dispatchers.IO) }suspend fun request(): Boolean {
return try {//通信するため、IOスコープに切り替える
withContext(ioScope.coroutineContext) {
//Timeoutを設定
//Timeout時はTimeoutCancellationExceptionが吐かれる
withTimeout(10 * 1000) {//
vistaでandroid studio その23
# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。# 練習問題
jniでopenglを表示せよ。# 写真
![device-2022-09-14-115340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/a558700a-152c-ff16-1d8b-5739347c8143.png)
# 方針
– ndk r10 にopengl無いので、r12bにする。
# サンプルコード
“`
#include
#include
#include
#include
#include
#include
#include#define LOG_TAG “ohi”
#define LOGI(…) __android_log_print(ANDRO
vistaでandroid studio その22
# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。# 練習問題
jniでログを吐け。# サンプルコード
“`
#include
#include
#include
#include
#includeJNIEXPORT jstring JNICALL Java_com_ohisamallc_ohiapp154_ohiapp154_MainActivity_hello(JNIEnv * env, jobject thiz) {
char buf[456];
const char * s0 = “ズン “;
const char * s1 = “ドコ “;
const char * s2 = “ドコ キヨシ!!”;
int i = 0;
int n = 0;
while (i == 0)
{
if ((rand() & 1
Android StudioでWebViewアプリを作成してみる
## はじめに
転職による有休消化期間で何かしたいと思い、Androidで欲しかった機能を作ろうと思い立ちました。
期間は半月程度です。
ほしかった機能はここでは重要ではないので割愛しますが、Androidのローカルファイルへのアクセスが必要な他は特に必須機能がないのでアプリ画面はWebViewなどで簡易に作成することにしました。
Kotlinは未経験でしたが、Javaは経験済みだったため、Kotolinを一から学習するのではなく、JavaでのAndroidアプリをモック的に作成し、Kotlinにリファクタリングする形で差分学習をし、学習効率をあげようと計画しました。いつもの自分だったら、Kotlinの本などで一通り学習して、アプリの基本設計もして、準備万端な状態で開発に入るのですが、半月という期間でそれでは間に合いません。
また、こちらの本を読んだばかりで、まずモックを作ってしまうというアプローチや学習効率を模索したかったのもあります。(Kindle Unlimitedに入っています)
Flow vs LiveDataどれにします? どの流れにします?
![スクリーンショット 2022-09-13 17.29.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/578bb333-c6b1-7ae4-3beb-d0f8a5c2bc2a.png)
【MVVM】Flow vs LiveData https://t.co/yCy7pl61iI #android #kotlin #プログラミング初心者
— chanzmao (@maochanz) September 13, 2022
The real reason Jake doesn't do LiveData ?
— Daniel Wilson ? (@gamesdev_Dan) July 1, 2020
【Javascript】PWAでお絵かきアプリを作った時の技術的課題について【Apple Pencil】
## 成果物
どんなものを作ったか?を先に見てもらう方が分かりやすいと思うので成果物から先に置いておきます。
– [大人用](https://kurokky.github.io/whiteboard/tablet)(画像を保存できる)
– [こども](https://kurokky.github.io/whiteboard/child)(画像を保存できないシンプル版)作る経緯についてはnoteの[こどものためにスマホ・タブレットで使える「ホワイトボード」を作った話](https://note.com/kurokky/n/ne4260f983498)に記載しています。
qiitaは技術的な課題と解決方法について同不順で記載します。## debugが超絶面倒だった
個人開発について回る問題ですけど。
– iPad(HTML/PWA)
– iPad + **Apple Pencil**(HTML/PWA)
– iPhone(HTML/PWA)
– Android(HTML/PWA/OS違い)
– FireTablet(HTML/PWA)これを1人でチマチマやるのが、面
vistaでandroid studio その21
# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。# 練習問題
jniでzundokoを表示せよ。# 写真
![device-2022-09-13-072513.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/38177ab4-60e0-e69b-7e03-6674b2aa563a.png)
# サンプルコード
“`
#include
#include
#include
#includeJNIEXPORT jstring JNICALL Java_com_ohisamallc_ohiapp154_ohiapp154_MainActivity_hello(JNIEnv * env, jobject thiz) {
char buf[456];
const char * s0 = “ズン “;
const c
vistaでandroid studio その20
# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
練習問題やってみた。# 練習問題
jniでfizzbuzzを表示せよ。# 写真
![device-2022-09-13-065334.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/6db18e07-53dc-bef7-af1a-751945f03f8e.png)
# サンプルコード
“`
#include
#include
#includeJNIEXPORT jstring JNICALL Java_com_ohisamallc_ohiapp154_ohiapp154_MainActivity_hello(JNIEnv * env, jobject thiz) {
char buf[456];
char n[8];
const char * s0 = “fizz “;
const ch
Androidでリリースアプリ作成の為の情報を忘れてしまった。。。
## はじめに
この記事はリリースアプリを作成する為の情報をAndroidStudioに依存してしまい、キー情報を紛失したと焦って調べた際の情報をまとめました。## 対象者
この記事は下記のような人を対象にしています。– jks等のキーストアファイルは残っているが、パスワードを忘れてしまった方
## 結論
パスワードに設定した文字列の予測(こうしたっけ?)が思い付かない方は、Google Play Consoleから、署名鍵の紛失による申請を実施した方が良い。### 結局情報を諦めるまでに試した手順
### 今回のパターン
Androidのリリースアプリを作成する為には以下の4個の情報が必要
1. keystoreファイル(.jks)
2. Alias名
3. Aliasパスワード
4. keystoreパスワード今回 1.のkeystoreファイルだけ残っている状態で、2.3.4の情報の復元を試みた。。。
### 実施した内容
本家Googleさんに復旧する為のツールがある事が判明し、ダウンロードしてきた。
[Google Code](https://c
Kotlin コルーチンの標準ライブラリのみでコルーチンを使ってみた
# はじめに
Kotlin コルーチンは Web 上の様々なドキュメントや、本家が提供する [Coroutines guide](https://kotlinlang.org/docs/coroutines-guide.html) 等を読んでいけば割と簡単に使うことができます。例えば Android アプリを作成する時にドキュメントやサンプルコードを読むと Kotlin コルーチンを使う例がたくさん出てきますので、それを真似しながら上記の本家のガイド等で調べて使いこなしていくという感じになると思います。
一方コルーチンをある程度使っていくと、コルーチンの豊富な機能はどのように作れらているのか興味が湧いてきます(きません?)。Kotlin コルーチンは以下の2つのライブラリから作られており、標準ライブラリが提供する基本的な機能の上に高水準なライブラリが作られ様々な機能を提供しています。
– [kotlin.coroutines](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines/)
: 基本的で
vistaでandroid studio その19
# 概要
vistaでandroid studio 1.1.0やってみた。
jniやってみた。
helloworldまでの、手順。# 写真
![device-2022-09-12-074650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/e14e0256-3e31-0316-ea2e-26396c96a282.png)
# NDKをダウンロード。
android-ndk32-r10-windows-x86.zip
# /src/main/jniフォルダーを作る。
# /src/main/jni/hello.cを書く。
“`
#includeJNIEXPORT jstring JNICALL Java_com_ohisamallc_ohiapp154_ohiapp154_MainActivity_hello(JNIEnv * env, jobject thiz) {
return (* env)->NewStringUTF(env, “Hello Wo
【Flutter】Segmented buttons を実装する
## 初めに
Material Design3 の Components には [Segmented buttons](https://m3.material.io/components/segmented-buttons/overview) という項目があります。
しかし、Flutter の Widget には Segmented buttons が用意されていないため、今回はそれを実装してみたいと思います。## 記事の対象者
+ Flutter と Riverpod の基礎理解ができている方
+ アプリ内で Segmented button を実装する方
+ Material Design3 に記載されていた内容をそのまま実装したい方## 準備
今回は [material_segmented_control パッケージ](https://pub.dev/packages/material_segmented_control)を使って Segmented button を実装します。### パッケージの追加
まずは [material_segmented_control
Androidのセキュリティ的な雑談(FRP)
初投稿です、よろしくお願いします。
-Factory Reset Protection-
Googleのシステムが入っているならほとんどの端末で有効になるセキュリティ機能
ヤ〇オクなどではアカウント残りなどとも呼ばれている。Googleアカウントを残したまま初期化すると、残したアカウントにログインしないと初期設定が進まない設計になっている。
ただ、
・(一定バージョンまでは)あくまでパスロックがかかっていない初期化後のため、
所定の方法を踏めば回避可能・仕組み自体を悪用されやすい
(別ルートでGアカウントを設定したりAndroid 9から採用されたPINロックで解除を悪用するなど)とかなり緩く作られている。(各社ベンダー任せ?)
対してAppleのIOS搭載端末では、知る限り本体のみでプログラムやUIの抜け穴を用いて解除されたということは聞かない。
Android端末のメーカーもO〇poやXi〇omi、H〇aweiなどは独自のリカバリなどを用いて
パスコードが不明な場合の初期化を封じたり、初期設定時に独自IDにログインしろとする場合がある。気になるであろう国内メ
AndroidStudio内のリソースファイルの置き場と利用方法
# はじめに
Androidエンジニアとして初心者だった頃に、取り込んだ画像の置き場所がわからない
文字列を入力する場所ってどこだっけ?
となった経験があることを思い出したので、それぞれのリソースファイルの置き場所とそれの使い方等を表にして記事に残そうと思います。# 表
|フォルダ|説明|利用例|
|:—|:—|:—|
|/res/values/|色(Color)|R.color.red|
||色(ColorDrawable)|R.drawable.red|
||寸法|R.dimen.one_pixel|
||テーマ 又は、スタイル|R.style.Theme_CommonTheme|
||文字列|R.string.text|
|/res/drawable/|Bitmap(.bmp)、JPEG(.jpg)、PNG(.png)、GIF(.gif)|R.drawable.gazou|
|/res/layout/|レイアウト|R.layout.main_layout|
|/res/anim/|アニメーション|R.anim.spin|
|/res/raw/|バイナリ|R.ra
Jetpack ComposeでTabにバッジをつける方法
今回はJetpack ComposeでTabにバッジをつける方法です
未読のお知らせ等があるときにタブにバッジを表示させたいことがあると思います。
実装方法です。
# androidx.compose.materialの導入
[androidx.compose.material](https://developer.android.com/jetpack/androidx/releases/compose-material?hl=ja)
を導入します。“`
dependencies {
implementation “androidx.compose.material:material:${latest.version}”
}
“`androidx.compose.materialを導入すると“BadgedBox“や“Badge“を使用することができ、こちらを使用してバッジを実装していきます。
# バッジの実装
表示するタブのアイコンと、表示するテキストのデータを作っておきます。
“` Screen.kt
val tabData = listOf