Android関連のことを調べてみた2022年12月19日

Android関連のことを調べてみた2022年12月19日
目次

Androidアプリのパケットを(ヘッダだけ)眺めてみる

PCを使用している場合、ブラウザのインスペクタを開くことで通信している内容・タイミングなんかを眺めることができます。
じゃあモバイル端末の場合はどうなんだということを思ったので、今回はAndroidアプリの通信を眺めてみる話をします。

※文中には適宜ふわふわした表現が含まれます。自信がない部分については可能な限りより詳しいドキュメントへの参照を貼らせていただきます。誤りなどあれば指摘いただけると幸いです。

# パケットキャプチャの導入

モバイル端末の通信内容を取得するためにパケットキャプチャを導入します。

>パケットキャプチャー
通信路を流れるパケットを取得するためのツールの機能や、その行為をする者。ツールとしての総称は「スニファー」という。
様々な目的に使われるが、プロトコルの情報を整形し通信状態を解析するツールを「プロトコルアナライザー」という。
https://www.wdic.org/w/TECH/パケットキャプチャー

要するに通信内容を取得するツールです。しかし通信内容といっても、例えばメールで送信されたテキストがそのまま読み取れたりといったことは(基本的に)出来ま

元記事を表示

[Android] Bitmapのrecycle()は何をしているのか

Bitmapの処理を行なっているライブラリのコードを読むと、Bitmapの`recycle()`メソッドが呼ばれていることに気づく。そこで、Bitmapのrecycle()の挙動について調べたので、以下にまとめる。

### AndroidバージョンごとのBitmapのメモリ管理の違い

前提知識として、以下の公式ドキュメントによれば、Bitmapのメモリ管理の方法は、Androidのバージョンによって異なる。

https://developer.android.com/topic/performance/graphics/manage-memory

まず、Android 2.2 (API level 8) 以下では、GCが発生する際に、アプリのスレッドが停止される。一方、Android 2.3でconcurrent GCが追加され、Bitmapへの参照が無くなった直後に、メモリが回収されるようになった。

また、Android 2.3.3 (API level 10) 以下では、Bitmapのピクセルデータはネイティブメモリに保存される一方で、Bitmap自体はDalvik (J

元記事を表示

Jetpack ComposeのSide-Effectsまとめ

本記事は ZOZO Advent Calendar 2022 カレンダー Vol.2 の 18 日目の記事です。
明日の記事は@sassywindの **「Slickにおいてcreated_at, updated_atを意識しないようにする」** です。

Jetpack Composeを用いて開発していく中で、かなりの頻度で使用するside-efffect APIですが、どれを使用するか迷うことはありませんか? 筆者は毎回迷うため、それらを明確にする為にも本記事ではユースケースや具体例を交えてメモがてら整理していこうと思います。

またこの記事で使用しているIDEとdependenciesのバージョンはそれぞれ下記になります。

**—使用しているバージョン:—**
`Android Studio:` “Android Studio Electric Eel | 2022.1.1 Canary 10”
`Jetpack Compose:` “1.2.0”
`Kotlin:` “1.7.10”

# Codeサンプル
本記事で紹介しているside-effectsのサンプルは、

元記事を表示

【Android】ViewPager2で無限スクロールを実現させてみたら意外と簡単だった

# はじめに
皆さん、ごきげんよう!れぶです!

今回の記事では、`ViewPager2`×`FragmentStateAdapter`で無限ループさせる方法をまとめます。

`Fragment`間の無限スクロール動作を実現したい方に特に参考になればと思います。それでは、参りましょう!!

# 開発環境
* MacBook Air
* Android Studio Dolphin | 2021.3.1
* Kotlin
* compileSdkVersion 33
* targetSdkVersion 33
* minSdkVersion 21

# 動作イメージ
今回は以下のように、縦方向のスクロールで3ページ分を無限ループします。

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2456250/078d0348-92f0-0ff5-4a13-aa860ec2b58f.gif)

# 考え方

結論、**実際のページに偽の2ページ分を追加する**やり方です。

元記事を表示

RecyclerViewにドラッグドロップで並べ替え機能を追加する

あんまり使うことがなくて、使おうとする度にどうやるんだっけ?と調べるやつ

RecyclerViewはその内部でドラッグドロップで並べ替えをする機能を実装するのは非常に簡単です。

まずは、シンプルなリストを作ってみましょう

“`kotlin
private class ItemViewHolder(val binding: ItemViewBinding) : ViewHolder(binding.root)
private class ItemAdapter(context: Context) :
ListAdapter(object : DiffUtil.ItemCallback() {
override fun areItemsTheSame(oldItem: Int, newItem: Int): Boolean = oldItem == newItem
override fun areContentsTheSame(oldItem: Int, newItem: Int): Boo

元記事を表示

AndroidStudio使われていないコードを探す方法

複数人で開発をしていたり、プロジェクトを引き継ぎ開発したりしていて、不要なコードを見かけたりすることがあると思います。
その不要なコード一覧を表示させる方法があるのでやってみようと思います。
(警告系のコードも表示されます。)

# 方法
AndroidSutudioを開き、上部のCodeをクリックします。
![スクリーンショット 2022-12-18 19.12.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/8d3e1fdc-0131-1492-86c2-853c6b44832d.png)

そして、Inspect Codeをクリックします!

![スクリーンショット 2022-12-18 19.13.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/04cadbfa-9590-a079-8afc-686c0470ca0d.png)

Custom scopeで検索したい範囲を

元記事を表示

Android DevelopersのGuide to app architectureの更新で気になったところを拾うメモ

更新は色々あったようなんですが、基本的なところはそこまで更新されていなそうに見えました。個人的に面白かったところを太字にしておきます。本当にキャッチアップ用のメモです。

# 概要ページ

https://developer.android.com/topic/architecture

このSingle source of truthとUnidirectional Data Flowについてのまとめ的な部分が加わりました。この考え方自体を詳しく書いているところが今まではComposeのところしかなかったような気がするのでいいですね。

## Single source of truth

https://developer.android.com/topic/architecture#single-source-of-truth

> When a new data type is defined in your app, you should assign a Single Source of Truth (SSOT) to it.

新しいデータ型を追加したらそれをSSOTに

元記事を表示

【Android】M1 Macでadbコマンドのパスを通してapkファイルをAndroid端末へインストールする方法

# 前提
– Android studioセットアップ済み
# 環境
– Mac M1 OS Monterey12.6
– Android12(実機)
– Android Studio Chipmunk | 2021.2.1 Patch 2

# 「Android SDK Location」に表示されるパスを確認
Android studioの環境設定(Preferences)`command + ,`を開き、 System Settingsを開いてAndroid SDKで**Android SDK Location**を確認する。
デフォルトだと下記のようになっている。
“`
/Users/ユーザ名/Library/Android/sdk
“`
![スクリーンショット 2022-12-18 15.12.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604036/2ff51c90-9b03-bd88-d083-777ba0a6bb1f.png)

# Macのデフォルトのシェル環境が「zsh

元記事を表示

一年で3つのハッカソンに参加してみての感想と反省

こんにちは、atomicです。この記事は「[学生Androider Advent Calendar 2022](https://qiita.com/advent-calendar/2022/androider_student)」の18日目の記事です。
今日12/18で、Android開発に触れてからちょうど1年ほど経過しました。
絶賛ハッカソン参加中で2徹目の状態の私が、これを機にこの1年を振り返ってみて感想と反省を書こうと思います。

この記事を通して、ハッカソンに参加してみたいけど迷ってる人や、ハッカソンって意味あるの?って思っている人たちにハッカソンの魅力を伝えられたらと思います。

また、ハッカソン経験者の方にも私の反省で何か参考にできるものがあれば嬉しいなと思っております。

# 目次
– ハッカソンとは
– 私が参加したハッカソンについて
– 反省点・やってよかったことなど

# ハッカソンとは
本題に入る前に、ハッカソンという単語を初めて聞いた人もいるかもしれないので、簡単に説明しておきたいと思います。

ハッカソンとはハック(Hack)とマラソン(Marathon)

元記事を表示

Android StudioのLogcatにおける新しいKey-Value検索

## 概要

2022年9月15日にStable channelとなったAndroid Studio Dolphinからは、Logcatの機能が刷新されました。いくつか新しくなった機能がありますが、その中でもログの検索がKey-Value方式になったことが最も大きな変更点ではないでしょうか。

ところが、以下の公式ドキュメントには代表的な使い方しか書かれておらず、私は最初かなり戸惑いました。そこで改めてKey-Value検索で出来ることを整理し、まとめてみました。

[Android Studio Dolphin : 新しいLogcat](https://developer.android.com/studio/releases?hl=ja#logcat)
![スクリーンショット 2022-12-16 19.46.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281445/0a29981b-ab29-45b7-4d9b-575a165858ac.png)

## 使用可能なKey

ドキュメントに

元記事を表示

JUCEを使った自作Androidアプリの開発から公開まで

前略 「KBass」というAndroidアプリを作成しました。

(音がでます)

某ベースシーケンサーのようなベースラインを鳴らすことができるアプリです。

このアプリは実は

**JUCEで作成したものに広告(Admob)を挿入しています。**

公開されてダウンロード数が増えれば広告収益が見込めるようになっています。

これまでVSTなどのオーディオ系ソフトウェアを自作したとき、それでお小遣いを稼ぐには「BOOTHやgumroad、shopifyなどでデジタル販売する」という手段がほとんどだったと思います。

しかしながら、無料でも素晴らしいVSTやDAW、音声Webサービスがあふれている昨今、個人開発のVST等にお金を払ってもらうのはなかなか大変なことです。

そんななか「無料のスマホアプリとして公開し、広告を挿入する」という選択肢を実例として提示できるかもしれません。これをきっかけに収益を得るまで

元記事を表示

個人デバイスと会社デバイス向けにBoxモバイルアプリのポリシーを分ける

Boxをモバイルデバイスから利用する際、
**「同じユーザーだけど個人デバイス(BYOD)からアクセスした場合はプレビューだけ、会社デバイスからは編集もできる」**
といった制御をMicrosoft IntuneのMAM (アプリ保護ポリシー)と組み合わせて実現する設定例を紹介します。

# Boxモバイルアプリの種類
Boxのモバイルアプリは大きく分けて2種類あります。

* 標準のモバイルアプリ(以下、”標準アプリ”)
* Box for EMM

Box for EMMをMicrosoft IntuneなどのMDM/EMMソリューションから配信することで、**「アクセス元のデバイス制限 (例:会社デバイスからのみBoxにアクセスさせる)」** や、**「アクセス先のBoxテナント制限 (例:個人用Boxアカウントにモバイルアプリから接続させない)」** することが可能となります。標準アプリはBYODなど個人デバイスに、Box for EMMはMDM/EMMで管理された会社デバイスにインストールされて利用されます。Box for EMMについては以下ドキュメントをご参照ください。

元記事を表示

Android App Linksを開発環境で動作検証する方法

### 本記事の概要

Android App Linksとは、HTTP(S)をスキーマとするURLをクリックした際に、対応するAndroidアプリをシームレスに (どのアプリで開くかをダイアログで選択する必要なく) 立ち上げることを可能にする手法である。

https://developer.android.com/training/app-links#android-app-links

App Linksの導入方法に関しては、公式ドキュメントに詳しく書かれている。一方で、開発環境でApp Linksの動作確認を行う方法は明記されていない、かつやや煩雑である。

そこで本記事では、App Linksを開発環境で動作検証する際に、私が使用した方法を紹介する。大まかには以下の5ステップの作業が必要となる。

1. ローカルでのビルド時に使用される証明書のSHA256 fingerprintを入手する。
2. 上記のfingerprintを使用し、ローカル用のassetlinks.jsonを作成する。
3. Node.js (Express) 製のサーバーとngrokを使用し、ローカル

元記事を表示

JaCoCoカバレッジレポートをPRにコメントしてくれる機能が欲しい!(Codecov使えない人向け)

# はじめに
皆さんはテストカバレッジとってますか?Codecovはとても便利でしたよね!
ですが今はセキュリティ的に使えないところも多いのではないでしょうか?自分が探した限りでは代替になりえそうなものがなかなか無く[^1]、テストカバレッジを意識したレビューがし辛い状況が続いていました。
そんな状況を打開すべく、今回は外部サービスに頼らずにカバレッジ結果をPRにコメントしてくれる設定を試してみたいと思います。
[^1]: GitLabのテストカバレッジ機能は便利そうでしたが今回はGitHubで使えるものを探しました。

完成イメージは↓こんな感じ

# 1. JaCoCoの設定
※ JaCoCo設定済みの方はここは飛ばして2. GitHub Actions

元記事を表示

画像からアニメーションを作成してJetpackComposeで表示させてみる

任意の画像にアニメーションをつけてアプリ上で動かしてみたいな〜って思ったことが皆さんも一度はあると思います。(ローディング画面とか)

この記事では画像を選ぶところから実際にAndroid上で表示させるところまでをまとめたものになります。

## 画像選択
今回は、シンプルで豊富なフリーイラスト素材サイトである「[unDraw](https://undraw.co)」を使って素材を探していきます。

https://undraw.co/illustration

ダウンロード形式は`.svg`を指定しましょう。

## アニメーションをつける
「[Haiku](https://www.haikuanimator.com/)」を使ってアニメーションを作成していきます。
このソフトは2021年にオープンソース化されているみたいです。

保存した`.svg`ファイルをインポートして位置や大きさなどを調整します。
しかし、画像を追加してマウスで位置を調整するとどうしても縦と横の倍率が変わってしまいます。
![スクリーンショット 2022-12-17 18.46.02.png](https://

元記事を表示

Ubuntu 22.04 にElixirDesktopの開発環境を作成しよう

↓こちらをUbuntuで動かす方法を記述します

https://github.com/elixir-desktop/android-example-app

# 前提事項

↓こちらのElixirのインストールまで終わっている前提です

https://qiita.com/t-yamanashi/items/9cb46beed0506edf26c6

理想は実機、実機でないVM等での場合はか必ずネットワークはNATでなくてブリッジ等で接続してください
AndroidにアプリをWifi経由で転送する場合は同じネットワークアドレスでないと転送できませんでした

KVM(VM)でブリッジの設定方法はこちらです

https://qiita.com/t-yamanashi/items/b052a46863c8694a8143

他のVMでもブリッジまたは、外部接続の表記の設定があると思います

KVMで動かす時はKVMでメモリは16GB割当ないとエミュレータが起動しませんでした
# インストールをはじめましょう
「OS(Ubuntu 22.04)のインストールから初める仕事用Elixir開発

元記事を表示

Android+kotlinでPOIを使ってExcelのデータを読み取る

# AndroidでExcelのデータを読み取る
JavaでExcelやWord等のOfficeのフォーマットを扱うライブラリには[POI](https://poi.apache.org/)があります。Android+kotlinでも同様にPOIが使えます

# 何に使うの?使いみちは?
何で、今更AndroidでPOIを使ってExcelを読み込む必要がある?と思うかもしれません。google spredsheetあるんじゃない?と思うかもしれません。
Androidには色々なデバイスが付いていますが、そのデバイスがエミュレータには付いていない場合があります。Android端末実機ではなくて、エミュレータで試験する場合、そのデバイスの部分をMock化して、そのでデバイスがプロクラムに渡すデータを、デバックデータとしてExcelで定義するのに使えます。

今、私が開発しているアプリは専用のバーコードカメラの付いたAndroid端末で、バーコードを読み取るアプリを開発しています。このバーコードカメラはエミュレータにはありません。そうなると、エミュレータではデバックどころか全く動かすことがで

元記事を表示

Jetpack Composeでスタバアプリのようなスティッキーヘッダーを実装したい

# きっかけ

スタバのアプリのホーム画面をスクロールした時に、ぬるぬるっと動いて固定されるスティッキヘッダーを見て感動したので、これをJetpack Composeで表現できないかなと思い立ちました。

実際に書いてみて、それっぽいのができたので将来の自分への忘備録として残しておこうと思います。

# TL;DR

最終的なコード全体を確認したい場合は、次のリポジトリを参照してください。

https://github.com/takagimeow/sticky-header-sample

# LazyColumnとstickyHeader

スクロールしたときに、一番上に到達したらそのまま画面外にはみ出るのではなく、一番上で固定されるようなスティッキヘッダーを実装したい場合は、`LazyListScope`の`stickyHeader()`を使います。

https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyListScope#stickyHeader(kotlin.

元記事を表示

flutter_launcher_iconsでandroidとiosのアプリアイコンを登録する

# flutterパッケージ
最近flutterを使っており、なかなか使い勝手が良いと思えてきました。flutterはいろんなパッケージを利用して機能拡張できますが、中でも便利だなと思ったパッケージについて、備忘も兼ねてまとめました。
ちなみに、パッケージとプラグインの違いがわかってなかったのですが、flutterでのパッケージとは「pubspecファイルを含むディレクトリのこと」で、プラグインとはパッケージの一種で「プラットフォームで固有の機能をFlutterアプリに提供するようなパッケージのこと」らしいです。知らずにいると恥ずかしい思いをしそうなのでメモっておきます。

[Flutter/Dart]パッケージ(Package)とプラグイン(Plugin)の違いとは

## パッケージを使ってアプリアイコンを登録
開発を終えアプリをリリースする段階になると、アプリアイコンを用意すると思います。従来の開発環境だと画素数ごとにアイコンを用意したり、osごとに対応したアイコンを用意したりと、なかなか手間がかかる作業だったと記憶してます。
ですが、flutter_launc

元記事を表示

スマートウォッチをリマインダ代わりにバイブレーションさせる:その2

前回、スマートウォッチをリマインダ代わりにバイブレーションさせました。([スマートウォッチをリマインダ代わりにバイブレーションさせる](https://qiita.com/poruruba/items/f172dd99cf497761ce18))
その際に、Webページから通知できるようにするため、WebAPIを用意しました。
今回はこれを利用して、複数のスマホの通知を集約します。

そもそも、スマートウォッチが何の関係もない別のアプリの通知を受信できることを不思議に思われるかもしれません。
これは、Androidの権限の設定により、Androidスマホに来たすべての通知をハンドリングできるように権限が与えられているためです。言われてみれば、確かにそうでないと例えばLINE通知を関係のないスマートウォッチに表示させることはできないですね。

今回は、別のスマホで受けた通知を普段持ち歩いているスマホに通知するようにします。
こうすると、スマホの複数持ちをしていても、1台のスマホに通知が集約され、通知が来たことに気づくことができます。

別の場所から通知することは、前回の投稿で実現できてい

元記事を表示

OTHERカテゴリの最新記事