- 1. Android Studioでビルドのときに「Run」タブが開かないようにする
- 2. 「ファイル内のapkファイルを(順番を制御して)インストールするバッチを作成するバッチ」を作成する
- 3. 【備忘録】Android Studio ショートカットキー
- 4. Android Library を自作してJit pack に公開する時の備忘録
- 5. Emacs for AndroidをTermuxと一緒に使う
- 6. TextViewをコピーできるようにするには(XML&Compose)
- 7. 【Jetpack Compose】WebViewにpull-to-refreshを実装しようとしたらハマったこと
- 8. 「debug」と「attach debugger to android process」の違い
- 9. CastContext.getSharedInstance(context: Context)のdeprecated対応
- 10. Androidスマホ/タブレットにTermux/google-home-playerをインストールしてアラーム指定日時に各部屋のGoogle Home(Google Nest)を喋らせる
- 11. KMP (Kotlin Multiplatform)の導入検討
- 12. AndroidアプリをGoogle Play Consoleから公開するときにこまったこと
- 13. 【Android】アプリアイコンをさくっと作成する方法
- 14. Androidアプリのproguardで画像が表示されなくなる件
- 15. google-home-notifierもGoogle Nestも使わずにAndroidだけでTermuxを使って喋らせる
- 16. 【Android】Android端末の画面サイズを取得する【Kotlin】
- 17. android.util.PairはUnitテストではfirst==null & second==null になる
- 18. EmacsのAndroidポートのビルド
- 19. 【Android】SearchViewをComposeで実装する
- 20. Jetpack Composeでスクレイピングしてみた
Android Studioでビルドのときに「Run」タブが開かないようにする
Android Studioではデフォルトでビルドが完了するたびに「Run」タブが開きます。「Logcat」など他のタブを同じエリアで開いている場合閉じてしまうので、少し不便でした。ということで自動で「Run」タブを開かないようにする設定方法のメモです。
### 「Edit Configurations..」を開く
### 「Activate tool window」のチェックを外す
「General」などどのタブを選択中でも表示されますが、Windowサイズによっては下方向にスクロールしないと表示されないかもしれません。
「ファイル内のapkファイルを(順番を制御して)インストールするバッチを作成するバッチ」を作成する## はじめに
こんにちは。
AndroidOSの組み込み機器向けのアプリ開発を1年ほどやっています。業務上、複数のapkファイルを一斉にインストールさせるバッチファイル(この記事内では_install.batと呼ぶ)を作成する機会が多く、そのたびに手動で作成するのが手間でした。
今回_install.batを自動で作成してくれるバッチファイルを作成することにしたので備忘録として方法を記します。なお、筆者はバッチファイルについての知識は素人に毛が生えたレベルでしかないので間違いやおかしなところなどあればご指摘いただければ幸いです。
## 目次
[順番を制御しない場合](##-順番を制御しない場合)
[順番を制御したい場合](##-順番を制御したい場合)
[おわりに](##-おわりに)## 順番を制御しない場合
“`bat:_makeInstallBat.bat
@echo off
:: 作成/上書きするバッチファイル
set BAT=_install.bat:: _install.batを新規作成し、先頭にpauseを書き込み;
echo pause> %BAT%
【備忘録】Android Studio ショートカットキー
【Mac】 command + W → ファイル閉じる
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.Pairclass 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で処理されます