Android関連のことを調べてみた

Android関連のことを調べてみた

AndroidのRecyclerViewについて概観を書く

# はじめに

授業課題でAndroid開発をしたときにRecyclerViewの使い方とかカスタマイズの仕方がよく分からないという人が多く、私もすぐに噛み砕いた説明をすることができなかったので記事にまとめます。

## 執筆時のツール・SDKのバージョン
Android Studio Flamingo | 2022.2.1 Patch 2
Android 13.0 API 33
AGP 8.0.2
Gradle Version 8.0

# RecyclerViewとは?

RecyclerViewは大量のデータセットや、リスト内のアイテムを簡単に作ったり消したりすることができる動的リストを実装するためのクラスです。

実装には、リスト全体を包括する`RecyclerView`とリストのレイアウトを変更する`LayoutManager`、リストアイテムの見た目や動作を定義する`ViewHolder`、配列などに格納されているデータを`ViewHolder`と関連付ける`Adapter`の計4つのクラスを利用する必要があります。
アプリに合わせたRecyclerViewを制作するために

元記事を表示

Androidの権限周りの再整理 ~色々むず過ぎる~

## はじめに
権限周りがTargetSDKや端末のAPIレベルやらが入り混じって毎回調べるたびに混乱していた。備忘録として残してみる。

## 通知の権限
#### TargetSDKが33以上の場合
| 内容 \ 端末のAPIレベル | ~ APIレベル32 | APIレベル33 ~ |
|——|——————————–|———————————-|
| 新規インストール | デフォルトでアプリからの通知が可能 | POST_NOTIFICATIONSの許諾が必要 |
| APILevel33へのアップデート | 以前の通知権限が引き継がれる | – |

#### TargetSDKが32以下の場合
| 内容 \ 端末のAPIレベル | ~ APIレベル32 | APIレベル33 ~ |
|——|——————————–|———————————-|
| 新規インストール | デフォルトでアプリからの通

元記事を表示

意外と知らないModifier.clickable

この記事は[Android Advent Calendar 2023](https://qiita.com/advent-calendar/2023/android)の21日目の記事です。

Modifier.clickable()は、Jetpack ComposeのUIコンポーネントをクリック(タップ)可能にするAPIです。Composeでアプリを作るうえでなくてはならないModifier.clickable()ですが、引数にonClickのラムダを渡すこと以外はあまりよく知りませんでした。そこでこの記事では、Modifier.clickable()の仕様を確認して、どのように実装されているのかコードを眺めてみたいと思います。

## 環境

Compose 1.6.0-beta03で確認しています。
Compose 1.5から1.6でModifier.Node対応が進んでいるので、1.5以前のコードはこれから紹介するコードとはかなり違っている思います。また、今後の1.6.xでも変更が加わる可能性があることをご承知おきください。

## Modifier.clickable()の定義

元記事を表示

メモリ消費の削減を試してみた話

:::note info
これは [ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo) シリーズ9の21日目の記事です。
:::

# はじめに
先日、[Android Dagashi](https://androiddagashi.github.io/issue/304-2023-12-03/)さんの中で[65% Smaller APKs and 70% Less Memory: How I Optimized My Android App -Part II (App Memory)](https://medium.com/@tarunanchala/65-smaller-apks-and-70-less-memory-how-i-optimized-my-android-app-part-ii-app-memory-d4e652cf2c49)という記事がリストアップされていました。ご覧になった方も多いのではないでしょうか。

私も同記事を読んでみたところ、参考になるTipsが多く含まれていま

元記事を表示

ComposeでのonGloballyPositioned modifier についての調査

:::note info
本記事は ZOZO Advent Calendar 2023 カレンダー Vol.6 の20日目の記事です。
:::
明日は[jon20さん](https://qiita.com/jon20)の記事となります。

いきなりですが、Jetpack ComposeのonGloballyPositionedというmodifierを使用したことはありますでしょうか?

自分は対象となるComposableのサイズ取得時や親Composableに付随した特定の位置に配置したい場合など、何度か使用する機会がありました。ですが、実装のたびに自分が期待する動作をするまで試行錯誤をしてモヤモヤしていたので、今回は基本となる挙動をしっかりと理解することを目的に調査を行っていきたいと思います!

# onGloballyPositionedとは?
onGloballyPositionedはStableなModifierの拡張関数で、window内で要素の位置が変わるたびに呼び出されるとされています。

ただ場合によっては変更された要素の画面に対する相対位置が変更しても、反応しない場

元記事を表示

【自分用メモ】「intent」は「Activity」間でしか使わない。

【上司から教わったことのメモ】

 「intent」は「Activity」間でしか使わない。

以降は追記あり次第更新。

元記事を表示

Truth 1.2.0で追加されたisWithin().of()の使い方メモ

# 概要

[Truth 1.2.0](https://github.com/google/truth/releases/tag/v1.2.0)で新しく`isWithin().of()`が追加されたので使い方のメモです。

例えば、あるメソッドが戻り値として期待される整数値に非常に近い値を返すかをテストしたい場合、`assertThat`メソッドを使って対象の値を指定し、`isWithin`メソッドで許容範囲を設定し、`of`メソッドで期待値を指定します。

ここで、`actualValue`はテスト対象の値、`tolerance`は許容される差の範囲、`expectedValue`は期待される値を指します。

“`kotlin
assertThat(actualValue).isWithin(tolerance).of(expectedValue)
“`

# 具体例

具体例だとこんな感じです。

“`kotlin
assertThat(20000).isWithin(0).of(20000) // OK 20000±0の範囲に期待される値が入る
assertThat(20

元記事を表示

Flutterでマイナンバーカードを読んでみた

## この記事について
この記事は [SUPER STUDIO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/superstudio) の20日目の記事になります。

## マイナンバーを読んでみたい
会社のアドカレなのに、弊社のプロダクトと関係ないものを作って投稿するのもどうかと思うのですが、マイナンバーカードからマイナンバーを読んでみたいのです。

そう、ほら、あれだ、たとえばいつか転売対策とかでマイナンバーによるユーザー認証が必要になっちゃったりしなかったり、ECカートだってそういう需要があるかもしれないじゃないですか。なんとかしてマイナンバーカードからマイナンバーを読んでみたいのです。

…だって、**男女のマイナンバーを足して素数になるカップルをマッチングするマッチングアプリ**を作ってみたいと思ってしまったからです。

## マイナンバーカードの仕様について
マイナンバーカードのようなICチップを積んでいるICカードは、演算機能を持ったコンピューターのようなもので、単純な読み取りでもきちんとしたプロ

元記事を表示

2023年、書き初め ならぬ アプリ書き出し初め のノリでアプリ作ってみた

## はじめに
こんにちは、@mediaboxesです。
久しぶりにReactNativeのAdvent Calendarに投稿します。

ReactNativeはTypeScriptでiOSとAndroidの両方のアプリを作れるという、エコな開発でサクッとアプリを作って両OSのアプリを作るれるので、新規事業の開発で重宝しています。
最近はマネージメント層として開発から離れていたので、学びのために休日開発をやってみたので総括として投稿します。

## 作ってみた
### なぜ作ったか
業務でReactNativeで開発が多いのですが、長期運用するとバージョンアップで大変苦労してきました。
+ 素のReactNativeをバージョンアップするとネイティブプロジェクトが無限パズル
+ ExpoのManaged workflowでネイティブプロジェクトを考えなくて楽だが、やりたいことが出来ないことがよくある
+ ExpoのBare workflowで結局ネイティブプロジェクトを管理しなければいけない

しかし、Expo SDK 42で発表されたexpo-dev-clientを使うことで、Ma

元記事を表示

Android Graphics Shading Languageって何?

この記事はレコチョク [Advent Calendar 2023](https://qiita.com/advent-calendar/2023/recochoku) の20日目の記事です。

https://qiita.com/advent-calendar/2023/recochoku

# はじめに
レコチョクでAndroidアプリ開発をしている寺島です。

アニメーションと一緒に聴く音楽が好きです。
手書きアニメーション風のMVを観るのが最近のマイブームです。

本記事では、Android Graphics Shading Language(以下、AGSLと略します)について記事を書きます。

Android OSは、年に1度バージョンが新しくなります。それに合わせてAndroidアプリの開発者は、targetSDKを最新にする対応をします。[こちら](https://support.google.com/googleplay/android-developer/answer/11926878?hl=ja)の内容にあるように、アプリをリリースし続けるためにはAPI更新が開発者の

元記事を表示

Compose Multiplatformで作ったQiitaリーダーにさらに機能を追加した

この記事はNTTテクノクロス [Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ntt-tx) シリーズ2の20日目です。

こんにちは、NTTテクノクロスの戸部@etctaroと申します。

普段は社内でモバイルアプリ開発関連の技術支援や社内向けのノウハウ記事執筆、社内研修講師活動、社内コミュニティ活動などを行なっています。

今年はすでに[シリーズ1の2日目の記事](https://qiita.com/etctaro/items/5f142b0661e761756b36)を書いています。
この記事はその続きとなります。

Compose Multiplatformでちょっと気になるあれこれも色々とやりましたので、
ぜひこちらもお楽しみください。

# はじめに
[シリーズ1の2日目の記事](https://qiita.com/etctaro/items/5f142b0661e761756b36)のダイジェスト

– Compose Multiplatformの環境が整ってきたよ。
– いつものQiitaリーダ

元記事を表示

ChatGPTに頼りながらFlutterでメモアプリを自作してみた

僕は普段スマホのメモアプリには[Keep メモ](https://play.google.com/store/apps/details?id=com.google.android.keep&hl=ja&gl=US)を使っています。ただ、普段使わない自分にとって不要な機能もあり、もっとシンプルなメモアプリを使いたいなと思いました。Play Storeで良さげなメモアプリを探しましたが、広告がついていたり、見た目が気に入らなかったり。せっかくなので自分で作ってみることにしました。

### スキル感について

普段の仕事ではWebエンジニアをしており、ReactやNext.jsなどを主に触っています。ネイティブアプリに関してはちんぷんかんぷんな状態で、Flutterについても同じです。ChatGPT先生を頼りまくることになりそうです。

### 作るものを決める

まずどんなメモアプリを作るかを決めます。自分がメモアプリを使うことを想像しながら、とりあえず紙に書いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

現在のAndroid開発ではライフサイクルメソッドのオーバーライドは推奨されてないけど、もっといい方法ないかな話

# 概要

昔は当たり前であった実装方法が現在では、推奨されなくなってたりします。たとえば、`onResume()`などのライフサイクルメソッドでもオーバーライドを現在ではしなくなっています。

[公式](https://developer.android.com/topic/architecture/recommendations?hl=ja#compose_1)には以下のように「アクティビティやフラグメントのライフサイクルメソッドをオーバーライドしない」というのを強く推奨してます。

![スクリーンショット 2023-12-17 2.59.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10494/192be228-54cb-66b0-4ddd-2e4244466322.png)

対応方法は書いてあるのですが、ここで、`callbackFlow`を使って、ライフサイクルも`Flow`として管理すると使いやすいかもね。という話です。

# 公式の対応方法

書いてある通りです。Lifecycle

元記事を表示

kotlinx.serializationでOptionableなPropertyを定義する

ちょっとだけ躓いてしまったので、備忘録を残します。

## OptionableなPropertyってなんのこと?
下記のようなjsonが送られてくる場合を考えます。

“`json
{
“parameter_1”: 123,
“parameter_2”: 456,
“parameter_3”: “sample string”,
“optional_parameter”: “optional string” // ←入ってないこともある
}
“`
状態によって含まれたり、含まれなかったりする
Property(`optional_parameter`)のことを指しています。

「このようなPropetyをKotlinのdata classはどう記述すれば良いか?」
が本記事の内容です。

## 結論
__optionalのパラメータは、デフォルト値を設定する必要があります。__

下記に2つ例を示します。

“` kotlin:例1_optionalがない場合はnullとする場合
import kotlinx.serialization.Seria

元記事を表示

[kotlin][Android]WebViewの「target=blank」が正常に動作しない時の対応

Webviewを使用していると必ず当たる壁「target=blank」問題
これはHTMLでは別タブで開く時に使われるタグなんですがAndroidのWebviewではデフォルト設定では動作しないように設計されています。
どうもセキュリティとかを鑑みてのことのようですが実行しなければ始まりませんよね?
その際の設定方法とかをメモ書きいたします

まずは動作するコードを貼ります

“`
// target=blank時の処理
webView.settings.setSupportMultipleWindows(true)
webView.webChromeClient = object : WebChromeClient() {
override fun onCreateWindow(
view: WebView?,
isDialog: Boolean,
isUserGesture: Boolean,
resultMsg: Message?
): Boolean {
// target=blank時は別ブラウザで実行
val hre

元記事を表示

Androidのプロセス間通信って?BinderProxyってなに??

本記事では、プロセス間通信や、BinderProxyとは何か、そして普段のAndroid開発の中でどのように登場するのかについて話していきます。

## 注意
末尾にも書いたのですが、こちらの記事は自分の浅い理解がが

## 簡単に話すと
BinderProxyとは、Androidのプロセス間通信(IOC)の仕組みの中で重要な要素です。プロセス間通信は、コンピュータの動作において、複数プロセス間でデータをやりとりする仕組みのことです。Androidアプリは1つのプロセスにつき1つアプリケーションを走らせることができます。日記アプリで、何か別の写真アプリを経由してに写真を投稿すると思いますが、この時日記アプリ->写真アプリ->日記アプリと複数のプロセスをまたいだやりとりをしています。この複数プロセスの間のやりとりを、Android OS上で上手くやってくれる子がBinderProxyということです。

## 登場人物
| 名前 | 解説 |
|:-:|:-:|
| **クライアント** | クライアントはサービスやデータを要求している側のプロセスです。冒頭の文章だと日記アプリですね。

元記事を表示

デフォルト動作を理解して使ってますか?

この記事は、株式会社ACCESS Advent Calendar 2023 の19日目の記事です。

私個人としては今年はこれ含めてまだ2個しか記事投稿していないことに気づきましたが、去年一昨年が年1個だったのと比べると2倍に増えたとポジティブに捉えることにします。

# はじめに

多くのツールは、設定やパラメーターでその挙動を制御できるとともに、指定しなかった場合のデフォルト動作が存在します。それを理解せずに使うと、思いもしなかった挙動に直面する危険性があります。

私個人やうちのチームが実際に体験した例を(脚色も交えながら)いくつか挙げることで、デフォルト動作を理解して使うことの大切さをこの年末に改めて再認識する機会にしょうと思います。

# 1) RubyのNFKモジュールで半角カナ変換時に文字化け

## やろうとしたこと: 全角カタカナに変換

Rubyで半角カタカナを全角カタカナに変換したいです。
日本語のコード変換というとNKF、という知識から[ドキュメント](https://docs.ruby-lang.org/ja/latest/class/NKF.html)を見る

元記事を表示

compileSdkVersionとtargetSdkVersionの違い

# はじめに
いつも忘れてしまう。SDKの違いについてメモとして残しておきます。

# targetSdkVersion
以下に影響する

* UIの見た目
* UIの動作のアニメーション

# compileSdkVersion
以下に影響する

* 指定したバージョンまでの機能が使える

## 注意!!
compileSdkVersionで指定したバージョンの機能が使えるけど下位互換を意識する必要がある
以下の表記のやつ

“`java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.L) {
// ここはLollipop(Android 5.0)以降で実行される。
} else {
// こっちはKitKat(Android 4.4)以前。
}
“`

# まとめ
本当によく忘れるので覚えておいて損はないと思う。

元記事を表示

Androidスマホを使ったイーサネットテザリングによるWi-Fi環境構築例

:::note
1人暮らしの賃貸等で回線工事をするのが面倒な人向けに、イーサネットテザリングを使用したWi-Fi環境の構築方法についてまとめてみました。
:::

# イーサネットテザリングとは

スマートフォンに有線LANアダプターを取り付け、Wi-Fiルーター等に直接LANケーブルをつないでテザリングする方法をイーサネットテザリングと言います。

::: note warn
現時点※2023/12/19時点でイーサネットテザリングを使用できるスマートフォンは、Android11以上が搭載されたスマートフォンのみとなっています。
:::

# 必要なもの

– Android11以上のスマートフォン
– 長時間使用するなら、大容量バッテリー搭載機種がおすすめです。
– Rakuten Mobile等のデータ無制限プランで契約できるt通信キャリアで契約すると費用を抑えられます。(この記事で紹介する例では、Rakuten Mobileを使用しています)
– 自宅で使用しているスマホ:**Galaxy S20 Ultra 5G**

https://www.sams

元記事を表示

Android Keystoreを利用したAzure IoTへのセキュアな接続

### はじめに

IoTデバイスとして、さらには他のIoTデバイスの表示/操作器としてAndroidデバイスは手ごろな選択肢となる。
IoTデバイスで用いられるMQTT接続をAndroidデバイスから行ってみたい。
その際、Azure IoTを利用し、TLS相互接続によるセキュアな接続ができないか試した。

### Android Keystoreについて

Android KeyStoreは、Android 4.3(API レベル 18)以降で利用可能となった、Androidデバイス上で暗号鍵を安全に保管するためのシステムである。以下、主な特徴

1. セキュリティの強化: Android KeyStoreは、デバイスのセキュリティハードウェア(存在する場合)を利用してキーを保護します。これにより、キーがデバイス外部に露出するリスクを最小限に抑えます。

2. キーの生成と管理: アプリはKeyStoreを通じて、新しいキーを生成したり、既存のキーを取得したりできます。また、キーの使用方法(例えば、暗号化、署名など)に関する制限を設定することも可能です。

3. アクセスコントロー

元記事を表示

OTHERカテゴリの最新記事