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

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

Composeを使っているプロジェクトのbuildSrcにAGPの依存を追加するとビルドがコケる件

## 問題

Composeを使っているプロジェクトで、LibraryExtensionなどを使うため`buildSrc/build.gradle.kts`にAGPの依存を追加すると、

`org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during IR lowering`

↑これが出てビルドがコケる。

### 環境

Kotlin: 1.6.10
AGP: 7.1.2
Jetpack Compose: 1.1.0

## 解決方法

`implementation(kotlin(“gradle-plugin:${kotlin_version}”))`をdependenciesに追加する。

“`buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
}

repositories {
mavenCentral()
google()
}

dependencies {
imple

元記事を表示

Androidの双方向データバインディングで`cannot be inverted, so it cannot be used in a two-way binding`を解決する

# はじめに
最近、Jetpack Composeばっかりやっていたのですが、久しぶりにxmlをやって思い出そうということで復習がてら勉強していたのですが、そこで双方向データバインディングをやろうとした時に、`cannot be inverted, so it cannot be used in a two-way binding`このエラーで少しだけ時間がかかったので、今回はこれを解決してみます。

# 原因
原因はシンプルでした。
僕は、今まで単方向しか書いたことがなかったのでViewModelで以下のような書き方をしていました。

“`kotlin
private val _username = MutableLiveData()
val username: LiveData = _username

private val _password = MutableLiveData()
val password: LiveData = _password
“`

しかしこれで双方向をやろうとすると、、、、、

元記事を表示

クラッシュした際にすぐログが消えてしまう場合の対処法

# はじめに
アプリを作っていると必ず一度はクラッシュさせてしまいますよね。
そんな時にログを見ようとして、消えてしまう、、、少しイラッとさせられてしまう事象かと思いますが、そんな時の対処法を忘れないよう残しておこうと思います。

# 対処法
対処法としては非常に簡単です。
logcatタブを開いて右上にある以下のスピナーを**Show only selected application**から**No Filters**に変更することで、消えてしまったログを確認することが可能です。

![スクリーンショット 2022-03-01 18.29.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/986401e5-b254-e4a7-4bca-a4436a6cddf7.png)

ただし注意点として、名前の通りフィルター無しの状態でログが流れてくるので、ログの量が膨大になります。
クラッシュした際に確認する場合のみ使用することをお勧めします。

# さいごに
この設定知っている方も多いかもし

元記事を表示

Flutterでダークモード時に画像を切り替える【Dart】

Xcode/AndroidStudioでそれぞれ開発するときは、ライトモード用とダークモード用の画像を用意しておくと勝手に切り替えてくれる機能がありますが、Flutterではそれを使うことができないようです。

以下のようにして対応します。

“`.dart
Image.asset(
Theme.of(context).brightness == Brightness.dark
? ‘assets/images/image_dark.png’
: ‘assets/images/image_light.png’,
),
“`

`(bool変数) ? (trueのときの処理) : (falseのときの処理)`の構文を利用して、
ダークモード(Theme.of(context).brightness == Brightness.dark)のときは、image_dark.png、
ライトモード(Theme.of(context).brightness == Brightness.light)のときはimage_light.png
を表示させます。

[Twitte

元記事を表示

Jetpack ComposeでMaterial

# はじめに

こんにちは。Anroidエンジニア歴約二年のgottieです。
業務ではAndroid Classic Viewを触れていますが、個人ではせっせとJetpack Composeで遊んでいます。
今回は`Jetpack Compose`でのMaterial Colorの決め方を紹介します。

Android Classic Viewでもそうですが、いつも適当に色を決めていって、Darkモードなどを考慮すると収集がつかなくなっていたいたのですが`JetPack Compose`はMaterial Colorとの親和性が高く、簡単にプロダクトに取り込むことができます。

# 方法

1.色を定義

– アプリで使用するメインの色(primary)として一色決めます。色の濃さは中間が推奨されているで500とします。([こちら](https://materialui.co/colors/))
– メインのサブ(primaryVaiant)も必要ですが、ライトテーマとダークテーマに備えてメインの色より濃いものと薄いものを準備します。
– アプリで使用するサブの色(seco

元記事を表示

JacocoMerge が Deprecated になったので、JacocoReport でレポートをマージする

# 概要
カバレッジ計測ツール JaCoCo の Gradle プラグインで、[JacocoMerge](https://docs.gradle.org/current/javadoc/org/gradle/testing/jacoco/tasks/JacocoMerge.html) が Deprecated になりましたので、
これを使わない方法でマルチモジュールの JaCoCo レポートをマージするように変更しました。

## 背景
[Gradle6系 + Jacoco + マルチモジュール + フルKotlin + Android + Robolectric環境でユニットテストのカバレッジを出す](https://qiita.com/ryo_mm2d/items/e431326f701e74ec49fa)
の記事を参考にして、マルチモジュールの Android アプリプロジェクトで JaCoCo のレポートをマージしていました。

### Deprecated.
[JacocoMerge](https://docs.gradle.org/current/javadoc/org/g

元記事を表示

[Android]Paging3でDBから取得したリストの途中に別のデータを追加する

Android の [Paging](https://developer.android.com/topic/libraries/architecture/paging/v3-overview) ライブラリで、データベースから取得したリストの途中に別のデータを追加する方法について考えたので紹介します。

例としては、例えば以下のように TODO タスクの一覧の中に広告を表示するというような感じです。 この TODO タスクはデータベースに保存されているものを参照しています。

| |
| — |

考えた方法としては以下の2通りになります。

1. `PagingData` の `insertSeparators` メソッドを使う
2. カスタムの `PagingSource` を作成する

この記事を書いた時点では Pag

元記事を表示

リフレクションでKotlinの要素を取得する【Kotlinリフレクション編】

Kotlinリフレクションを使用したKotlin要素の取得方法についてまとめました。
リフレクションは、privateなクラスやメソッドにアクセスするために便利な機能です。
前回の[Javaリフレクション編](https://qiita.com/satona-oinuma/items/5000f166185f8d7f1b89)に引き続き、今回もAndroidの単体テスト例を用いてまとめています。

尚、ご意見や筆者の認識の誤り等がありましたら、お気軽にコメントをお願いいたします。

## まとめ
### JavaリフレクションとKotlinリフレクション
今回、Kotlinリフレクションでは以下の要素が取得できると分かりました。

– public クラス
– public / private プロパティ
– public / private メソッド
– public / private コンストラクタ

そして、privateクラスのみ取得ができませんでした。
そのため、基本的にはKotlinリフレクションを使用し、privateクラスを取得する時のみJavaリフレクションを使用

元記事を表示

スマホでのタップ時に四角い枠を表示させないようTailwind CSSで設定する方法

僕が子ども向けのブラウザゲームを作成する中でのことです。
操作感を向上させるため、ボタンがタップに反応する領域を、ボタンの視覚的な領域よりも広くしました。
その結果悩まされたのが、タップ時に表示される、四角い影です。
screen shot

CSSであれば、以下のように書けば、この影が消えます(一般化のため、`a`タグにしてあります)。
“`css
a {
-webkit-tap-highlight-color:rgba(0,0,0,0);
}
“`
しかし、Tailwindではこれに対応するクラスが存在しません。
対応策としては、`tailwind.config.js`に、以下のように記述してください。
“`js
const plugin = require(‘tailwindcss/plugin’)

元記事を表示

MediaPlayerを使用してURLから音声を再生する方法

# はじめに
最近音声を再生する機会が多く、都度調べている気がしますので、簡単にまとめておこうと思います。

# 再生方法
まず、メンバ変数としてMediaPlayerを初期化しておきます。

“`
private val mediaPlayer = MediaPlayer()
“`

次に、MediaPlayerに再生したいURLと再生に伴う設定を行います。

“`
setDataSource(url)
setAudioAttributes(
AudioAttributes
.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
)
“`
上記で再生する為の設定は完了です。
簡単に呼び出している関数を解説します。

“`
setDataSource
“`
この関数に再生したいURLを設定します、他にもAssetFileDescriptorやMediaDat

元記事を表示

TextView内の設定でImageを設定する方法

TextViewとImageViewを分けていましたが、TextView内にImageViewを設定し、コードを簡潔にすることができます!
早速コードで説明していきます!

“`

元記事を表示

【Kotlin】YoutubeAPIで動画再生機能をAndroidアプリ内に実装する

AndroidにおけるYoutube再生について調べたので、とりあえず再生できるようになるまでのメモ。

## 準備
– Google Cloud Platformでプロジェクトを作成する
– Youtube Data API v3を有効にし、APIキーを取得する
– [公式のページ](https://developers.google.com/youtube/android/player/downloads/)からライブラリをダウンロードして、libsフォルダ内のYouTubeAndroidPlayerApi.jarを自分のプロジェクトにインポートする(AndroidStudio上でlibsにペースト後、右クリックでAdd As Libraryを選択)
– Android Manifestでインターネット通信を許可する

“`xml

“`

– AndroidXで作るので、[こちら](https://qiita.com/iKimishima/it

元記事を表示

includeしたレイアウトに対してConstraintLayoutの制約を適応する方法

今回は知らない方がいたので、ConstraintLayoutを使用している時に共通のレイアウトなどをincludeして表示する際にConstraintLayoutの制約を適応する方法を残しておこうと思います。

# includeしたレイアウトに対してConstraintLayoutの制約の適応方法

“`

元記事を表示

個人アプリをJetpackComposeでリプレースしたときの作業まとめ

こんにちは、tkyです。

個人で作成しているアプリをJetpackComposeで書き直したものを先日リリースしました。
どんなことを考えて実際に移行したのか記録として残しておこうと思います。

対戦ゲームの勝敗記録アプリ
みんな使ってね!

https://play.google.com/store/apps/details?id=io.github.ticktakclock.worl

■できること
・勝/負 の戦績を記録する
・勝敗にメモを残す
・戦績をゲームタイトルやイベント毎に記録する
・日、週、月ごとの対戦数と勝率をグラフで確認する
・過去にさかのぼって戦績を記録する
・記録した戦績の勝敗を編集する

## 画面構成

全部で4つの画面を持つ小規模なアプリです。

– ゲーム一覧画面
– 戦績記録画面
– 分析画面(グラフのライブラリに依存するためリプレースはしませんでした)
– 設定画面

戦績をグラフで表示する分析画面はグラフ表示ライブラリに大きく依存するためリプレースはしませんでした。

## 元のアプリの構成

Single Activityの4 Frag

元記事を表示

【第一回】UnityでAndroidゲームアプリを作る ~プロジェクト作成と素材集め~

# 本連載について
– 本連載では、私が趣味で個人開発しているAndroidゲームの作成過程を記録していこうと思っています。
– 作るゲームは2Dの横スクロールアクションにしていこうと思っています。

# 本記事について
本記事では以下の内容を記載します。
1. Unityプロジェクトの準備
1. 使用する素材集め

# Unityプロジェクトの準備
1. Unity hubを開きます。私は[Unity Hub 3.0.1](https://unity3d.com/jp/get-unity/download)を使用しています。
1. Unity Hubを開いたら、「New project」をクリック。
1. 2Dを選択して、右下のProject Settingsに必要事項を入力して、Create Projectをクリック。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33458/2d186350-9723-6100-ab47-a74b8aec0a17.png)
1. プロジェクトが開いた

元記事を表示

iOSのNSTimeZoneのUTCってnameがGMTなんだ..

![GMT_UTC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152641/ac5ea486-92d4-d55f-c618-9febbf5f2194.png)

AndroidとiOSでTimeZoneのUTCにまつわる調査をしていたところ想定外の結果になったので書き残しておきます。誰か真相を知っていたら教えて下さい。

# GMTとUTCの違い
GMTとUTCの違いをググるとCITIZENの用語集とよくある質問リストが最初に出てくる

https://citizen.jp/faq/detail/id1363

>両者は、目的も概念も算出方法もまったく異なりますが、日常生活に不都合のない精度の時間測定(整数の秒)であれば、ほぼ差がないと考えて問題ありません。

そう、ほぼ一緒と考えてよいということ。日本のAsia/Tokyo(+9:00)より9時間前のタイムゾーンということだ。

# Android(Kotlin)の場合

“`kotlin
import java.util.TimeZone

f

元記事を表示

UnityでAndroidアプリをリリースする下準備

# 本記事のゴール?
– UnityでGoogle Play StoreにリリースできるAndroidアプリビルド環境設定を行うことです。

# 環境
– Unity 2020.3.27f1を使用しました。

# 環境準備に参考にした資料
1. https://learn.unity.com/tutorial/publishing-for-android#
1. 上記のUnity Learnの”Publishing for Android”という記事に従い、Unity用のAndroid設定を行いました。上記ページで使用されているUnityのバージョンが、私が使用しているUnity 2020.3.27f1よりも少々古かったので、所々UIが違いましたが(特にUnityHub)、似たような項目を探して何とかなりました。

## Unity Learnに従って準備→Google Play Store申請時に嵌ったこと
1. Google Play Storeにリリースする際に.aabファイルが必要なので、以下のように”Build App Bundle (Google Play)”のチェ

元記事を表示

[Flutter/Android]「uses-sdk:minSdkVersion XX cannot be smaller than version YY declared in library」のエラー解消

# 環境
Windows 10 Home
Flutter 2.10.2
Dart 2.16.1
Android Studio 4.0.1

# エラー内容
Androidのエミュレータにてビルド時に下記のエラーが発生。

>uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library

「SDKのバージョン19以上じゃないとだめなので(今は16)、`minSdkVersion`を上げてね」ということでした。

# 解決方法
`android/app/build.gradle`の`defalutConfig`の中に、`minSdkVersion`を指定できるのでそこを変更しましょう。

“`gradle:android/app/build.gradle|変更前
defaultConfig {
// …略
minSdkVersion 16
// …略
}
“`

“`gradle:android/app/build.

元記事を表示

Kotlinのyield関数についてまとめてみる

今まで、KotlinのCoroutineを書いている中での時々登場する、“yield“がなにをやっているのかいまい理解せずになんとなくで、書いていたので“yield“について調べてみました。

:::note info
Sequenceで使う“yield()“もありますが、今回はCoroutineの“yield“についてです
:::

# yield関数とは?
“yield“関数は、KotlinのCoroutineのsuspend関数です。

# yieldを使うとどうなるのか?
“yield“を使うと、例えば複数のCoroutineを同時に実行しているときに、どれか一つが時間のかかる重い処理だった場合に、他のCoroutineに対して実行を譲ることができる関数です。

::: note warn
(コメントで指摘いただきありがとうございます。)
複数のスレッドを持っている場合、スレッドを譲った前と後でスレッドが異なっている場合があるので、そこを注意する必要があります。
:::

コードで書くとこんな感じです。

“`Kotlin
fun main() {

元記事を表示

【Android】Navigationでデータ受け渡しを伴う画面遷移をする方法

# はじめに

皆さん、ごきげんよう!れぶです!

今回の記事では、Android Jetpack系の[Navigation](https://developer.android.com/guide/navigation?hl=ja)を使って、データの受け渡しをしつつ、Fragment間の画面を遷移させる手順を書いていきます。

自身が実装をする上で[公式ドキュメント](https://developer.android.com/guide/navigation/navigation-pass-data?hl=ja)を参照したのですが、個人的に少し理解に苦しんだ箇所がありました。なので、注意すべきことも含めて詳細にまとめていこうと思います。

それでは、参りましょう!!

# この記事の対象者

* Navigationで、画面間のデータ受け渡しを伴う遷移を実現したい方
* Navigationを使った画面遷移の処理は分かるけど、画面間のデータ受け渡しの処理に苦戦している方
* 画面間のデータ受け渡しの処理の手順を知りたい方

ただし、[公式ドキュメント](https://develo

元記事を表示

OTHERカテゴリの最新記事