- 1. Raspberry Pi4をAmazonプライムビデオ専用機に2
- 2. Android Studio でプロジェクトを作成後にリネームする
- 3. onNewIntentで状態を更新する(Jetpack Compose)
- 4. Ubuntu 20.04でCommand line toolsのダウンロードからAndroidエミュレーターを動かすまで
- 5. Jetpack Compose チュートリアルをただやってみるだけの記事 #1
- 6. Android のパッケージの公開設定
- 7. Android: Github Actions での最適な Gradle ビルドキャッシュ戦略
- 8. MotionLayoutの例を試してみる(ImageFilterView)
- 9. マテリアルなUIを単独で使用する方法
- 10. 接続中の複数のAndroidデバイスに一括でadb installするコマンド
- 11. Androidの画面分割で固定指示してた画面が勝手に回転してさらにアクティビティが勝手に再生させられてしまう件
- 12. Android開発のSDKでつまづいた
- 13. Android12でFLAG_IMMUTABLEでクラッシュする件の対応
- 14. Androidアプリエンジニアがよく見るサイトとチュートリアル
- 15. CardViewの影をxmlで消す
- 16. Compose Material3におけるComponentの対応状況
- 17. サーバに配置したWebViewのコンテンツからスマホのネイティブアプリのURLスキームの呼び出し方法
- 18. 【2022最新】Androidスマホのシステム音声とマイク音声をパソコンにミラーリングする方法
- 19. 別画面からのリロード処理トリガーを実装したい
- 20. [Android]GroovyからKTSに移行によるメリデメを調査
Raspberry Pi4をAmazonプライムビデオ専用機に2
# Raspberry Pi4をAmazonプライムビデオ専用機に2
なんのことはないですが、1年ほど使用していて動作が不安定になってきたので
最新のLineageOSを再導入してみました。
目的は、Raspberry Pi4をAmazonプライム専用機として最導入しただけです。## 1.Raspberry PiにLineageOSを導入
### 1.1 LineageOSのダウンロード
[LineageOS 18.1 (Android 11) for Raspberry Pi 4](https://konstakang.com/devices/rpi4/LineageOS18/)上記サイトから「lineage-18.1-20210214-UNOFFICIAL-KonstaKANG-rpi4.zip」をダウンロードして、展開しておきます。
### 1.2 MicroSDカードへの書き込み
前回、同様にこのimgファイルをMicroSDカードに焼くには、[balenaEtcher](https://www.balena.io/etcher/)を使います。(v1.5.109
Android Studio でプロジェクトを作成後にリネームする
ささいなことではあるのですが
Android Studio でプロジェクト作成後に,
ちょっと気に入らないとか typo を後で発見したという理由で,
プロジェクト全体の名前をリネームしたいときがあるかもしれません.実際,適当なプロジェクトをつくって
名前を変えたいなと後で思ったのですが,
実際のところ意外と面倒であるということが分かったので,
あまりオススメされないとは思うものの
どんなものかメモとして書き残そうと思います.## まず,そのままリファクタしてみよう
`myproject1` というプロジェクトを `mysuperproject1` にリネームすることを考えます.
プロジェクトとしてルートモジュールを `Refactor` > `Rename…` からリネームできそうなので試みるのですが,
実はこれはできないということがわかります:![myproject1_–_MainActivity_kt__myproject1_app_-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c
onNewIntentで状態を更新する(Jetpack Compose)
# はじめに
Jetpack Composeを使用している状況でActivityの`onNewIntent`や`onActivityResult`でアプリの画面状態を更新する方法についての記事となります。
Jetpack Composeでは状態を`MutableState`として保持し、`remember`を使用することで再Compose後も状態を保持することができます。ただしこれら基本的に特定のComposable関数以下のスコープ内に制限されてしまい、`onNewIntent`や`onActivityResult`からどうやって更新すればいいんや~だったたのでコードを書いてみたという流れになります。# やったこと
方針としては`MutableState`をActivityのメンバとして保持し、その値を`remember`でComposable関数に記憶させます。
1.Activityのメンバ変数に`MutableState`で変数を持たせる。
ここで定義した値を`onNewIntent`や`onActivityResult`で更新し、それらを読みこむComposable関数
Ubuntu 20.04でCommand line toolsのダウンロードからAndroidエミュレーターを動かすまで
## はじめに
Android Studio経由の説明が多いので、Command line toolsのダウンロードからAndroidエミュレーターを動かすまでの手順を残しておく。
## 環境変数ANDROID_SDK_ROOTの設定
Command line toolsはじめ、sdkをインストールするフォルダのルートをANDROID_SDK_ROOTとして環境変数に設定する。
例えば、/home/user/android/sdkを環境変数に設定する場合は、以下の通り。
~/.bashrcに書いておく。“`bash
$ export ANDROID_SDK_ROOT=/home/user/android/sdk
“`## javaのインストール
aptコマンドを使って、openjdkをインストールする。今回はopenjdk-17を使用した。
あとはPATHを通しておく。“`bash
JAVA_HOME=”/usr/lib/jvm/java-1.17.0-openjdk-amd64″
“`## Command line toolsのダウンロード
以下か
Jetpack Compose チュートリアルをただやってみるだけの記事 #1
# 初めに
この記事は、Jetpack Compose未経験のしがないAndroidエンジニアが[チュートリアル](https://developer.android.com/jetpack/compose/tutorial?hl=ja)をやってみるだけの記事です。
先日のメルカリのイベント [Android Office Hours〜2022年の技術トレンド大予想!〜](https://www.youtube.com/watch?v=8-ifCGQ20tg)でも、Jetpack Composeは今後Android開発においてデファクトスタンダードになっていくだろうと予想されていました。
Android開発で食べていく以上触っておかないといけないだろうと思い、とりあえずチュートリアルをやってみることにしました。# Jetpack Composeとは
Jetpack Composeは、GoogleがリリースしているAndroidのUI実装のツールで宣言的なUIフレームワークであるという特徴があります。
宣言的UIとは状態をUIに変換するという考え方です。
従来のXMLを用いた開発で
Android のパッケージの公開設定
パッケージの公開設定について、ハマったので記事にしておきます。
###### 問題の発生状況
Android 11 より前ではバインドできていたサービスが、下記の warning が出て見つからなくなった。
“`console
02-13 17:21:00.089 542 3921 W ActivityManager: Unable to start service Intent { act=com.ykato.sampleservice.ISampleService pkg=com.ykato.sampleservice } U=0: not found
“`###### アプリの構成
サービス (com.ykato.sampleservice)は apk としてインストールしてあり、それを テスターのサンプルアプリ(com.ykato.sampleservicetester
)からバインドして使っていました。###### 原因
下記に、記載がある通り Android 11 から自動的に公開されるアプリが制限されました。https://developer.
Android: Github Actions での最適な Gradle ビルドキャッシュ戦略
Github Actions で Android Gradle プロジェクトをビルドするときの最適な Cache 戦略をまとめます。
Android Gradle の Cache 戦略について解説していますが、Cache の種類 (Build Tool Cache, Dependencies Cache, Build Cache) の考え方は他の種類のプロジェクトにも通用します。
## 前提
以下の構成を前提とします。
* Gradle Kotlin DSL (build.gradle.kts / settings.gradle.kts)
* Gradle Version Catalog 使用
* buildSrc 使用
* Kotlin Multiplatform 使用
* Kotlin Native Compiler 設定だけに影響します## Github Actions Cache 設定
週次 Cache クリアを採用した場合の Cache 設定はこちらです。
“`yml
…
jobs:
build:
runs-on: ubuntu-la
MotionLayoutの例を試してみる(ImageFilterView)
前回はカスタム属性をやりました。
[カスタム属性](https://qiita.com/yuta317/items/a1fe49c5b705d442d484)今回はImageFilterViewを試していこうと思います。
# 公式リファレンス
https://developer.android.com/training/constraint-layout/motionlayout/examples?hl=jahttps://developer.android.com/training/constraint-layout/motionlayout/ref?hl=ja
# ImageFilterView
今回はビューの移動に伴ってビューの彩度の値を変更しようと思います。
リンク先に公式サンプルがあります。
[ImageFilterView](https://developer.android.com/training/constraint-layout/motionlayout/examples?hl=ja#imagefilterview_-_image_transiti
マテリアルなUIを単独で使用する方法
# はじめに
マテリアルなUIがかなり浸透してきていて、画像を丸く表示する為のShapeableImageViewや、枠などを設定できるMaterialCardViewなどを使用したいケースが多くなってきていますよね。
UIに枠や角丸をつけたいが故に、Drawableを大量生産している、、、歴史のあるプロジェクトではよく見かける例な気がします。
そんな時に、単独でマテリアルなUIを使用したいと思っても、基本はstyleから変えなければならず改修範囲が広く使えない、そんな経験あるのではないでしょうか?もしかしたらご存知の方も多いのかもしれませんが、styleを変更しなくてもマテリアルなUIを使用できる方法がありますので、ご紹介しようと思います。
# 設定内容
設定は非常に簡単です。
対象のマテリアルなUI、もしくは親のレイアウトに以下を付与するだけです。“`
android:theme=”@style/Theme.MaterialComponents”
“`上記を設定する事で、本来styleのparentにMaterialの設定を行わなければならない所を上記設定のみで
接続中の複数のAndroidデバイスに一括でadb installするコマンド
# 経緯
接続中の複数のAndroidデバイスに、同一のapkを一括でインストールしたい際にStack Overflowの以下の記事のjava – How can I adb install an apk to multiple connected devices? – Stack Overflow
https://stackoverflow.com/questions/8610733/how-can-i-adb-install-an-apk-to-multiple-connected-devices
この回答のワンライナーで元気に暮らしていたのですが
https://stackoverflow.com/a/8610829/2227705Android 11以降で `adb pair` コマンドで接続したデバイスはSerial Numberが長いせいか(詳細不明)xargsまわりが正常に動作してくれなくなりました。
Wi-Fi 経由でデバイスに接続する(Android 11 以降)
https://developer.android.com/studio/command-li
Androidの画面分割で固定指示してた画面が勝手に回転してさらにアクティビティが勝手に再生させられてしまう件
画面を縦向きに固定したければ
マニュフェストのactivityのところにandroid:screenOrientation=”portrait”
と書けば確かにそうなるのだが、画面分割で2画面表示にしたとき、スマホを横向きにすると、上記の設定にしているにも関わらず勝手に回転する(完全に防ぐにはOS側でrotationをoffにする必要があるがめんどくさい)。
で、回転それ自体は別に害はないのだが、回転すると、activityが再生されて計測がリセットされるのがとにかく困った。調べてみると、再生を防ぐには、同じくマニュフェストにandroid:configChanges=”keyboardHidden|screenSize|orientation”
などというふうに書けば良いとあり、これで解決しましたのでメモしておきます。
回転を止めるにはどうしたら良いのだろう。
Android開発のSDKでつまづいた
環境
Mac M1チップアプリをビルドしようとすると色々エラーがでてくる
#つまづきポイント1
buildToolsVersion 31 と 32 は
なぜかSDKファイルが壊れている云々のエラーが出た(M1だから?)
なので安定バージョンを選択“`build.gradle
buildToolsVersion “30.0.2”
“`#つまづきポイント2
・SDKとはなんぞや?
でつまづいた。Xcodeで必要なかった設定を初期設定として色々やらなければいけなかった
Android SDKからAPI Level 23 と最新API Level 32 をインストールAPILevelとはiOS開発でいうXcodeのバージョン?Swiftのバージョン?として考えるとイメージがしやすいのかな?(間違ってる気がする)
例えば
APILevel 23で開発行うとAndroid 6.0(Marshmallow) <- iPhoneで言うiOS 以前のスマホへは動作が確証されない? 逆にAPILevel32(現時点での最新)で開発を行うと23にはなかった新機能は使えるがA
Android12でFLAG_IMMUTABLEでクラッシュする件の対応
###自作Androidアプリで謎のクラッシュが発生
あまり今までアプリのクラッシュは発生していなかったのですが、
急に同じエラーが発生し始めたので調べてみました。
対象機種はすべてAndroid12です。“`
exception.class.missing._Unknown_: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
at android.app.PendingIntent.checkFlags (PendingIntent.java:375)
at android.app.PendingIntent.getBroadcastAsUser (PendingIntent.java:645)
at android.app.PendingI
Androidアプリエンジニアがよく見るサイトとチュートリアル
Android アプリエンジニアがよく見るであろうサイトや、Android アプリ開発を勉強するときにどこから手をつければいいのか学習のチュートリアルを紹介しようと思います。
## 公式ドキュメント
– [Android の公式ドキュメント](https://developer.android.com/)
– 日本語のページは情報が古く更新されていない時がよくあるため、公式ドキュメントのページを見るときは `?hl=en` をつけて極力英語のページを見るようにしましょう
– [Kotlin の公式ドキュメント](https://kotlinlang.org/)
– [Material Design の公式ドキュメント](https://material.io/)## 開発環境
– [Android Studio](https://developer.android.com/studio?hl=en)
– プレビュー版は[こっち](https://developer.android.com/studio/preview?hl=en)## 情報収集
–
CardViewの影をxmlで消す
#初めに一言
CardViewではを使うと指定もしていないのに、デフォルトでViewに影が付きます
その影を消す方法をGoogleで、「CardView 影 消す」などと調べてみましたが、
(デフォで付いてるはずだが)特定の条件での影が付かない場合の対処や別のViewについてが出てきて
探すのに苦労したので 自分の備忘録として残しておきます。#早速
“`
app:cardElevation=”0dp”
“`
この一文を影を消したい対象のCardViewに追加するだけです。#説明
簡単に説明をしておきます
CardViewに影が付いているのは、立体的に見たときに高さがあるためです。
なので、その高さ(Elevation)を0に設定してあげれば影がなくなります。
Compose Material3におけるComponentの対応状況
Jetpack Compose の Material 3 の Component の対応表です。
Jetpack Compose のプロジェクトで Material 3 を導入を検討する時にでも活用ください。|Component|material-component(1.5.0)|Compose Material3(1.0.0-alpha05)|
|:–:|:–:|:–:|
| Backdrop | – | × |
| Badge | ◯ | ◯ |
| Bottom app bar | ◯ | × |
| Bottom sheet | ◯ | × |
| [Button](https://m3.material.io/components/buttons/overview) | ◯ | ◯ |
| [Card](https://m3.material.io/components/cards/overview) | ◯ | ◯ |
| Checkbox | ◯ | ◯ |
| [Chip](https://m3.material.io/components/chips
サーバに配置したWebViewのコンテンツからスマホのネイティブアプリのURLスキームの呼び出し方法
筆者は普段サーバサイドのエンジニアとしてWebシステムの開発をしているが、
担当している案件でスマホのネイティブアプリ内のWebView内にコンテンツを組み込む案件がありました。その際に、URLスキームを使ってネイティブアプリとWebViewのコンテンツ間の連携でハマったので、備忘録として残しておきます。
本記事はあくまでサーバサイドの立場からの対処方法になります。## URLスキームの書き方
筆者ははじめ、下記のコード用にfetch関数での読み込みを想定していました。
しかしURLスキームはネイティブアプリのWebViewのURLローダーの部分で実行する仕組みのため、
fetch関数のようなJavaScriptの非同期処理では実行が出来ませんでした。
そこで以下のように `location.href` にURLスキームを設定し、
ネイティブアプリのWebViewに読み込ませることで問題を解消しました。“`
// 間違い
fetch(“【URLスキーム】”);
// 正解
location.href = “【URLスキーム】”;
// 参考例
location.href
【2022最新】Androidスマホのシステム音声とマイク音声をパソコンにミラーリングする方法
#Androidスマホのシステム音声とマイク音声をパソコンに出力!
皆さんこんにちは!
この前、LetsViewというミラーリングアプリを例としてアンドロイドデバイスの音声をパソコンにミラーリングする方法を紹介しました。残念なことにLetsViewはアンドロイドのマイク音声のみをミラーリングできます。従って、Androidの音声をミラーリングする時、システムの音声だけでなく、マイクの音声も同時に流れます。
今回はApowerMirrorを使ってAndroidスマホのシステム音声とマイク音声をパソコンにミラーリングする方法について詳しく説明させていただきます。ご自分のニーズに応じて、システム音声またはマイク音声を自由に選択してミラーリングできます。
##事前準備
[ApowerMirror](https://www.apowersoft.jp/phone-mirror?apptype=qiita210)
Android側は最新のバージョンをインストールする必要があります。
最新バージョン1.7.5.0 [Google Play](https://play.google.com/s
別画面からのリロード処理トリガーを実装したい
#初めに
今回は、単一Activity複数Fragmentでの実装の際に、遷移先の画面でデータの更新があったときに遷移元に更新があったことを伝えたい場面が多くあると思います。
そんなときに一番簡単で一番実装しやすい方法を記事として残しておきます。
###やること
では、実際にどの様なコードを書くのかと言いますと`setFragmentResult`を使います。
`setFragmentResult`とは、`setFragmentResultListener`と対になっており`setFragmentResult`には`requestKey`に鍵として`String`を渡し`result`に値として`Bundle`を入れることができます。
`setFragmentResultListener`では`requestKey`に鍵として`String`を渡し、その鍵に格納された値を取り出すことができます
そのため、コードで書く場合以下の様になります“`kotlin:FirstFragment
setFragmentResultListener(requestKey = REQUEST_KE
[Android]GroovyからKTSに移行によるメリデメを調査
##はじめに
Gradle Plugin4.0からKTSのサポートがあります。
KTSに移行してみて、個人的に調べたり感じたりしたメリデメのお話です。##メリット
###1. コンパイルエラーを吐いてくれる
これが、一番のメリットな気はします。
書いていて感動しました。
Groovyは動的型付けであるのに対して、みんな大好きKotlinは静的型付けなので実現できます。
今までは、Syncして初めて文法ミスなどに気づけていましたが、これで書きながらミスに気づくことが出来るように。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599059/5d2d3f39-8b91-073a-9572-aadbed9411d3.png)###2. メソッド引数の補完が効く。
途中まで気づかなかったが、地味にありがたい。↓Groovyの時はなかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/