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

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

Building Mobile Apps at Scaleの自動テストの部分で知らなかったところメモ

世界的な会社がどうテストしているのか、ちょっとテスト関連のベストプラクティスを探して読んでみています。

個人的にはrobot pattern testingはちょっとした収穫でした。
またかなりSnapshot testが行われていることが印象的でした。
詳しくは以下

https://www.mobileatscale.com/

(ユニットテストは大事的なのが書いてあるんですが、知らなかったところ中心で書いているので飛ばしています)

### Snapshot test

IntegrationテストやUI/E2Eテストの特別な形。スクショをとって、保存されている画像と比較する。データは通常モックが使われる。違うとテストが失敗する。失敗の理由として画像が使われる

Snapshot testのUberでの事例

* iOSではFacebookからiOSSnapshotTestCaseを引き継いで、多用していた
* デバイスのサイズが多様だったのでAndroidで適切なスナップショットを行うための労力がこのプラットフォームでは高すぎると考えたのでAndroidでは行わないことを

元記事を表示

Composeで@Previewを付けたのにプレビューが表示されない件

# 何が起きたのか
Jetpack Composeを導入したのに、@Previewを付けてもプレビューが表示されません。
下記の画像を見てください。正確には、本来Android Studioの画面右側に表示されるはずの「Code / Split / Design」のタブが表示されません。
![スクリーンショット 2021-08-16 20.13.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610553/2e84d1d8-2ca1-6295-0db9-bd8338df7bd0.png)

# 環境

* Android Studio Arctic Fox | 2020.3.1

“`app/build.gradle
dependencies {
implementation(“androidx.compose.ui:ui:1.0.1”)
implementation(“androidx.compose.ui:ui-tooling:1.0.1”)
implementatio

元記事を表示

MockKでトップレベル関数をモックする

[MockK](https://mockk.io/)でトップレベル関数をモックする方法をメモがてら記載します。

こんな `log` 関数があった場合。

“`kotlin:Ext.kt
package com.example

fun log(message: String) {
Log.d(“log”, message)
}
“`

こんな感じで書けばOKでした。

“`kotlin:ExtTest.kt
class ExtTest {

@Test
fun test_log() {
mockkStatic(“com.example.ExtKt”) // ①
every { log(any()) } just runs // ②

// ・・・テストコード・・・
}
}
“`

# ポイント:bulb:
① `mockkStatic` を使用し、トップレベル関数が定義されているクラスを指定します。
今回の場合、

– package が `com.example`
– ファイル名が `Ext.k

元記事を表示

Androidで簡単にアニメーションを追加する【Lottie】

##Lottieって何?
Android,iOS,React Nativeで、アニメーションを画像のように簡単にアプリに埋め込める!
アニメーションはGIFアニメのようなもので、人様が作成してくれたのを選んで使える!
サイズや繰り返し設定など変更可能!
宿泊関係のサービスで有名なAirbnbが作成しており無料で使える!
![lottie.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252283/7aa20eba-bbec-79ca-ad7e-d7e275ee71a5.gif)
※サンプルはローディング画面に入れてみました

##リンク集
公式トップ
https://airbnb.design/lottie/
Android GitHub
https://github.com/airbnb/lottie-android
Androidドキュメント
http://airbnb.io/lottie/#/android
サンプルアプリ
https://play.google.com/store/apps/de

元記事を表示

ARCore SDK(Java)の Duplicate class 問題

ARCore の開発を行っていて、困っていた問題が解決したのでメモ

# 発生していた問題
ARCore SDK の内部のクラスが a.a.a という名前となっているため、他の Google ライブラリと競合が発生してしまうことがあった

“`gradle:build.gradle
implementation ‘com.google.ar:core:1.25.0’
implementation ‘com.android.installreferrer:installreferrer:2.2’
“`

“`
Duplicate class a.a.a found in modules jetified-core-1.25.0-runtime (com.google.ar:core:1.24.5) and jetified-installreferrer-2.2-runtime (com.android.installreferrer:installreferrer:2.2)
“`

Github の issue
https://github.com/google-ar/arco

元記事を表示

API Guidelines for Jetpack Composeを読んだメモ

こちらにあるドキュメントです。

https://github.com/androidx/androidx/blob/c53c7d0b219e5142656efb564b818eb651615bf0/compose/docs/compose-api-guidelines.md

ある程度Composeを触ったことがある人向けのドキュメントだと思います。開発チームなどでComposeやっていく人は一読の価値があるかなと思いました。

> The Compose API guidelines outline the patterns, best practices and prescriptive style guidelines for writing idiomatic Jetpack Compose APIs. As Jetpack Compose code is built in layers, everyone writing code that uses Jetpack Compose is building their own API to consume themselve

元記事を表示

UnityのAndroid開発でエラーもなく突然激重になる現象とそれを対処した方法

## 現象や状況
* Unity2020系、Unity2019系で発生
* Unity上のエディタでは発生しない
* 実機(Android6系と7系)で発生確認
* 3種類ほどのタブレット端末で発生
* Android5系のスマートフォンでは発生せず
* 10分から40分画面スリープもなく放置していると発生
* 操作していても発生することも
* 見た目はほぼフリーズしている状態だが、画面遷移など時間が立つと起こるためたぶんすごいFPSが下がっているという状況
* Android Logcatなどでもエラーが発見できない
* ただ、警告がずっと出続けていた(EGL_BAD_PARAMETER)

## 結果

[![Image from Gyazo](https://i.gyazo.com/298fcb4084cc020dc7c2273332039ac7.png)](https://gyazo.com/298fcb4084cc020dc7c2273332039ac7)

`Optimized Frame Pacing` の項目のチェックをはずすと警告が消え

元記事を表示

KMMを触ってみて思ったこと

##はじめに
KMM(Kotlin Multiplatform Mobile)とは、Kotlin/NativeというKotlinのコードをさまざまなOSのネイティブコード(マシン語)に変換する技術を使って、モバイル(iOSとAndroid)に特化したクロスプラットフォーム開発をできるようにするSDKです。

僕は~~KMMってなんか響きがかっこ良いんで~~KotlinでiOSアプリが作れるっていうところが凄いなと思って勉強を始めてみました。勉強を始めて一番最初に浮かんだ疑問として、Kotlinで開発するのであればただのAndroid開発と何が違うのかというのがありました。その疑問について色々調べてみました。

##仕組みの違い
そもそもAndroidのネイティブ開発ではKotlinやJavaを使うことができます。それぞれのコードがART(Android RunTime)という実行環境でAndroidOS上で動くようなネイティブコードにコンパイルされることで動いています。

対してKMMはKotlin/NativeがKotlinを各OSのネイティブコードに変換するための諸々をやってくれて

元記事を表示

[Android] HiltでApplicationComponentが見つからない

`Hilt`のcodelab [Android アプリでの Hilt の使用](https://developer.android.com/codelabs/android-hilt?authuser=1&hl=ja#0) で、以下のエラーが発生しました。

“`
エラー: シンボルを見つけられません
@dagger.hilt.InstallIn(value = {ApplicationComponent.class})
^
シンボル: クラス ApplicationComponent
“`

# 原因
`Hilt`のバージョンを最新の`2.38.1`にしていたことが原因で、エラーが発生していました。

# 修正
`Hilt`のバージョンをcodelabで指定されている`2.28-alpha`、または`2.28.3-alpha`にすることで解決しました。

“`build.gradle
buildscript {
ext.kotlin_version = ‘1.5.21’
ext.hilt_versi

元記事を表示

FlutterのWorkManagerのcallbackDispatcherをstaticで宣言するとエラーになる

問題のライブラリはこちら
https://pub.dev/packages/workmanager

> The callbackDispatcher needs to be either a static function or a top level function to be accessible as a Flutter entry point.

この公式の指示に従ってstaticでcallbackDispatcherを宣言したらこんなエラーが・・・

“`
E/flutter ( 2580): [ERROR:flutter/shell/common/shell.cc(103)] Dart Unhandled Exception: NoSuchMethodError: No top-level getter ‘callbackDispatcher’ declared.
E/flutter ( 2580): Receiver: top-level
E/flutter ( 2580): Tried calling: callbackDispatcher, stack trac

元記事を表示

[Android]思考停止で使っていたViewBindingを掘り下げる

#ViewBindingとは?
>ビュー バインディングとは、ビューを操作するコードを簡単に記述できる機能です。

簡単に言語化すると「簡単操作」です。
ViewBindingはappモジュール内で設定すると、ファイルの数だけバインディングクラスという「仲介役」が静的に?生成されます。

そうすることで、xmlファイル内の(ID名のあるViewのみ)Viewを簡単にクラスから参照でき、簡単に「操作」出来るわけです。

ちなみに、生成されたバインディングクラスの名前は、xmlファイル名のキャメルケースになります。

#設定
“`gradle:build.gradle(app)
android {
// (省略)

viewBinding {
enabled = true
}
}
“`
モジュール単位で設定すると前述したので、このように。

#使い方
###Activityで用いる場合
“`kotlin
private lateinit var binding : MainActivityBinding

// (省略)
ov

元記事を表示

Flutter勉強記録2日目~カメラを使って景色を見るだけのアプリを作ってみる~

# 前回のあらすじ
Flutterのインストールをして、サンプルコードを動かした。
[「Flutter勉強記録1日目~インストールからサンプルコードを走らせるまで~」](https://qiita.com/ikeguma_Na/items/274223827b49f304b228)

今日使っているプロジェクトは、昨日生成した初期のサンプルコードを使いまわしています。

# この記事ですること

– カメラを使ってファインダー越しの景色を見るアプリを作る
– カメラアプリ**ではない**。(写真撮影機能が無い)
– [pub.dev](https://pub.dev/)なる場所にあった[カメラのプラグイン](https://pub.dev/packages/camera)を使う

# 環境
– Windows10
– VScode
– camera: ^0.8.1+7
– Flutter 2.2.3 • channel stable • https://github.com/flutter/flutter.git
– Framework • revision f4abaa0735

元記事を表示

Android に処理を完遂させる

# はじめに
以前書いた記事で「Android アプリは OS の都合で勝手に終了する」ということを書きました。

https://qiita.com/ishihatta/items/831b063ef14b41129df9

今回はその話を少し掘り下げて、「どんなときにアプリが終了するのか」「ではどうやって処理を完遂させれば良いのか」を書いてみようと思います。

# 先に結論
長いので先に結論だけ言うと「ちゃんと Service を使おう!怖くないよ!」という話です。

# 非同期処理で処理を完遂できるのか?
皆さんは「時間のかかる連続した処理」を Android アプリに実装したことはあるでしょうか?
Android アプリ開発者の皆さんの多くは「ある」と回答されるのではないかと思います。

Android アプリの開発では頻繁に非同期処理の実装が求められます。Android では UI を操作するためにメインスレッドが使われるため、UI 関連の処理をブロックする可能性がある「時間のかかる処理」は別のスレッドで実行する必要があるためです。代表的な非同期処理(別スレッドで実行する処理

元記事を表示

Android向けにlldb-serverをクロスコンパイルする方法

Android向けにlldb-serverをクロスコンパイルする方法の自分用メモ。

# ビルド環境
Ubuntu 20.04 LTS
# インストール
“`
sudo apt update
sudo apt install build-essential swig python3-dev libedit-dev libncurses5-dev
sudo apt install cmake
sudo apt install ninja-build
sudo apt install binutils-aarch64-linux-gnu
sudo apt install unzip
“`
# ソースのダウンロード
“`
git clone https://github.com/llvm/llvm-project.git
“`
# NDKダウンロード
ここで重要なことは、r20b以降だと以下エラーが発生するのでバージョンはr20bにすること。
https://github.com/android/ndk/issues/1328

“`
wget https://dl.google.

元記事を表示

Android StudioでAndroid端末の電流、電圧、ワット数を計測する

Androidのアプリによって消費電力が変わるのか確認したくて実装しようと考えたので、Android Studioで実装してみました。

# 動作環境

* Android studio 4.1.2
* Windows 10 Pro 20H2

# 実装

~~~kotlin:MainActivity

class MainActivity : AppCompatActivity() {
private val sbuilder = StringBuilder()
private var batteryStatus: Intent? = null
private var bManager: BatteryManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val ifilter

元記事を表示

Android: マルチモジュール構成の DataBinding で View is not a binding layout. エラーが発生する

# 環境

* OpenJDK 11
* Gradle 7.1.1
* Android Gradle Plugin 4.2 ~ (7.0.0, 7.1.0-alpha08 でも再現確認)
* Gradle Multimodule 構成

# 発生条件とエラー内容

Android Studio や CI でビルドしたアプリが、特定の画面へ遷移したときに以下のエラー(クラッシュ)が発生することがある。

* [AppCompatActivity(contentLayoutId: Int)](https://developer.android.com/reference/kotlin/androidx/appcompat/app/AppCompatActivity#appcompatactivity_2) または [Fragment(contentLayoutId: Int)](https://developer.android.com/reference/kotlin/androidx/fragment/app/Fragment#fragment_2) を使ってレイアウトを自動生成したあ

元記事を表示

【Flutter】CheckBoxListTileとTextStyleを活用してToDoリストのフロントエンドを作ってみた

# はじめに
先日からFlutterを使い始めた初心者です。
制作したいToDoアプリの完成形のイメージは自分の中であるので、それらを実現するために色々調べているので、それらをまとめていきます!
何かおかしな点などがありましたらコメントをお願いします。

# この記事で分かること
完成形はこんな感じ

![スクリーンショット 2021-08-13 222231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1630025/f14da810-f395-cc12-cb98-6ee9d40a81e0.png)

この記事では主に

– CheckBoxListTileについて
– 取り消し線の実装方法

をまとめています

# ToDoリストのフロントエンドを作る
## そもそものお話
今回のゴールは

– 各リストの左側にチェックボックスを入れる
– チェックしたら取り消し線が入る

ことです。
私のイメージではListTileを使ってleading: Iconみたいな感じでCheckBoxを入れるのかな

元記事を表示

【Androidアプリ】FrameLayoutを使ってピアノアプリを作成しよう!

## レイアウト

### FrameLayoutを適用しよう!
![スクリーンショット 2021-04-03 8.00.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933349/11e8c628-1d48-dff6-a868-a5e0eafd41bb.png)

### FrameLayoutとは?
![スクリーンショット 2021-04-03 8.04.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933349/29aea5d4-8fef-61fc-c1dc-ca9884e4b89c.png)

### Designの一例
![スクリーンショット 2021-04-03 10.37.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933349/f1162899-ca94-3eb9-ccf6-0f8877ca6a58.

元記事を表示

FlutterでAndroidの実機を認識させられなかった話

# はじめに
大体タイトル通りです。

VSCodeを使ってFlutterでアプリ開発するぞ! Androidの仮想環境で動かすと重くなるし、使ってるスマホがAndroidだから実機でデバッグしよ。……あれ、デバイス認識されない。

みたいな感じで1時間くらい時間を無駄にしたので、Qiitaに記事を残します。
私の環境はVSCodeでしたが、Android Studioでも同じことをしなければ認識しないと思います。

# 実機側の設定の問題だった
もし、右下の画像赤丸部分に使いたいデバイス名が表示されていなくて、認識できないような問題であれば、同じ部分で詰まっているのかもしれません。
![キャプチャ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1560787/7b3fbd3e-5c5c-c1c5-d11a-2d05ad4b2fee.jpeg)

# ステップ1 開発者になる
1. Androidの設定を開く。
1. [システム] > [端末情報] > [ビルド番号]を見つける。
1. バージョ

元記事を表示

[Android] Koinの使い方

久しぶりに`Koin`を触ったので、メモメモ。

# Koinを導入

まず`Koin`を導入します。

導入については [こちら](https://insert-koin.io/docs/setup/v3) を参考にしました。

“`build.gradle
buildscript {
// 追加
ext.koin_version = ‘3.1.2’
ext.kotlin_version = ‘1.5.20’
repositories {
google()
// なければ追加する
mavenCentral()
}
dependencies {
classpath “com.android.tools.build:gradle:7.0.0”
classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”

// NOTE: Do not place your application

元記事を表示

OTHERカテゴリの最新記事