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

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

coilライブラリのモノクロ機能の代替実装

# 初めに
今回は、`Android`実装でよく使われている画像読み込みライブラリの一つである`coil`からモノクロで描画する機能が削除されるとのことで、代替実装を備忘録ついでに残しておこうと思います。
### 本文
まず、元々`coil`で使われていたモノクロ機能のコードは下記のurlに飛んでもらえれば確認できます。
https://github.com/coil-kt/coil/blob/1.4.0/coil-base/src/main/java/coil/transform/GrayscaleTransformation.kt
`coil`側はこれを基に自分たちで実装してくれれば、画像の加工するための機能自体は決してないから問題なく実装できると言っています。
– equals
– hashCode
– toString
上記三点は先述したurlにある元のコードと何も変わりませんが、他の部分でエラー3箇所出ると思います。
まず、元々は`coil`側で実装されていた`key`が`cacheKey`という名前に変更されています。
次に`transform`の引数に変更があります。

元記事を表示

既存のAndroidアプリに組み込んだFlutterをデバッグする

# Flutterを既存アプリに組み込む

Flutter最大の魅力はマルチプラットフォーム対応です!とは言え、既存のアプリを一度に丸ごとFlutterで書き換えるのは現実的ではなく、部分的にFlutter実装の画面で置き換えていく場合が多いかと思います。詳細は公式 Docsが非常に参考になるので一度は読んでおきましょう。

https://docs.flutter.dev/development/add-to-app

# 組み込まれたFlutterのデバッグ
当然、開発中はデバッグ作業が発生しますが、Androidネイティブに組み込まれたFlutterにattachしてデバッグする方法を簡単にまとめておきます。

– Android Studio Chipmunk | 2021.2.1 Patch 1
– Flutter 2.10.4

### 0. プラグインの用意
AndroidStudioにFlutterプラグインをあらかじめインストールしておきましょう
![スクリーンショット 2022-07-04 18.13.24.png](https://qiita-image-stor

元記事を表示

UI Automator Viewerが動かなくなった(Mac)

Appiumでテストを書くことになり、レイアウトのIDなどを確認するため、久々にUI Automator Viewerを起動してみたところ…

“`
$ uiautomatorviewer
-Djava.ext.dirs=/Users//Android/sdk/tools/lib/x86_64:/Users//Android/sdk/tools/lib is not supported. Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
“`

動かない。

調べてみたところ、Java 11にしたことが原因のよう。

https://stackoverflow.com/a/54492335

リンクのコメントを参考に以下のようにスクリプトを書いた。

“`
uiautomator() {
JAVA_HOME=`/usr/

元記事を表示

JetpackCompose NavBackStackEntry – Composable のスタックとライフサイクル

Todo ページと Poke ページで遷移します。

[LocalLifecycleStateLogger()](https://gist.github.com/benigumocom/2fd18d7338228fbe4a50ce7706b920a6) をそれぞれに貼ります。

“`kotlin
@Composable
fun TodoScreen(
viewModel: TodoViewModel = hiltViewModel()
) {

LocalLifecycleStateLogger(

元記事を表示

【kotlin】Anyクラスについて

# はじめに
今回はkotlinで使われる**全てのクラスの親クラス**にあたる ”**Anyクラス**”についてまとめていきます。

# Anyクラスとは
まず、Anyクラスについてですが、前述したように Anyクラスは**全てのクラスの親クラス**です。
実際のコードでは省略されている為 目にする事は少ないです。
ですが、どのクラスでも 継承元を辿っていくと最後に辿り着くのは必ずAnyクラスです。
なので、何度も記載する通り **全てのクラスの親クラス** ということになります。

# Anyクラスの中身
Anyクラスでは何をしているのか 見ていきましょう
実際のコードがこちらです

“`
public open class Any {
〜コメント省略〜

public open operator fun equals(other: Any?): Boolean
〜コメント省略〜

public open fun hashCode(): Int
〜コメント省略〜

public open fun toString(): String
〜コメン

元記事を表示

【Jetpack Compose】Preview をもっと簡単に増やしたい場合(PreviewParameter, Multipreview Annotations)

## はじめに

Preview をより簡単に増やせる方法を学んだので、それらを備忘録としてまとめていこうと思います。

### この記事で分かること

– `@PreviewParameter` の使い方
– Multipreview Annotations の使い方

## 今回 Preview させるもの

単純にメモのリストを表示させるような、非常に簡単なもので試していきたいと思います。`Loading` 時には `CircularProgressIndicator()` を、`Error` 時には `Dialog` を表示させています。

“`kotlin
@SuppressLint(“UnusedMaterialScaffoldPaddingParameter”)
@Composable
fun ExampleScreen(uiState: ExampleUiState) {
Scaffold(
topBar = {
TopAppBar(
title = { Text(text = “Exa

元記事を表示

EditTextで範囲選択している文字をドラッグで位置を変更させることを無効化させる方法

今回はEditTextで色々制御をしていて、範囲選択している文字をドラッグで位置を変更させることを、無効にしたかったことがあったので残しておこうと思います。

# OnDragListener
“`MyDragListener.kt
class MyDragListener : View.OnDragListener {
override fun onDrag(v: View?, event: DragEvent?): Boolean {
return true
}
}
“`
View.OnDragListenerを継承したクラスを作成します。
こちらをreturn trueすることでドラッグ操作を無効化いたします。

ただし、範囲選択の範囲位置を調整するドラッグ操作は無効になりません。

あとは作成たクラスをEditTextに設定します。

“`MainActivity.kt
binding.editText.setOnDragListener(MyDragListener())
“`

これで終了です。

元記事を表示

クラウド上で実機スマホをレンタルできるRemote TestKitを触ってみた

この記事は、Qiita Engineer Festa 2022 [Remote TestKitを使ってレビューを書こう!](https://qiita.com/official-events/f0e8b25feb05af6326b3)の参加記事です。

https://qiita.com/official-events/f0e8b25feb05af6326b3

## はじめに

クラウド上で実機のスマートフォンをレンタルできるサービスがあると知って、面白そうだったので触ってみました。
また、Androidのスマホは多種多様なものが多く、Webの開発でも実際にどう見えてるのかを検証してみたいときに便利かもと思い、触ってみました。

なお、僕はネイティブアプリの開発経験はないので、Web開発の面での内容になります。

(上記のQiita Engineer Festa 2022のイベントで、Remote TestKitのトライアルができます! → [参加方法・流れ – Remote TestKitを使ってレビューを書こう! – Qiita](https://qiita.com/offici

元記事を表示

wordleの国名版を作ったよ!

# TL;DR
有名なwordleの国名版をアンドロイドアプリにしました。ぜひ使ってみてね!
https://play.google.com/store/apps/details?id=com.chatram.wordle

## なぜ作ったか
今年のはじめ辺りにバズっていたので、作れるかなと思って今年の3月くらいに作りました。

## 例
![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648231/b422727c-f5a6-ad30-a242-baba544b10c3.jpeg)

本家と同様、文字があっているけど位置が違うと黄色、文字も位置もあっていると緑になります。

## 仕組み
外務省のホームページを参考にして、国として認められているところの名前をマップにぶち込んで、ゲームが立ち上がるorリセットボタンを押されるたびにランダムでその中の国名が答えとして選ばれます。
入力部分にはひらがなとカタカナ以外は入力できないようにregexで弾いています。
“`dart
// ra

元記事を表示

flutterで電卓アプリ作ったよ

# TL;DR
flutter×dartでアンドロイドアプリの電卓を作りました。既存の電卓アプリと違うのは、modが使えます。関数電卓ではないですが。
https://play.google.com/store/apps/details?id=com.chatram.calc_app

## なぜ作ったか
ネイティブアプリを作ってみたかったのと、クロスプラットフォームのflutterってどうなの?と思ったので作ってみた。

## 例
![unnamed.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/648231/5ad0167f-a0d8-fbdc-c47d-9e37bf5afad9.jpeg)
デザインは自分のアンドロイドにプリインストールされていた電卓アプリを参考にしました。

## 仕組み
計算部分
“`dart
static String Execute() {
var _result = Decimal.parse(‘0.0’);
try {
_list_numb

元記事を表示

IntelliJ IDEAでAndroidエミュレータが起動しない件

Flutter開発でIntelliJ IDEAを使っているのですが、Androidエミュレータがどうやっても起動してくれないという事案が発生しました。自分なりに頑張ったIntelliJ IDEAを用いたエミュレータ起動の解決策を残します。

# 解決策
1. IntelliJ IDEAの右上の**Project Structure**を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017749/08e800a3-388d-7ff9-9500-199dcad37270.png)
1. ModulesのExport内にある、**Flutter for Android**をマイナスボタンで削除
1. サイドバーにあるProblemの内容をチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017749/41899f52-1838-564c-e54c-be7bcf0bf20c

元記事を表示

【Android Java】いまさら聞けないActivityとは?

## はじめに
Android Javaって何?という初学者向けの記事になります。
アンドロイド特有の`Activity`についての内容です。

仕事でAndroid Javaを使って修正、開発をしています。
業務に携わってから約半年が経ちました。

Android Javaを使うにあたって、学んだことをアプトプットしようと思い記事にしました。

エンジニアになって1年の未熟者なので暖かい目で見ていただけると助かります。

## あなたは誰?
> 現職:SESエンジニア(歴1年)
前職:営業
年齢:27歳
使用言語:Java, Android Java, C++
工程:テスト、実装(設計もやってみたい…)
好きなこと:サウナ/登山/ダーツ/ピアノ/酒/運動全般
もくもく会主催:[新宿もくもく会](https://shinjuku-realize0707.connpass.com/)

## Acyivityとは
簡単に言うと`Activity`とは、スマホでいう**一つの画面全体**のことを言います。
バグ検証におすすめ。クラウド上のスマホを借りれるサービスの感想。【RemoteTestKit】

# はじめに
開発中のアプリを動かす時

「こっちのデバイスだとレイアウトが崩れた」
「iOSだとここの処理がうまく動かない」
「最新のスマホではどうなるんだろう」

なんてことありますよね。
しかしそのためにわざわざ実機を用意するのは大変だと思います。
そこで、この問題を解決するサービスが「RemoteToolKit」と言うサービスです。

# 概要
「RemoteTestKit」は簡単に言うと、クラウド上のスマホやタブレットを借りれるサービスです。

なんと、利用可能な端末はなんと1132件もありました!(2022 7月1日現在)
ラインナップはAndroid 2.3.3などの古いOSから最新のAndroid 13まで幅広くあります。
下のリンクから利用可能な端末を一覧で見れるので是非見てみてください~~

https://appkitbox.com/testkit/devicelist/

# 使い方

RemoteTestKitにはWeb版と、ソフトウェア版があります。
ソフトウェア版のほうが圧倒的に便利なので、ソフトウェア版の利用をオススメします!
このソフトはWindow

元記事を表示

【Kotlin】Mock と Spy の違いについて(mockk で試してみた)

## はじめに

よく「モックする」というものの「モック」の意味がモノによって異なることを学んだので、それらを備忘録としてまとめていこうと思います。

また、ここでは実際に mockk における Mock と Spy の違いを確認していきます。(※mockk とは Kotlin のモックライブラリです)

### この記事で分かること

– 言葉の定義
– xUnit Test Patterns における Mock と Spy の違い
– mockk における Mock と Spy の違い
– mockk で動作を確認
– Mock
– Spy

## 言葉の定義

まず大前提として、モックやスパイの意味は文脈や人によっても異なる可能性があるので注意が必要です。それを踏まえた上で、本記事では「xUnit Test Patterns」と「mockk」のそれぞれにおける言葉の定義を、自分なりにかなり簡潔にまとめていきます。(詳しくは最後の参考資料をご覧ください)

### xUnit Test Patterns における Mock と Spy の違い

元記事を表示

どの方法で柔軟にAndroidのGradleのビルドロジックをまとめるか

いくつかやり方があり、それぞれメリデメがあるようなのでのでまとめておこうと思います。
nowinandroidがComposite Buildを導入したことで、話題になりました。

ちょっと調べてみたんですが、これが最強というのは見つけることができませんでした。かなりプロジェクト規模によって異なってきそうです。メリデメ見ながら採用していく必要がありそうです。
ここではある程度大規模だが、Androidアプリでビルドエンジニアを雇うほどではないという想定をしています。

以下で色々試行錯誤していました。

https://qiita.com/takahirom/items/50672e079f42c1b7b00c

https://qiita.com/takahirom/items/0e95d1c1eb6de4f01b0c

# どこにビルドのコードを置くのか?

## buildSrc

プロジェクト/buildSrcにコードを書く方法。

### メリット
色々魔法をGradleが使ってくれるので簡単
小さなプロジェクトではこれでも大丈夫。
プラグインとextension以外が公開で

元記事を表示

【Android】棒グラフを描画する

# 概要
`MPAndroidChart`を用いて棒グラフを描画する。ここでは最低限の処理のみ記載。

# 手順
ライブラリの導入

“`build.gradle
implementation ‘com.github.PhilJay:MPAndroidChart:v3.1.0’
“`

“`settings.gradle
repositories {
//(省略)
maven { url “https://jitpack.io” }
}
“`

レイアウト作成
“`activity_main.xml

スマホでBLEをNodeJSチャレンジ(失敗)

AndroidスマホにてWebBluetoothでは実施済みだが、登録機器にアプリ立ち上がり時に自動接続を試したいことから、WebBluetooth<->ネイティブで実現できる自動接続を模索
スマホにNodeJS立ち上げてなんとかできないか?検証メモ

### 利用スマホ

* Pixel3 Android os 12
https://ja.wikipedia.org/wiki/Pixel_3

* A20 Android os 11
https://www.galaxymobile.jp/galaxy-a20/

### × Servers UltimateアプリでNodeJSサーバー

NodeJSサーバーが実行できるとのことで試す
Nodeサーバーがうまく立ち上がらず断念
ディレクトリのアクセスがAndroidOSで難しくなったせいなのか???
原因は解明の前に次の方法へ

#### 参考URL

https://play.google.com/store/apps/details?id=com.icecoldapps.serversultimate&hl=ja&gl=US

元記事を表示

collectAsStateWithLifecycleが追加されたぞ

## はじめに
こんにちは、どすこいです。
Androidエンジニアのみなさん、Compose楽しんでますか?
僕は楽しんでます。

今回jetpackの`lifecycle-runtime-compose:2.6.0-alpha`で`collectAsStateWithLifecycle()`なるものが追加されたので早速触っていきたいと思います。

## 前提
まずComposeで扱う値をUiStateにまとめたものとします。
そのUiStateをViewModel側でStateFlowとして持っているという状態です。

こんな感じ

“`kotlin:MainViewModel.kt
class MainViewModel : ViewModel() {
val _state: MutableStateFlow = MutableStateFlow(UiState())
val state: StateFlow = _state.asStateFlow()

data class UiState(
val

元記事を表示

Kotlin Jetpack Composeについて その2

# はじめに
これは[前回ーその1](https://qiita.com/hideto1198/items/9895dec8ffa84e0f59a3)の続きです。
また今回も長々と書いていきますのでよろしくお願いします?

# 開発環境
– iMac 2019
– Android studio Arctic Fox | 2020.3.1
– Kotlin Jetpack compose 1.0.0-rc02(正式リリースの可能性あり)

# 画面操作
## clickable
clickableを使用すると、タップ操作を検知できます。
色々なオブジェクトにボタンのような機能を持たせることが可能です。
各オブジェクトの`Modifier`に設定します。

“`kotlin
@Composable
fun TapGesture(){
var count by remember { mutableStateOf(0)}
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Ali

元記事を表示

AndroidにBluetoothイヤフォンを接続するとAudioTrackの音が鳴らない問題

# はじめに

Android で AudioTrack を使って音楽を再生するアプリを開発しているのですが、ユーザーからレビューで「ワイヤレスイヤフォンだと音楽が鳴らない」というご指摘をいただき調査した結果、割と謎な手段で問題を回避したので紹介します。

## AudioTrack 使用の流れ

“`kotlin
private fun createAudioTrack(
seek: Int,
onSeek: ((length: Int, time: Int) -> Unit)?,
onPlayEnded: (() -> Unit)?
) {
audioTrack?.release()
val attributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MU

元記事を表示

OTHERカテゴリの最新記事