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

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

Material 3で大きく変わったTopAppBarをJetpack Composeで実装してみる

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

Material 3 で TopAppBar のデザインや挙動が変わりました。
Jetpack Compose の Material3 対応版である `androidx.compose.material3` を使用してガイドラインに合わせた実装例をいくつか見ていこうと思います。

※`androidx.compose.material3` は 1.0.0-beta02 時点の内容なので、ライブラリの更新で内容が変わる可能性もあります。

## TopAppBar のパターン

Material 3 では TopAppBar に以下の 4 つのパターンがあります。

– Center-aligned
– Small
– Medium
– Large

それぞれの実装例を見ていきましょう。

### Center-aligned

![Center-aligned top app bar imag

元記事を表示

Jetpack Compose+Coilで角丸の画像を表示する

Jetpack Compose + Coilで画像をダウンロードしてきて表示する場合、ImageにModifier.clipやbackgroundで角丸のshapeを指定してもダウンロード後の画像が角丸にならなかったので、coilのbuilderでtransformationしてあげると角丸の画像を表示できた。
ついでにDensityを使ってdp指定のPxサイズで角丸にしておいた。

“` kotlin
Image(
painter = rememberImagePainter(
data = url,
builder = {
transformations(
with(LocalDensity.current) {
val r = 10.dp.toPx()
RoundedCornersTransformation(
topLeft = r,

元記事を表示

【Android Studio】Gradleでの Jackson の追加方法(Java)

Android Studioを使用した`Jackson`の使用方法について調べたのですが、実装までに四苦八苦したので、メモを残しておきます。

#リポジトリ
`Jackson`が公開されているページです。
ページ内の取得したいバージョンの「Gradle」の部分をコピーします。
jackson-core
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
jackson-databind
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
jackson-annotations
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations

####使用するバージョンの選択
a010b5d5-04f0-c700-22a2-08b424747a4</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>Android</div>
<div class='tag-cloud-link'>Jackson</div>
<div class='tag-cloud-link'>AndroidStudio</div>
<div class='tag-cloud-link'>android開発</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/NagaJun/items/9099e721aeeb7e31e322'>元記事を表示</a></div>
<h3 id=GitHub Actions で .kts ファイルを実行して APK の差分を抽出してみた

この記事は [ゆめみ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/yumemi) の 5 日目の記事です。

## はじめに

みなさんは、Kotlin のスクリプト言語としての機能を使ったことはありますか?

Android アプリの開発で `.kts` という拡張子のファイルを Gradle で使っているよ!という方は、ちょっぴりいるのかなと思います。

以前は、サポート機能がまだまだ少なく、IDEA のコード補完も効かないなどありましたが、最近、どんどん強化・改善がされ、少しずつ使いやすくなってきました。

GitHub Actions に Kotlin がプリインストールされていて、せっかくなので APK の差分を抽出してみました :muscle:

### 成果物

https://github.com/blendthink/android-diff-action

※ GitHub Marketplace へも近日リリース予定です :v:

### 実際の動作

https://github.c

元記事を表示

GitHubのmavenにAndroidのライブラリをリリースしてみる

# はじめに
株式会社ピー・アール・オーのアドベントカレンダー5日目です。

前回は[iOS用のフレームワークをCocoaPodsに公開する](https://qiita.com/pro_rei/items/00283f4e0fa1716456fc)手順を書きました、今回はAndroid用ライブラリをmavenに公開してみます。

今回はGitHubのpackages機能を利用してライブラリをリリースします。

# 事前準備
– [Android Studio](https://qiita.com/pro_rei/items/00283f4e0fa1716456fc)をインストールする
– GitHub上にAndroidライブラリ用のリポジトリを用意する

# maven-publishプラグインを有効する

今回はAndroid Studioが提供するMaven Publish Pluginを利用してライブラリをリリースします。まずはライブラリモジュールの`build.gradle`にmaven-publishを有効します。

“`
plugins {
id ‘maven-

元記事を表示

何故Modifierは最初のデフォルト引数でないといけないのか

Jetpack Composeでコード書いていると、次のような警告を見かけることがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53293/4f117c7f-e050-b9b3-84fc-ee4c3173d6ab.png)
Modifier parameter should be the first optional parameter

Modifierは最初のデフォルト引数であるべき、という話ですね。
例えば次のようなコードを書いた場合に上記の警告が出ます。

“`kotlin
@Composable
fun SampleComposable(
param: Boolean,
optionalParam: String = “First optional param”,
modifier: Modifier = Modifier,
)
“`

そしてこの方針はModifierのドキュメントにも書かれています。

https://developer.and

元記事を表示

【Android】 Jetpack Composeでドラッグ&ドロップの並び替えを実現する 〜ライブラリに頼って〜

この記事は、[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory)の **5日目** の記事です。
昨日は [@y-okudera](https://qiita.com/y-okudera) さんの「 [データの暗号化・復号とSwiftでの実装の仕方について改めて調べてみた](https://qiita.com/y-okudera/items/d52d3c1b3fb82176c78a) 」でした!

# ドラッグ&ドロップで並び替えしたい
リスト表示において、アイテムを長押しするとドラッグ&ドロップで並び替えができる、というのは結構あるあるな機能ではないでしょうか?

RecyclerViewでは[ItemTouchHelper](https://developer.android.com/reference/androidx/recyclerview/widget/ItemTouchHelper)を使うことで、ドラッグ&ドロップでの並び替えを実装することができま

元記事を表示

Nexus 6PにLineageOSをインストールする

# はじめに

使わなくなったGoogle Nexus 6Pがあるので、LineageOSをインストールして有効利用する。

# まずは情報収集

最初にチェックするのはみんな大好きxda-developersなのだ。
Huawei Nexus 6P
https://forum.xda-developers.com/c/huawei-nexus-6p.4744/

どのカスタムROMをインストールするか小一時間ほど悩む。
List of custom Android distributions
https://en.wikipedia.org/wiki/List_of_custom_Android_distributions

xda-developersのフォーラムでそれなりに盛り上がっているLineageOSをインストールすることにする。
LineageOS
https://github.com/LineageOS

# 作業の前に

**端末が壊れたり起動しなくなったり爆発したりしても、筆者は一切関知しない。**

Googleの端末は工場出荷時のイメージが公開されているので、う

元記事を表示

【Github Actions】gradle.propertiesの設定方法

## はじめに
Githubで保管しているAPIキーを取得してgradle.propertiesに出力する方法が、
他の人の記事を参考にしてもうまくいかなかったので自分の解決策を紹介します。

全コードはこちらから ↓
https://github.com/kuwabara-hirokazu/facial_expression_championship

## Githubにキーを登録
①Githubのプロジェクトから Settings >> Secrets に遷移
②右上の「New repository secret」を押して作成したいキーと値を登録する

## 最初に記述したyml設定(ビルド失敗)
gradle.propertiesにAPIキーのみを記載した。

“`yaml:check_push.yml
– name:

元記事を表示

Androidのファイルストレージに関する仕様の整理

本年度の株式会社ACCESS Advent Calendar 旗振り役の Soichi Ikebe (@aqua_ix) です。

本記事はAdvent Calendarの4日目の記事になります。(本日12/4は私の24歳の誕生日でもあります?)
今回は”Androidのファイルストレージに関する仕様の整理”というタイトルで記事を投稿します。

# 概要

モバイルアプリにおいてはしばしば画像・動画・音声といったメディアファイルや、ドキュメントファイルを扱う場面が多く存在します。
ことAndroidにおいては、比較的柔軟にファイルを扱うことができるものの、OSバージョンアップの度に大きく仕様変更が入ることが多々あり、開発者泣かせになっている節があります。
本記事においては、そんな複雑化している Android アプリのファイルストレージに関する近年の仕様の変遷と、執筆時点でのベストプラクティスについて記述しています。

# ファイルストレージに関する仕様の変遷

公式ドキュメントの情報を基に、Android 4.4 以降におけるファイルストレージに関する仕様の変遷をまとめました。
(紙

元記事を表示

Gradleの概要

##この記事は
初めてAndroidアプリを作成しようとした時、AndroidStudioにデフォルトであったbuild.gradle。
最初は、なんのことか分からなくても大丈夫とアドバイスを受けたので、無視していました。
今は掘り下げが出来るようになったので、やっていきます。

##Gradleとは
Gradleは、大体のソフトウェアのビルドを自動化するツールです。
ちなみに、OSSです。

###特徴
– 差分更新を行うので、無駄な作業が少なくなります。
– JVM上で動作するので、どのプラットフォームにも対応可能
– Mavenを参考にしているので、Javaプロジェクトを簡単にビルド可能
– いくつかのIDEにもサポートしている

###5つの基本原則
– 汎用的
プラグインを用いて最適化するので、基本的にどのプロジェクトにも組み込めるようになっている。

– タスクのDAGをモデル化する
順番に処理するよ!という意味です。

– 大まかにビルド手順が決まってる
構築 → タスク実行の順序決め ‐> 実行

– 拡張性に富む
カスタムタスクタイプでビルドにさせるバリエーションを

元記事を表示

AndroidでUIへのイベント通知としてSharedFlowとChannelを上手に使い分ける

## 前置き

AndroidでUIへイベントを通知する方法としては最近LiveDataよりもよく[SharedFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow)を使う方法が紹介されていると思います。
Kotlin標準の言語機能で実現できるので今後もデファクトスタンダードになっていくと感じています。
シンプルな例ですが、下記のようなコードを書くことになると思います。

“`kotlin:Activity
class CounterActivity : AppCompatActivity() {
private val counterViewModel = // getViewModel()

override fun onCreate(savedInstanceState: Bundle?) {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {

元記事を表示

Kotlin basicタイプで初回起動時にやらないとビルドエラーになること

# 起きた問題

## One or more issues found when checking AAR metadata values:

こんなエラー文が表示されます。

“`
The minCompileSdk (31) specified in a
dependency’s AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
is greater than this module’s compileSdkVersion (android-30).
Dependency: androidx.core:core-ktx:1.7.0.
AAR metadata file: /***/.gradle/caches/transforms-3/43709c06b605244e4fcdef6e5a127101/transformed/jetified-core-ktx-1.7.0/META-INF/com/android/build/gradle/aar-metadata.properties

元記事を表示

HUAWEI Band 6(スマートウォッチ)でAndroidのLINE着信通知を受け取る方法

:::note info
当方はHUAWEI Band 6(Ver 11.1.2.40)とPixel 4a(Ver 12)の連携の紹介記事です。
:::

# 課題
HUAWEI Band 6でLINEの着信通知を受け取れないこと。
厳密には全く通知を受け取れないわけではなく、コール終了時の不在着信通知が届く。

不在着信通知を見て電話を折り返せば問題ないのかもしれない。
でも不在着信の通知を見るたびに相手の時間を30秒ほど無駄にしてしまったことに罪悪感が残る。(**自分にとって最大の課題はこの罪悪感だった**)

# 結論
標準設定ではHUAWEI Band 6で**LINEの着信通知を受け取ることができない**ので、LINE着信でMacroDroidの通知を発火して**MacroDroidの通知を受け取る。**

ht

元記事を表示

TargetSDK 30対応中にハマったこと

# はじめに
CYBIRDエンジニア Advent Calendar 4日目担当の@chikako_ikedaです。
3日目は@kyorokyoroの[アプリの通信回数を減らすためにやったこと](https://qiita.com/kyorokyoro/private/3d357661613a6cb89d3e)でした。
最近は速い通信規格が出てきてあまり気にならないこともありますが、アプリの通信回数はアプリの操作感が変わるので、「回数を減らす」というのは大事ですよね。

# 概要
2021/11/01からGoogle PlayではTargetSDKをAPI Level 30(Android11)へ対応することが必須となりました。
CYBIRDのアプリでも順次対応を進めているところですが、こんなところでハマったよ、ということで、
APKの署名スキーマv2への対応について紹介しようかと思います。
※以下、「TargetSDKをAPI Level 30(Android11)へ対応」は「TargetSDK30対応」と記載します。

# 目次

1. 発端:出来上がったAPKがインストールでき

元記事を表示

flutterのFriendlyChat(codelabs)をAPI操作にする

flutter勉強のためにcodelabs(https://codelabs.developers.google.com/codelabs/flutter)
をやっていたのですが、こちらで作成するチャットアプリのメッセージが腹持ちだったため、apiで管理することができるようにしました。
サーバー側はbeegoとgormで作成してます。
参考: https://qiita.com/yufuku/items/dff8597e00fc0bdc6864

今回作成したflutterコード: https://github.com/fu-yuta/flutter_friendly_chat/tree/chat_api_access

# 環境
“`shell
$ flutter doctor -v
[✓] Flutter (Channel stable, 2.5.3, on macOS 11.2.3 20D91 darwin-x64, locale ja-JP)
• Flutter version 2.5.3 at /usr/local/flutter
• Upstream re

元記事を表示

アイコン作成等のツールリンク集

たまたまどこかで知り、便利じゃん!と思ってブックマークに入れたは良いが、
本当に必要なときに結局どこにしまったか忘れているので、
個人的にたまに使ったりするツール系のリンクを備忘録としてまとめてみました。

# Android/iOS

– AndroidAssetStudio(各種アイコン作成)

https://romannurik.github.io/AndroidAssetStudio/

– MakeAppIcon(アイコン作成)

https://makeappicon.com/

– resizeappicon(アイコン作成)

https://resizeappicon.com/

– (Android用)BundleToolを使用してaabファイルを実機にインストール

https://apuridasuo.hatenablog.com/entry/2019/09/25/144546

# 画像系

– RemoveBackground(透過画像作成)

https://www.remove.bg/

– MethodDraw(SVGエディタ)

https://

元記事を表示

ZXing-android-embedded QRコードリーダーの、RegisterActivityResultとKotlin対応

スマホで簡易にQRコードリーダーを動かしたいとき、ZXingというのがあります。それを含むパッケージに、https://github.com/journeyapps/zxing-android-embedded というのがあります。この秋に、それがRegisterActivityResult対応し、Integratorとか機能をDeprecateしました。

それを取り込むのにひと手間あったので、ここへ記録。

1.zxing-android-embedded は、Javaコードしか提供していません。Kotlinほしい。Android StudioでそのSampleをコンバートすりゃいいのですが。ネットで調べた限り、まだ誰も載せていないので、以下にKotlinでのスケルトン載せておきます。これだけ。非常にSimple。

2.以前動いていたコードが、もう動かない、原因を調べたところ、ManifestでActivity属性で、android:noHistory=”true” という変更をしたのが邪魔していた。なんでか、理解していない。誰か教えてくれ。

“`Kotlin
import

元記事を表示

【Flutter】バッテリーの充電状態を検知する方法

本記事はFlutter Advent Calendar2021 3日目の記事です。

スマホを使うにあたって、切っても切れない関係にあるのがバッテリーですよね。
今回はFlutterでバッテリーの充電状態を検知する方法を提供するパッケージ、
battery_plusを紹介します。

https://pub.dev/packages/battery_plus

こちらについて日本語での解説記事が見つからないため、
今回紹介しようと考えた次第です。

本記事では、

– buttery_plusパッケージでできること
– 実装サンプル

を記載します。
参考になれば幸いです。

##buttery_plusパッケージでできること##

buttery_plusパッケージでできることは以下の3つです。

– 充電量(%)を取得する
– 充電状態(後述)の変化を検知する
– パワーセーフモードか否かを取得する

やれることはシンプルですね。

一つ一つ解説していきます。
####充電量(%)を取得する####
“batteryLevel“のメソッドで現在の充電量を%で取得します。
このメソ

元記事を表示

【Jetpack Compose】Stateと再Composeの仕組みを検証してみた

この記事は[andfactoryアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/andfactory)の3日目の記事です?

## はじめに

Jetpack Composeを書いていて、Stateを更新すると画面が更新されると思うのですが、その際に再Compose処理が発生します。再Compose処理はドキュメントによると「入力が変化している」部分で発生し、そうでない部分は回避してくれるようです。

ですが、じゃあ具体的にどのように書いたら回避されて、どう書いていたら回避されないのかがいまいち理解できていませんでした。

特に、ViewModelで保持するFlowやLiveDataのObserve場所です。自分は基本的に、ViewModelの値をComposeの上位でobserveして、他の下位Composeはシンプルな値を引数をとるように実装しています。
その場合、ViewModelの値が変わるたびに全体が再Composeされるのか、よしなになってくれるのかがわからなかったので、今回実際にコードを書いて試してみるこ

元記事を表示

OTHERカテゴリの最新記事