Android関連のことを調べてみた2023年10月13日

Android関連のことを調べてみた2023年10月13日
目次

Android Library を自作してJit pack に公開する時の備忘録

## 概要

Android Library を自作してJit pack に公開する時に遭遇した
エラーなどを備忘録的に残しておきたいと思います。

## 基本的な流れ

https://qiita.com/takagimeow/items/a62ba44c11117740c018#%E3%81%BE%E3%81%A8%E3%82%81

こちらの神記事をフォローします。

## いくつかの変更点と備忘録

ただ、いくつか変更した箇所がありました。

### build.gradle.kts

私の場合、build.gradle でなく、
build.gradle.kts (kotlin) を使っていたので、
app レベルのbuild.gradle.kts には

“`build.gradle
afterEvaluate {
publishing {
publications {
// Creates a Maven publication called “release”.
release(MavenPub

元記事を表示

Emacs for AndroidをTermuxと一緒に使う

# Emacs for AndroidをTermuxと一緒に使う

[0. 前書き](#0-前書き)

[1. Termuxのバックアップと再インストール](#1-Termuxのバックアップと再インストール)

[2. Emacs for Androidの設定](#2-Emacs-for-Androidの設定)
[2.1 early-init.elの作成](#21-early-initelの作成)
[2.2 init.elの作成](#22-initelの作成)

[3. 結び](#3-結び)

# 0. 前書き
前記事となる[EmacsのAndroidポートのビルド](https://qiita.com/ayatakesi/items/c857c907c8c7e675da9e)では、Emacsのmasterブランチ(いずれ次バージョンであるemacs-30になるブランチ)にmergeされたEmacsのAndroidポートについて、現時点で盛れる機能すべてを盛ったバージョンを付属するドキュメントにしたがってビルドした体験を記しました。その記事ではでは少ししか触れませんでしたが、そのビルド

元記事を表示

TextViewをコピーできるようにするには(XML&Compose)

# XML
XMLのTextViewに以下のコードを追加します
“`xml
android:textIsSelectable=”true”
“`
これだけでテキストのコピーが可能になります
コード上から変更する場合には`setTextIsSelectable()`を使用することで変更可能です。

ただしこれをtrueにすることで`focusable`, `focusableInTouchMode`, `clickable`, `longClickable`のフラグも同じくtrueになるのでコード上から変更する際には注意が必要です。

# Compose
テキストを`SelectionContainer`でラップすることでコピー可能になります
“`kotlin
@Composable
fun SelectableText() {
SelectionContainer {
Text(“This text is selectable”)
}
}
“`
また、コピー可能テキストの中の一部のみコピー不可にしたい場合は`DisableSelection`でラ

元記事を表示

【Jetpack Compose】WebViewにpull-to-refreshを実装しようとしたらハマったこと

# はじめに
現在(2023/10/10)Jetpack Composeでは、WebViewを使うにはAndroidViewで囲む必要があります。対して、pull-to-refreshはJetpackComposeに実装されているPullRefreshと以前のViewのSwipeRefreshLayoutがあります。

結論、SwipeRefreshLayoutで解決しました。

# WebView
Jetpack Composeでは、WebViewを使用するためにはAndroidViewというラッパーを用いてその中にWebViewを配置する必要があります。AndroidViewはJetpack Composeのコンポーザブルから従来のViewシステムを使うための架け橋的存在です。
以下にコード例を示します。

“`kotlin
@Composable
fun WebViewContainer() {
AndroidView(factory = ::WebView) { webView ->
// WebViewの設定をここで行う
webVie

元記事を表示

「debug」と「attach debugger to android process」の違い

「普通のDebug」と「Attach Debugger to Android Process」の違い

前者はアプリ起動時からデバッグする。
後者は既にアプリが起動した後にデバッグする。

起動時の画面に変化が無いかの確認等でよく使うのは前者。
起動した後の画面から特定のボタンやビューをタップした後の動作を確認するときに使うのが後者。

元記事を表示

CastContext.getSharedInstance(context: Context)のdeprecated対応

`CastContext.getSharedInstance(context)` が deprecated になり、Taskを渡して取得する方法が推奨されるようになりました。

https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastContext#getSharedInstance(android.content.Context)

公式の[Sample](
https://github.com/googlecast/CastVideos-android/blob/99d3de47890c7c02650db45dda806b5255d27787/app-kotlin/src/main/kotlin/com/google/sample/cast/refplayer/VideoBrowserActivity.kt#L92)では以下の使い方をしていますが、この方法だと困ったことにうまく取得できません。

“`kotlin
val castContext =

元記事を表示

Androidスマホ/タブレットにTermux/google-home-playerをインストールしてアラーム指定日時に各部屋のGoogle Home(Google Nest)を喋らせる

### Androidスマホ/タブレットにTermux/google-home-playerをインストールしてアラーム指定日時に各部屋のGoogle Home(Google Nest)を喋らせる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123229/936fb6b5-4b18-d437-cce4-ad0c926407dc.png)

### 今回は各部屋に置いてある複数台のGoogle Home(Google Nest)を喋らせます

今回はAndroidスマホ・タブレットを直接喋らせるのではなく、「各部屋に置いてある複数台のGoogle Home(Google Nest)を喋らせる」方法について書きます

### 前回の記事の続きになります

前回の記事「Androidスマホ/タブレットにTermuxをインストールしてアラーム指定日時に自由に喋らせる」の続きになります

Androidスマホ/タブレットだけを使ってAndroid自体にアラーム指定日時に喋らせるだけであれば前回の記

元記事を表示

KMP (Kotlin Multiplatform)の導入検討

はじめに

本田技研工業でAndroidAutomotiveOS向けのアプリ開発を担当している松村です。
新規アプリを作成するにあたって、マルチデバイスに対応できる拡張性を持たせた構成にしたいという考えから
KMP(Kotlin Multiplatform)の検討をいたしましたので軽く紹介したいと思います。

まず最初に

[最近まで使われていたKMM(Kotlin Multiplatform Mobile)という名称は廃止され、
KMP(Kotlin Multiplatform)に名称を統一されました。](https://blog.jetbrains.com/ja/kotlin/2023/08/update-on-the-name-of-kotlin-multiplatform/)

なぜKMPを検討したのか

他にもクロスプラットフォーム([Flutter,](https://flutter.dev/) [.NET MAUI](https://dotnet.microsoft.com/en-us/apps/maui), [ReactNative](https://dotn

元記事を表示

AndroidアプリをGoogle Play Consoleから公開するときにこまったこと

 Godot4.1.1で開発したゲームをGoogle Playで公開しました。

https://play.google.com/store/apps/details?id=com.footinglow.android.tiltslalom&pli=1

 その時に参考にしたサイトと、困ったけど解決した方法などまとめます。

# 参考にしたサイト
 こちらのサイトを参考にしました。大変お世話になりました。

https://pursue.fun/tech/how-to-android-app-release-overview/

# Google Play Consoleの登録で悩んだこと
 JCBカードで支払いできました。
 それ以外はネットで調べた内容で、迷わず登録できました。

# Google Play Consoleで「アプリを作成」
 Google Play Consoleの「アプリを作成」ボタンを押下すると、アプリケーションの情報登録が始まります。
 たくさんの情報を登録しますが、その中に「プライバシーポリシー」の「url」を登録する必要があり、面食らいましたが、下記のサ

元記事を表示

【Android】アプリアイコンをさくっと作成する方法

アプリのアイコンが付いていないとコードを書く気が出ない・・・そんなときに、とりあえずそれっぽいアイコンをさくっく作成する方法です。先日、[iOS](https://qiita.com/yuppejp/items/0cc2b8276d215cc24f14)でやったので、今回はAndroidでもやってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/94d4cae1-1dd4-071f-5e71-0678fa4186a4.png)
↑ やる気がでないやつ

# アプリアイコンの作成の流れ
1. アイコン画像を表示するViewを作成
1. Viewのスナップショットをファイルに保存(PNG)
1. Android Studioでアイコン画像を設定

## アイコン画像を表示するViewの作成
Jetpack Composeで[マテリアルアイコン](https://developer.android.com/reference/kotlin/androidx/compose

元記事を表示

Androidアプリのproguardで画像が表示されなくなる件

# 問題
過去にリリースしたアプリに取り込んでいる各種ライブラリの最新化などメンテしていた際に
proguardまわりを見直していたら、突如画像が出力されなくなった。
![スクリーンショット 2023-10-09 11.47.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183689/7557ea95-6646-7d46-de38-8ed71f2befd7.png)
画像1.正しく表示されている例
![スクリーンショット 2023-10-09 11.47.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183689/875e097a-bcb4-6f47-73fd-f50389f04142.png)
画像2.正しく表示されていない例

# 原因・解決方法
build.gradle(:app)のbuildTypesに「shrinkResources true」を追加したことが原因。
これを削除したことで問題なく画像

元記事を表示

google-home-notifierもGoogle Nestも使わずにAndroidだけでTermuxを使って喋らせる

## google-home-notifierもGoogle Nestも使わずにAndroidだけでTermuxを使ってアラーム指定日時に自由に喋らせる

Androidスマホ/タブレットにTermuxというLinuxアプリをインストールして、アラーム指定日時に自由に喋らせる方法について書きます

(※)説明が長くて難しそうに見えるかもしれませんが、Androidのアプリをインストールして実行してるだけなので非常に簡単です(一部Linuxコマンドの実行がありますが、それも簡単です)

(※)バックグラウンド常駐動作なので、スマホをスリープにしていても、スマホで他の操作をしていても動きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123229/40edd070-7e7d-a3f8-b79d-7d630ccd3323.png)

### 一般のスマホ・タブレット系の音声例

(例)Redmi Note 9S

https://nisimura.org/wp-content/upload

元記事を表示

【Android】Android端末の画面サイズを取得する【Kotlin】

# 実践

val textViewX = findViewById(R.id.text_view_x)
val textViewY = findViewById(R.id.text_view_y)

val display: Display = this.windowManager.defaultDisplay
val point = Point()
display.getSize(point)

textViewX.text = point.x.toString()
textViewY.text = point.y.toString()

参考記事から抜粋し、JavaからKotlinに変換したものです。
参考記事ではバージョン毎に処理を追加していますが、当時の環境のバージョンは現状なかなかないと思いますので、そこは省いて最小限の内容にしてあります。

# 結果

![Screenshot_2023-10-08

元記事を表示

android.util.PairはUnitテストではfirst==null & second==null になる

# 環境
– `androidx.core.core` : v1.9.0
– kotlin : v1.8.10
– `compileSDK` : 33
– `org.robolectric:robolectric` : v4.10.3

# 起きたこと
“`kotlin
class ExampleUnitTest {
@Test
fun testA() {
val pair = Pair(1, 2)

assert(pair.first == 1)
assert(pair.second == 2)

}
}
“`

こんなテストを、実行するとなぜか失敗。

# 原因

→原因は、ここで呼んでいた`Pair`が`android.util.Pair`だったから。

“`kotlin
import android.util.Pair

class ExampleUnitTest {
@Test
fun testA() {
val pair = Pair(1, 2)

元記事を表示

EmacsのAndroidポートのビルド

# EmacsのAndroidポートのビルド

[0. 前書き](#0-前書き)

[1. 手順](#1-手順): ビルド用レポジトリを用意手順をさっくり説明
[1.1 レポジトリの準備](#11-レポジトリの準備)
[1.2 forkする](#12-forkする)
[1.3 ローカルにclone](#13-ローカルにclone)
[1.4 作業用ブランチのcut](#14-作業用ブランチのcut)
[1.5 リモートにpush](#15-リモートにpush)
[1.6 デフォルトブランチの設定](#16-デフォルトブランチの設定)

[2. ワークフローファイル](#2-ワークフローファイル)
[2.1 ワークフローファイルのadd](#21-ワークフローファイルのadd)
[2.2 リモートにpush](#22-リモートにpush)

[3. ビルド](#3-ビルド): ビルドする手順(詳細略)
[3.1 ワークフローをrun](#31-ワークフローをrun)

[4. ワークフローで行っていることの説明](#4-ワークフローで行っていることの説明)
[4.1 ワークフローの定義]

元記事を表示

【Android】SearchViewをComposeで実装する

# はじめに
だいぶComposeで実装しやすい環境が整ってきましたが、AndroidViewの機能であるSearchViewをComposeで実装したらどんな感じになるのか調べる機会がありましたので、備忘録的に残しておこうと思います。

# SearchViewをComposeで実装する
まず旧実装は以下になります。

“`main.xml

“`
Composeが普及してきているとはいえ、XMLを使用したAndroidViewの実装はまだまだ現役ですよね。
上記に対してComposeの実装は以下になります。

“`main.kt
val focusManager = LocalFocusManager

元記事を表示

Jetpack Composeでスクレイピングしてみた

# はじめに
どうも、フリーランスエンジニアをしているモブ太郎です。
このの記事では、Jetpack Composeで「Jsoup」というライブラリを使用して、スクレイピングをしたいと思います。
細かい説明は省いていますので、参考程度、こういったものがあるんだな程度に見ていってください。

# 完成形
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3331610/7495d370-2592-5283-a253-2c8fa334ad5a.png)

# Jetpack Composeとは
Jetpack Composeは、ネイティブUIをビルドする際に推奨されるAndroidの最新ツールキットのことです。
Jetpack Composeを導入する理由は以下になります。
– **コードを削減**
少ないコードで多くの機能が可能になり、あらゆる種類のバグが避けられるので、コードがシンプルで維持しやすくなります。
– **直観的**
UIを記述するだけで、残りの部分はComposeで処理されます

元記事を表示

ElixirDesktop Android Exampleを参考にAndroidアプリを1から作ってみる

# はじめに
本記事は以下を参考にAndroidStudioでプロジェクトを作るところから初めて
実際に起動するまでの手順の備忘録です

https://github.com/elixir-desktop/android-example-app

# プロジェクトを新規に作成
Native C++ を選択
![スクリーンショット 2023-10-07 21.18.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64198/12b9ee06-2e0d-2207-7d91-65add479745b.png)

Save Locationは phoenix_pj/native/android に設定
Minumum SDKはお好きに自分は10.0にしました
gradleはElixirDesktopに合わせてgrooby DSLにする .ktsにしない

![スクリーンショット 2023-10-07 0.21.38.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

Godotでaabファイルつくってアプリ公開しました

 Godot4.1.1で開発したゲームをGoogle Playで公開しました。
 ご興味があれば是非一度遊んでみてください。

https://play.google.com/store/apps/details?id=com.footinglow.android.tiltslalom&pli=1

 Google Playにアプリを公開するためには、apkファイルではなく、aab(Android App Bundle)というファイル形式にする必要があります。デジタル署名も必要です。その方法をまとめました。

:::note info
GoogleのAndroid Developperを参考にしました。というかそのままです。
https://developer.android.com/games/engines/godot/godot-export
:::

# APKファイルエクスポートの設定
 事前にAPKファイルのエクスポートができるようにしましょう。ここのプロジェクト設定や、デバッグ用キーストアの設定がaabファイルの作成にも必要です。

https://qiita.com/F

元記事を表示

【Flutter】ListViewを無限ループスクロールできるようにしてユーザーを幸せにする。

どうも、個人でアプリ開発をしているYuKiOです。

「最高にかっこいいメモアプリHacker Memo」や「社会や街の安全に貢献するためのプラットフォームアプリみんなのチカラ」などアプリを15本リリースしています。

今回の記事は、ListViewで作成したボタン一覧を無限ループでスクロールする方法を紹介したいと思います。

色々調べましたが、なかなか良い解決策がなかったので記事にしてみました。

もし、もっと楽な方法があれば、教えて欲しいです。

## 実現したかったこと
水平にスクロールして選択できるカテゴリ選択ボタンリストがあります。左右どちらにスクロールしても、前後が繋がってリストが表示され続ける無限ループのに表示したい考えました。無限ループにすることで、両端のボタンに素早くアクセスできるようになることで快適になり、ユーザーが幸せになると考えたからです。

例えばリストのアイテム数が決まっている場合や、そこまで数が多くない(多くても20くらい)ことが想定される場合に限定される要望だと思いますが、以下のようにカテゴリ選択で今回は実装しました。

![IMG_2094.jpg](

元記事を表示

OTHERカテゴリの最新記事