- 1. Unityでスマホアプリを開発する
- 2. Building Mobile Apps at Scaleの自動テストの部分で知らなかったところメモ
- 3. Composeで@Previewを付けたのにプレビューが表示されない件
- 4. MockKでトップレベル関数をモックする
- 5. Androidで簡単にアニメーションを追加する【Lottie】
- 6. ARCore SDK(Java)の Duplicate class 問題
- 7. API Guidelines for Jetpack Composeを読んだメモ
- 8. UnityのAndroid開発でエラーもなく突然激重になる現象とそれを対処した方法
- 9. KMMを触ってみて思ったこと
- 10. [Android] HiltでApplicationComponentが見つからない
- 11. FlutterのWorkManagerのcallbackDispatcherをstaticで宣言するとエラーになる
- 12. [Android]思考停止で使っていたViewBindingを掘り下げる
- 13. Flutter勉強記録2日目~カメラを使って景色を見るだけのアプリを作ってみる~
- 14. Android に処理を完遂させる
- 15. Android向けにlldb-serverをクロスコンパイルする方法
- 16. Android StudioでAndroid端末の電流、電圧、ワット数を計測する
- 17. Android: マルチモジュール構成の DataBinding で View is not a binding layout. エラーが発生する
- 18. 【Flutter】CheckBoxListTileとTextStyleを活用してToDoリストのフロントエンドを作ってみた
- 19. 【Androidアプリ】FrameLayoutを使ってピアノアプリを作成しよう!
- 20. FlutterでAndroidの実機を認識させられなかった話
Unityでスマホアプリを開発する
Unityでスマホアプリを開発するために必要なものを全てドキュメントに残します。
また、自分自身Unityを使ってのアプリ開発は初めてなので少しでも疑問に思ったことは全てメモしていこうと思います。
完成するまでに随時アップデートします。## プロジェクト作成までにするべきこと
### Unityのインストール
Unity Hubをインストールするのが良いでしょう。
そこからUnityをインストールします。
※ここでiOSとandroidのモジュールを追加すること
※後からでも追加できます。
(自分は後からモジュールを追加しました)
※日本語化したい人は日本語化のモジュールもインストール![スクリーンショット 2021-08-18 9.21.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/615043/d9c21920-81ed-f69c-1524-0fe5dae42418.png)
こうなっていればOK!
### 2Dと3D両方のスクリーンが出てくる場合はどうすればいい??
→一旦2Dで
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.examplefun 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. バージョ