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

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

Qiita Night〜2022年、Androidアプリはどう作る?〜のイベントレポート

# 概要
– 2022年7月20日に開催された[Qiita Night〜2022年、Androidアプリはどう作る?〜](https://increments.connpass.com/event/251564/)のイベントレポート

ライブ配信のアーカイブ

# コンテンツ
– LT
– 2022年のAndroidプロジェクトセットアップ / @takahirom
– バイトルアプリ開発の裏側 / @hayashidamoka
– Kotlin Nativeってandr

元記事を表示

FlutterでTextField(TextFormField)を使うと、大量に再描画される

## 概要
TextFieldもしくはTextFormFieldを設置すると、大量(数十回)に再描写(build)される
※厳密には、MaterialPageRouteでpush(遷移)した先に、TextFieldを設置すると、同現象が発生する

## サンプル
“`dart
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Page())
);

class Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
// このテキストフィールドにfocusが当たると大量に再描画される
),
);
}
}
“`

## 対応方法
### その1, ページルートに設置する
ページ設計的にMaterialPageRouteでpushした先でない(つまりルート)Vie

元記事を表示

【Flutter】AndroidでSQLiteのテーブルのデータを確認する

Flutterを使って個人で以下のスマホ向けのおみくじアプリ(大御心アプリ)を開発・運用しています。

Screenshot_home.png
Screenshot_fortune_1.png
Screenshot_fortune_2.pngAndroidミラーリングツール: ScrcpyHub v1.7.0 をリリースしました

# ScrcpyHub v1.7.0 をリリースしました

![](https://images.unsplash.com/photo-1634334339429-660e1b088026?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxNDIyNzR8MHwxfHNlYXJjaHwyNXx8bWlycm9yfGVufDB8fHx8MTY0NzY1MzIyMQ&ixlib=rb-1.2.1&q=80&w=1080)

# はじめに

ScrcpyHubはAndroidの画面をミラーリングするためのGUIアプリケーションです。ScrcpyHubは以下のGitHubリポジトリで絶賛開発中ですのでよければコントリュート&スター登録お願いします。

https://github.com/kaleidot725/ScrcpyHub

ScrcpyHubはscrcpyというコマンドツールを利用して作成しております。scrcpyのコントリビュートがScrcpyHubの発展にも繋がりますのでぜひチェックしてみてください。

https://github

元記事を表示

firebase tracking eventの実装

# 初めに
今回は、`FirebaseTrackingEvent`の汎用的な実装方法を紹介していこうと思います。

### 本文
まずは、どの画面からでも呼び出せるように`FirebaseTrackingEvent`の`interface`を作っていきます。

“`kotlin
interface TrackingService {
fun track(
trackingEvent: TrackingEvent,
)
}
“`
次に、`interface`の本実装をしていきます。

“`kotlin
class TrackingServiceImpl @Inject constructor(
private val firebaseAnalytics: FirebaseAnalytics
) : TrackingService {
override fun track(trackingEvent: TrackingEvent) {
firebaseAnalytics.logEvent(
tra

元記事を表示

旅先でクラウド上のWindowsサーバにRDP接続

この記事には、目新しい技術は書かれていません。既成のアプリケーションの使い方のひとつが紹介されているだけです。

旅先でクラウド上のWindowsサーバにRDP接続したいな、という機会は、僕にはたくさんあります。PCを使える状況であればPCを使えば良いのですが、例えば電車の中などでPCを使えない、あるいはPCは使えるけどそれも面倒という場面も僕にはたくさんあります。
こんなときのために、僕にはセルフォンがあるのです。
## 外部からの接続
外部から目的のWindowsサーバにRDPで接続するには、間にSSHが配置され、このSSHがポートフォワードしてくれる、というのが前提です。当然ながら、SSH接続には鍵が必要というのも前提です。
つまり、何の変哲もない一般的な構成です。
## 僕を助けてくれるAndroidアプリ
こういった場面で僕を助けてくれるAndroidアプリは以下の2つです。どちらか1つというわけではなく、2つがタックで助けてくれます。

– ConnectBot
– Remote Desktop

これらはよく配慮された機能をもち、かつ余分な機能を持たないという、セルフォン

元記事を表示

Firebaseプロジェクトの作成(Flutter)

## 概要
FlutterアプリとFirebaseを接続するための準備をします。
Firebaseの設定~Flutterプロジェクトのビルドが通るようになるまで

### 前提
デフォルトのカウントアプリを改変して作っているので、
諸々名前が違かったらごめんなさい!
メモ程度でしかないので、ご参考までに〜

## Android
![スクリーンショット 2022-06-30 18.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462497/ea1c6e5c-6ae0-13ae-c8a5-e70778cf7166.png)

/{PROJECT_NAME}/android/app/src/main/AndroidManifest.xml
にある
“`

“`

PACKAGE_NAMEをコピーし、

元記事を表示

テストでandroid.view.InflateException: Binary XML file line #9となっていた時の対処メモ

# やりたかったこと
Navigatorのテストを書きたくてやってみましたが、動かなかったのでメモ
## 動かなかったコード
“`Kotlin
@RunWith(AndroidJUnit4::class)
class NavigatorTest {
@Test
fun testNavigation(){
val navController = TestNavHostController(ApplicationProvider.getApplicationContext())

val topScenario = launchFragmentInContainer()

topScenario.onFragment{fragment ->
navController.setGraph(R.navigation.nav_graph)
Navigation.setViewNavController(fragment.requireView(),navCo

元記事を表示

Android12で起こったPendingIntentエラーについて(Chuckライブラリ)

# はじめに
Android12からPendingIntentにフラグの設定が必要になったのですが、使用していた[Chuckライブラリ](https://github.com/jgilfelt/chuck)にもその影響がありエラーになってしまいました。
今回はそのエラーの対応方法についてご紹介します。

# 開発環境
PC:MacBook Pro
OS:macOS BigSur
Android Studio:Arctic Fox 2021.1.1

# PendingIntentのエラー対応方法
SDKバージョンを31にしてアプリを実行した際に、PendingIntentを使用している箇所で以下のようなエラーが出る場合があります。
“`
PendingIntentを作成するときにFLAG_IMMUTABLEまたはFLAG_MUTABLEのいずれかを指定する必要があります。
FLAG_IMMUTABLEの使用を強く検討してください。
たとえば、インライン応答やバブルで使用する必要がある場合など、
一部の機能がPendingIntentの変更可能性に依存している場合にのみ、FLAG_MU

元記事を表示

TB(D)RにおけるGPU時間の計測に関する注意; スマホ?でdraw callのGPU時間は計測できない

クリックベイトサムネイル:
![RenderDoc Event Browser](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100016/b975b455-1140-3bd8-4341-b9ece3e5c56c.png “RenderDoc Event Browser; スマホで Duration の値に意味はない”)
これだけでは何の説得力も無いので, ここではこれらGPUアーキテクチャの動作をはじめ, ドライバの開発者の発言やソースコードの引用を含めた様々な根拠や状況証拠などを挙げて論証する.

# TL;DR

##### 結論
モバイル端末のGPUにおいて, render pass 内のGPUタイムスタンプは, 何らかの意味をなす値を持たない:
– draw call(s) ごとのGPU時間の計測を考えることはできない; そのように呼べる実行の単位そのものが, 存在しない.
– 意味をもって計測できるグラフィクスパイプラインのGPU時間の最小の単位は render pass (≈レンダーターゲット

元記事を表示

Jetpack Compose で Todo アプリを作ってみた

Jetpack Compose は革命かもしれません。

![Reflector Recording.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/c6166770-b97c-a7d5-af6f-d6ed56140d33.gif)

View に関わるファイルはこれだけ。

RecyclerView, RecyclerViewAdapter, ViewHolder など不要です。

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

val items by viewModel.items.collectAsStateWithLifecycle(initialValue = emptyList())
val target by viewModel.target

Column(
modifier = Modifier.fillMaxSize(),

元記事を表示

【Android】たまに出てくるFirebaseってなんなの?

# はじめに
Android開発をやっていてたまに目にする **「Firebase」** という言葉が気になったので、調べたものを記事に残します
Firebaseの公式サイトを見て、どういったものなのかをまとめたものです

# Firebaseとは
Firebase公式サイトでは
>Firebase は、優れたアプリを開発し、ユーザーベースを拡大し、収益を高めるためのツールです。インフラ構築に手間取ることなくビジネスを収益化し、ユーザーにとっての利便性に集中できます。

とあります。

アプリで使われる、クラウドから提供するサービスの一つ ということですね
Javaコードを書くだけで簡単にサーバーとのやり取りができるのが魅力的ですね

# Android プロジェクトに Firebase を追加する
Firebaseをアプリに追加するには、Firebaseコンソールから Firebase構成ファイルをダウンロードし、Androidプロジェクトに移動させるなどの、タスクを行います

方法1
1.Firebaseプロジェクトを作成し、androidアプリに接続します
2.Firebas

元記事を表示

【Flutter】インテグレーションテストでスクリーンショットを自動で取得する。

Flutterを使って個人で以下のスマホ向けのおみくじアプリ(大御心アプリ)を開発・運用しています。

Screenshot_home.png
Screenshot_fortune_1.png
Screenshot_fortune_2.pngAndroid13から使えるようになるAGSLを試してみた

Android13から使えるようになるAGSL(Android Graphics Shader Language)を試してみました。
Shaderの導入を検討している方、導入してみたいけど何をすればいいか悩んでいる方の助けになれば幸いです。

# 開発環境
– Macbook Pro OS Catalina 10.15.7
– Android Studio Electric Eel | 2022.1.1 Canary 8
– Kotlin
– Pixel6 Android13 β(エミュレータ)

# 参考元
[公式](https://developer.android.com/guide/topics/graphics/agsl/using-agsl#kotlin)を参考に試しました。

# STEP1
いつもどおり新規にプロジェクトを作成します。
今回はJetpack Composeではなくxmlで作成しています。

# STEP2
カスタムViewを作成してactivity_main.xmlにサンプルとして320dp x 240dpの作成したカスタムViewを配置します。
公式

元記事を表示

Androidエミュレーターの位置情報を好きな位置に設定する方法

今回はAndroidエミュレーターの位置情報を好きな位置に設定する方法を書いていこうと思います。

# Androidエミュレーターの位置情報を設定方法

![スクリーンショット 2022-07-23 15.42.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/dc04963e-1a46-c79b-00d6-f5ea36bc7bc4.png)

まずはエミュレーターを起動し、一番右の三点リーダーをクリックします。

そうするとこの様な画面が立ち上がります。

![スクリーンショット 2022-07-23 15.57.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/8eb81fe5-14f5-70eb-66fe-e6efc638d1f9.png)

位置情報を設定したい箇所にクリックします。
その後右下のSetLocationをクリックすると位置情報が変更されます。

簡単に位置情報を変

元記事を表示

buildSrcディレクトリ で gradleタスクを作成する際にKotlinを使用するにはkotlin gradle pluginの適用が必要

# サマリー
`buildSrc`ディレクトリを用いてgradleタスクを作成する際にKotlinを使用するには、kotlin gradle pluginの適用が必要でした。
具体的には、`buildSrc`直下に以下のような`build.gradle`を追加する必要があります。

“`buildSrc/build.gradle
// デフォルトで適用される分
// http://gradle.monochromeroad.com/docs/userguide/organizing_build_logic.html
apply plugin: ‘groovy’
dependencies {
implementation gradleApi()
implementation localGroovy()
}

// 以下カスタム
apply plugin: ‘kotlin’ // これがないと、buildSrc/arc/main以下にKotlinファイルを置いても実行できなくなる(Ctrl+Bでのジャンプでは認識されるけど)
buildscript {
repo

元記事を表示

StateFlowでUiStateとEvent管理をする

以前アドベントカレンダーでこちらのQiita記事を書きました。

https://qiita.com/yasukotelin/items/3a6afe861cc9345118d6

この記事が今でもちょいちょいLGTMをもらっているのですが、肝心の自分はこの書き方を全くしておらず、UiのStateもイベントもStateFlowで管理しているので改めて書こうかなと思います。

## まえおき

このStateの管理の仕方は、Android公式を読んでの書き方になっています。

https://developer.android.com/topic/architecture/ui-layer/events

イベント管理をストリームやChannelを使ってイベントバス的に実装するのではなく、イベントも状態として実装しましょう。というようなことが書いてあります。
とは言え現実問題として、消費型のイベントもあります。例えばSnackbar表示やツールチップ表示、画面遷移などです。
これらの消費型のイベントは、文字通り状態を消費することで表現できます。つまり、そのイベントを消費したら空の値なんな

元記事を表示

MS/Azure関連ニュースメモ:Windows Subsystem for AndroidのTips and Tricks

https://blogs.windows.com/windowsdeveloper/2022/07/14/windows-subsystem-for-android/

まだ日本に展開されていないWindows Subsystem for Androidについて以下のTipsが紹介されています。

水平スワイプ

Shiftキーを押しながらスクロールホイールを使用すると、水平方向のスワイプに変換することができます。

2本指のスワイプ

ALTボタンを押しながらマウスでクリックやドラッグをすると、2本指でのタッチやスワイプがアプリケーションに送信されます。

ゲームパッドのサポート

ゲームパッドに対応したアプリで使用することができます。

この記事の内容は以下でも紹介されていました

https://forest.watch.impress.co.jp/docs/news/1426/583/amp.index.html

元記事を表示

ビルドに使用するJavaバージョンを切り替える方法

# はじめに
gradleファイルに定義しているJavaのバージョンを切り替えた後、AndroidStudio側の設定を変えずにビルドすると、ビルドエラーになります。
上記エラーになった場合の対応として、設定の切り替え方を残しておこうと思います。

# 設定の切り替え方
①Android StudioのPreferesceから設定を開きます。
②以下スクショに沿って、Build,Execution,Deployment→Build Tools→Gradleと開いていきます。
![スクリーンショット 2022-07-23 20.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/7e0ca5ec-01f3-dbc6-f7f8-f8282934a9f3.png)
③上記開いていった先のGradle画面にて、Gradle JDK項目欄のJavaバージョンを任意のものに切り替えます。
![スクリーンショット 2022-07-23 20.15.32.png](https://qiita-ima

元記事を表示

長くないAndroid端末の見分け方

Titan Slimを入手したので、その他の特殊な画面サイズの端末と一緒にリソース解像度を取得しました。

“`MainActivity.kt
val qualifier = getString(R.string.qualifier)

val configuration = resources.configuration
val dpHeight = configuration.screenHeightDp
val dpWidth = configuration.screenWidthDp
val density = configuration.densityDpi
val swdp = configuration.smallestScreenWidthDp
val aspect = resources.configuration.screenLayout

val LongNo = (aspect and Configuration.SCREENLAYOUT_LONG_NO) != 0
val LongYes

元記事を表示

OTHERカテゴリの最新記事