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

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

Android Studioでpush通知のアイコンを設定する

Firebase Cloud MessagingからAndroidへPush通知を送った際、アプリがバックグラウンドにある時はカスタムアイコンが表示されませんでした。後から考えてみれば文章をよく読んでなかっただけなのですが、性格上またやらかしそうなので忘備録としてまとめてみました。

##はじめに
push通知でカスタムアイコンを使用するためには、android studioにおいてアイコンを設定する必要があります。何も設定しないと、デフォルトの四角いアイコンが表示されます↓(これはこれでかわいい)。

カスタムアイコンの実装方法は、大まかに
①128×128pxの透過画像(png形式)を用意する
②android studioにおいてその画像を通知用のカスタムアイコンとして設定する
に分けられます。

①については、~~面

元記事を表示

[Flutter]初心者でもできる無限スクロールの実装方法

一覧表示画面で、スクロールすると次々にデータを読み込んでいく、無限スクロールを簡単に作る方法を紹介します。
無限スクロールを作る方法がいろいろあるのですが、初心者の自分でもできたのでこれが一番簡単かと思います。

## データを取得するAPIを準備する
今回はAPI経由でデータを取得し、一覧表示するのでまずAPIを準備します。
今回は、以下のswaggerで記載したtitleのみが一覧で返されるAPIを用意しました。次のデータがあれば、レスポンスのoffsetに次の位置が返り、なければ返りません。

“`yml:sample.yml
openapi: 3.0.0
info:
title: sample
version: ‘1.0’
description: sample
contact:
name: murapon
servers:
– url: ‘http://localhost:31180’
paths:
/list:
get:
operationId: get-list
summary: 一覧取得
de

元記事を表示

[Android]忙しい人のためのアーキテクチャガイド~Domain Layer編~

#はじめに
この記事は、シリーズ作です。

https://qiita.com/reo-androider/items/1ca168e290568a578cd6

https://qiita.com/reo-androider/items/18ec55f35c9a4fee66d3

https://qiita.com/reo-androider/items/8a0b7e9644631f44d19e

今回のDomain Layer編は、元々の分量が少ないです。
スクロール数は元と変わらないかもですが、文字数は 1 / 3 くらいにまで縮められたと思います。
#目次
– Domain Layerとは?
– Domain Layerのメリット
– 他の責務との関係
– 呼び出し
– ライフサイクル
– スレッド周り
– Domain Layerの使われ方

##Domain Layerとは?
https://qiita.com/reo-androider/items/1ca168e290568a578cd6#domain-layer
##Domain Layerのメリット
Domain L

元記事を表示

[Android]忙しい人のためのアーキテクチャガイド~Data Layer編~

#はじめに
この記事は、シリーズ作です。
今回は、概要編で少しだけ触れたData Layerについての項目を要約していきます。

Data Layer編はかなり長いので、要約の意義が出てきますね。
分量を 1 / 3 くらいにすぼめています。

https://qiita.com/reo-androider/items/1ca168e290568a578cd6

https://qiita.com/reo-androider/items/18ec55f35c9a4fee66d3
#目次
– Data Layerとは?
– データの公開
– ビジネスロジックの複雑化
– 信頼できる情報源
– スレッド
– インスタンスのライフサイクル
– 良いビジネルモデル
– いろいろなビジネルロジック
– エラーの公開
– 実例

##Data Layerとは?
概要編にまとめてあります。

https://qiita.com/reo-androider/items/1ca168e290568a578cd6

##データの公開
データやデータ操作の機能を公開する時は

– suspend関数を用いる

元記事を表示

【Android】ObjectAnimatorで遊ぼう

※当記事は表示している画像にラグがあります。お許しください。

ObjectAnimatorを使うとこんなことができました。

Transition.gif

~~某シューティングゲー??~~

今回はObjectAnimatorの基本的なアニメーションをまとめます。

## ObjectAnimator

Viewをアニメートしてくれます。
アニメーション対象のViewをTargetと呼び、具体的にどうアニメーションするかを定義しているのがプロパティです。

代表的なプロパティは以下
– ROTATION:回転
– TRANSLATION:移動
– SCALE:拡大縮小
– ALPHA:透過

ほか、いわゆるセッターゲッターがある各属性(backGroudColorのような)なら、大体これでアニメーション化でき

元記事を表示

【Android】独自のViewを描く

# Androidで独自のViewを描く
(当記事はJetPack Compose は使ってません)
円と半円を組み合わせて以下を作ります。

陰陽玉.png

## 手順
1. Viewを継承したカスタムクラスを作成
2. onDraw(canvas) をオーバーロード
3. canvasを組み合わせ、欲しいViewを描く ←メイン
4. ( Layoutファイルに1を配置 )

### 1 Viewを継承したカスタムクラスを作成

“`kotlin.kt
class Onmyoudama @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(c

元記事を表示

[Android] 古いバージョンのRoomを使用した時に出るビルドエラーを解消する(M1 Mac)

## はじめに

M1 MacでAndroid開発をする際、ライブラリのバージョンが古かったりすると問題が起こるケースがあります。

ここでは、その内のひとつの内容・解決方法をご紹介します。

私が問題に遭遇した時は日本語での情報が少なく、解決に苦労したということもあり、ここに残しておこうと思います。

## 開発環境

PC : M1 MacBook Air(2020) 16GB OS:Big Sur
AndroidStudio : ArcticFox arm64 (2020.3.1 patch3)

Room 2.2.5

## なにが起きたか

Androidアプリ開発で使用される、ライブラリ`Room`のビルドが出来ない

#### ビルド時のエラーメッセージ

“`
Execution failed for task ‘:app:kaptDevelopmentDebugKotlin’.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> ja

元記事を表示

【Android】テキストの長さに応じて高さ拡張+テキストスクロール

# 概要

テキストの長さに応じてレイアウト変更するタイトル付きテキストのビューについて説明。

– テキストの長さが画面高さより短い場合、ビューの幅を変更。
– テキストの長さが画面高さより長い場合、テキスト部分をスクロール。タイトル部分はスクロールしない。

| 短い | 長い(ビュー高さ拡張) | もっと長い(テキストのみスクロール) |
| —- | —- | —- |
| ![Screenshot_1643167486.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/9efe6448-29a0-6419-171d-496d76429baf.png) | ![Screenshot_1643167225.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/8c2e6422-1eca-b5fc-e17b-75a56ef31ddb.png) | ![Screensh

元記事を表示

【Android】バックグラウンド処理をServiceからWorkManagerに移行してみた

# はじめに

皆さん、ごきげんよう!れぶです!
今回の記事は、バックグラウンド処理の実装についてです。

Android 8.0(Oreo)以降、バックグラウンド処理に対する厳しめな制限が導入されました。その結果、Service(特にバックグラウンドサービス)を使った実装をすると、動作が安定しません。詳しくは、[こちら](https://developer.android.com/about/versions/oreo/background?hl=ja#services)を参考にしてみてください。

なので、バックグラウンド処理を行う際には、Android Jetpack系の[WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager?hl=ja)を使うことをGoogleは推奨しています。このWorkManagerは、電池寿命の向上・互換性の高さ・様々な条件や制約を付与できるなど、メリットが沢山あります。API level 14から機能します。

そのような背景から、今回は`S

元記事を表示

FlutterでFirebaseを使ってみる〜Firebase導入編(Android)〜

## 投稿の経緯
FlutterのキャッチアップでFirebaseと連携してFirestoreを使うサンプルプロジェクトを立ち上げました。今回はAndroidアプリにFirebaseを導入してエミュレーターでビルドするところまでを書こうと思います。

iOSアプリにFirebaseを導入する記事は↓コチラ↓

https://qiita.com/nkekisasa222/items/ebca2a89319fd0dcfe72

## 環境
Flutter:2.8.1
MacOS:12.1

## サンプルプロジェクト
GitHubにコードPushしています。気になる方はご覧ください。
![QR_925113.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/f774b418-6fc2-a814-c742-ebf8dde02847.png)

## Firebaseの導入
公式情報を参考にして進めていきます。

https://firebase.google.com/docs/flutter/se

元記事を表示

[Flutter] ビルド時のエラーの解決策 ( No matching client found for package name)

flutterで、androidのビルド時に下記エラーがでて、詰まったので共有です。

## エラー文
“`terminal
Execution failed for task ‘:app:processDebugGoogleServices’.
> No matching client found for package name ‘com.xx.xx’
“`

## 解決策
google-services.jsonのpackage_nameとbuild.gradleのapplicationIdの2つを一致させる必要がありました。

“` android/app/google-services.json
“client”: [
{
“client_info”: {
“mobilesdk_app_id”: “xxxxxxxxxxx”,
“android_client_info”: {
“package_name”: “com.xx.xx” //ここ
}
},
“`

元記事を表示

vdexファイルのデコンパイル

カスタムアンドロイドにてよくわからないAPIを調べるとき用。
要するに以下に無い場合は端末内にあるはず。という前提で
https://cs.android.com/

あらかじめstringsとgrepで当たりをつけておくと楽

# 流れ
vdex -> cdex -> dex -> jar(classファイル) -> jar(javaファイル) -> jar解凍

# vdex -> cdex

vdexExtractorを使う。
https://github.com/anestisb/vdexExtractor

READMEにはdependencyとかdisassembleとか書いてあるけど
とりあえずiとoを指定してやればcdexファイルが出来る
ヘルプに出てくる=(イコール)は不要

# cdex -> dex
cdexはcompact dexとか言うらしい。
https://github.com/anestisb/vdexExtractor/issues/23
の compact_dex_converter_linux.zip を落として解凍すればそのまま使える。
wind

元記事を表示

Androidアプリ開発におけるローカルデータベース〜Room覚書

## はじめに

1年以上前(2021年1月)に下記の記事を書きました。

https://qiita.com/yoshiyuki_kono/items/05496b26e1dc4eb99ddb

Realm、Couchbase Liteからはじめ、色々とマイナーなものを取り上げたものの、影響力に鑑みて、Android Roomを無視するわけには〜OSレベルの汎用性は別として〜いかないと考え、調査を始めた記録を覚書として残します。

上記記事を執筆したモチベーションは、業界の技術動向を理解した上で、Couchbase Lite/Mobileを、その中に位置付けることでした。Couchbase Mobileについては、以下参照ください。

https://qiita.com/yoshiyuki_kono/items/6a5bbad1b02196a25417

https://techbookfest.org/product/5074954942939136?productVariantID=5042865933647872

Couchbase Mobileは、NoSQL組み込みデータベ

元記事を表示

notifyDataSetChanged() に警告が出るようになったので ListAdapter に置き換える

# 背景
いつからかは正確にはわからないですが、 `RecyclerView.Adapter.notifyDataSetChanged()` をコールしている箇所に
Android Studio で警告が表示されるようになりました。

## 警告の内容

“`kotlin
adapter?.notifyDataSetChanged()
“`

> It will always be more efficient to use more specific change events if you can.
> Rely on notifyDataSetChanged as a last resort.

データに変更があった場合はより軽量な処理(例: notifyItemChanged )を使ってくださいということです。

## Workaround
以下のように `notifyItemRangeRemoved` を使って修正すれば警告は回避できます。

“`kotlin
val preCount = adapter?.itemCount ?: 0
// ここに全消し処理が入る
a

元記事を表示

【Flutter】Shimmerを利用してUXの高いローディング処理を実現

インドネシアの[PT.AQ Business Consulting Indonesia](https://aqi.co.id/)でFlutterのエンジニア兼アドバイザーをしております菊池と申します。

Zennで本を出版しております[flutter chips](https://zenn.dev/tetsukick/books/06ee607e30e243)(30,000字程度)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/5183aafc-d1d7-534f-f618-031f10790fdc.png)

## Shimmerとは
データの読み込み中であることをユーザーに伝える方法の一つとして、読み込み中のコンテンツの形状に近似したUIの上に、グレー等の色でローディング状態を表現するアニメーションです。

以下、[Flutter公式](https://docs.flutter.dev/cookbook/effects/shimmer-loading)から参照。
![]

元記事を表示

[Android]忙しい人のためのアーキテクチャガイド~UI Layer編~

#はじめに

https://qiita.com/reo-androider/items/1ca168e290568a578cd6

こちらの続きです。
前回は、UI Layerを責務の分離において「表示」を担当すると簡略化して表現しましたが、今回はそれに関して詳しく見ていきます。

###対象
– 忙しくてアーキテクチャガイドを読んでいる暇などない人
– Androidにおいて、推奨されるアーキテクチャを知りたい方
– アーキテクチャガイドを読んだけども、何を言っているのか分からなかった人

#目次
内容は次の4つです。

###・UI状態の定義
###・データフローについて
###・データの監視
###・データの更新

#UIレイヤーでやること(手順)
ここでは、ニュース記事をAPIから取得するアプリを例に出しています。

##UI状態の定義
UIが保持するデータやロジック+UIコンポーネントでUIが構成されていることを示しています。

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

元記事を表示

MotionLayoutの例を試してみる

MotionLayoutを触ったことがないので、今後のために試しておこうと思います。

# 公式リファレンス
https://developer.android.com/training/constraint-layout/motionlayout/examples?hl=ja

https://developer.android.com/training/constraint-layout/motionlayout/ref?hl=ja

今回は基本的なモーションを試していきます。

#基本的なモーション

公式では横の動きをしているので縦の動きをしてみようと思います。

gifなので動きカクカクに見えますが。。。完成はこんな感じです。
![基本的なアニメーション.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/bc6ef09e-e3ed-eeec-468b-3164127524c8.gif)

まずはMotionLayoutをActivityのレイアウトに設定します。

“`acti

元記事を表示

ActivityからFragmentへの遷移

#初めに
MainActivityクラス、Fragmentクラス、activity_main.xml、fragment_layout.xml を用意します

#実際にコードで書いていきます
Activity から Fragment への遷移を
MainActivityの onCreate内に コードで書いていきます

“`
val fragment = Fragment()
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.add(R.id.container, Fragment)
fragmentTransaction.commit()
“`

上から1行ずつ説明していきます

1行目 

“`val fragment = Fragment()“`

変数fragment の 宣言をします
その変数fragment は 作っておいた Fragment になります

2行目  
“`val fragmentTransaction = sup

元記事を表示

Guide to app architectureからプラクティスを拾うメモ ドメインレイヤー編

https://qiita.com/takahirom/items/e54f162f188d7de9c1d0

の続きです。

https://developer.android.com/jetpack/guide/domain-layer?hl=en

## 用語整理

(通常想像するドメインだと例えばニュースアプリではArticleクラスとかが入っているやつを想像すると思うんですが、ここではUseCaseが入っているっぽいです)

ドメインレイヤーとは?

> The domain layer is an optional layer that sits between the UI layer and the data layer.

UIとデータレイヤーの間にある任意のレイヤー。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388/a23309f4-4aef-747f-898a-20ad519d0e72.png)
https://developer.android.com

元記事を表示

React Native Expo利用時にAndroidエミュレータでエラーになるときの対処法

React NativeのExpoでAndroidエミュレータを開いたときエラーが出たため、その解決方法を備忘録として残しておきます。

## 環境
MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) OS Monterey12.1
expo –version:5.0.3
端末:Pixel_2_API_30:

# エラーが起こったエミュレータ起動手順
①ターミナルで以下のコマンドでExpoの管理画面をブラウザ表示

“`
expo start
“`

②サイドメニューのRun on Android /device/emulatorからエミュレータを起動する

![スクリーンショット 2022-01-23 17.00.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360790/6e3008cd-60aa-9d01-fec9-03aa788dd019.png)

# エラー内容

上記の方法でExpoでアプリを開くと以下のエラーになってし

元記事を表示

OTHERカテゴリの最新記事