Android関連のことを調べてみた2021年12月18日

Android関連のことを調べてみた2021年12月18日
目次

ヒーローズリーグに登録した「開発中のソフト音源アプリ」について

[ヒーローズリーグ2021](https://heroes-league.net/)のオンラインリーグに作成中のソフト音源を投稿しました。
内容は以下のリンクから確認できます。
[開発中のソフト音源アプリ](https://protopedia.net/prototype/2718)

ちなみに、ソースも[GitHub](https://github.com/project-dev/ToneGenerator)にアップしています。

# なぜ作っているのか?
ヒーローズリーグのほうには簡単にしか書いてないですが、「音源を自分で作ってみたい」というのがまずあります。
中学生くらいの時はMSX BASICで音を鳴らして遊んでみたり、高校になってPCと一緒にYAMAHAのHello!Music!(TG300がセットのやつ)を買ってもらいました。
で、DTMを趣味でやっていたわけです。
で、バンと組んでKORG X5を手に入れたりして、TG300やKORG X5で音をいじったり、曲を作ったりしたわけです。
さらに時は進み、携帯電話でYAMAHAがSMAF発表してDTMマガジンにYAMAHAのチ

元記事を表示

Groupieより生産性高い(はず?)なRecylcerViewのススメ

この記事は[Uzabase Advent Calendar 2021](https://qiita.com/advent-calendar/2021/uzabase)の18日目の記事です。

# はじめに

Androidで一覧系を作るとき面倒ですよね。RecylcerViewなんですがそれがめんどくさい。
なので、2019年ぐらいから流行り出した[Groupie](https://github.com/lisawray/groupie)や[Epoxy](https://github.com/airbnb/epoxy)を使う人が多いのではないでしょうか?

だがしかし! 同僚が「@ko2icが作った仕組みの方がgroupieよりも簡単」という発言を信じて、仕組みを公開しようと思いますw
(読んでみて違うと思った方、先に謝っておきます。すいません。)

実は、Groupieが流行る前に作った仕組みなのですが、NewsPicksというデザインの凝ったアプリで洗練させていった感じです。
大体のアプリではこの仕組みを使うことで生産性は上がる気がしています。

まずは、簡単なこんな

元記事を表示

Android StudioでのJUnitテストのやり方

#はじめに
Javaのテストと言えば、**JUnit**。それをAndroid Studioで行う方法を紹介します。
#手順
以下のような**SampleActivity.java**があるとします。

“`
package com.websarva.wings.android.junitsample1;

public class SampleActivity {

private int id;
private String name;

public SampleActivity(int id,String name){
this.id = id;
this.name = name;
}

//IDと名前を紹介
public String explain(){
String explain;
explain = “id:”+id+”,name:”+name;
return explain;
}

//IDを取得
public i

元記事を表示

Snackbarのカスタマイズ – Android ViewとJetpack Compose比較

この記事は[Android Advent Calendar 2021](https://qiita.com/advent-calendar/2021/android)の18日目の記事です。

## 概要
あまり使う機会は無いかもしれませんが、Snackbarのカスタマイズ方法を整理してみました。
また従来のAndroid Viewでの方法とJetpack Composeでの方法を比較してみたいと思います。

## Android Viewでのカスタマイズ方法

Android Viewでは、以下のクラスを作成する必要があります。

* ContentViewCallbackクラスを継承したSnackbarのViewクラス
* BaseTransientBottomBarクラスを継承したカスタムSnackbarクラス
* 上記それぞれのレイアウトファイル

“`kotlin:CustomSnackbarView.kt
class CustomSnackbarView @JvmOverloads constructor(
context: Context,
attribu

元記事を表示

アプリ設定の「ストレージを消去」の代わりに、アプリの「容量の管理」画面を起動させる方法

Androidのアプリ設定では、アプリのストレージを消去し、ほぼインストール直後の状態に戻すことができますが、このボタンを「容量の管理」に変更し、アプリを起動させることができます。

|ストレージを消去|容量を管理|
|:-:|:-:|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/0276fcf9-1760-7728-c2e1-e8fc376e035f.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/36d828cb-f1cb-1dda-8400-e6725c28b016.png)|

これを実現するのは非常に簡単で、AndroidManifest.xmlの`application`タグに`android:manageSpaceActivity`というattributeでActivity名を記述するだけです。
これだけで「ストレージを消去」が「容量の管理」になり、ここに記述したActi

元記事を表示

通知の有効無効状態が変化したことをアプリで受け取る方法

Androidではシステムの設定画面からアプリの通知の有効無効を変更できます。
Android 8以上であれば、通知チャンネルがありますので、すべての通知、通知チャンネルグループ単位、通知チャンネル単位、の3段階で有効無効を設定することができます。

|すべての通知|通知チャンネルグループ|通知チャンネル|
|–|–|–|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/151b4858-f700-c48b-4c67-61f7de26f341.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/30260af4-6fc0-c83f-da9f-4ab7b17fce16.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/448ef1bf-dbd0-42cb-4521-f4676a1cfb6a

元記事を表示

AndroidアプリにUnity as a Libraryでリッチな3Dを簡単に組み込む

本記事は、 [Android Advent Calendar 2021](https://qiita.com/advent-calendar/2021/android) 17日目の記事です。
PureなAndroidというよりUnity組み込むという飛び道具的な話

# Unity as a Libraryとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224134/acc135c3-17e0-4228-21f1-4be213987f11.png)

> 拡張現実(AR)、3D/2D リアルタイムレンダリング、2D ミニゲームなど、Unity で開発した機能を、ネイティブモバイルアプリケーションに直接挿入。

[Unity as a Library](https://unity.com/ja/features/unity-as-a-library) はゲームエンジンであるUnityで開発した機能を、モジュールとしてAndroidアプリケーションへ組み込むことが出来る仕組みである。

元記事を表示

Unity2019 で Android の Tareget API を 30 に設定する方法

Unity2019 で Android の Tareget API を 30 に設定するための手順です。
中々エラーが出て解決までに時間がかかったので、
同じ轍をふまないように誰かの役に、未来の自分のために。

# 注意
色々書いてありますが、
実は [Unity 2019のAndroid Build SupportでもAPI Level 29でビルドできるようにする](https://blog.yucchiy.com/2020/09/android-29-or-later-for-unity-2019/) を参考に、
素直に Unity に従って Update したほうが楽という事実が・・・。
エラーが出てしまって解決したい方などは、以下参照ください。

# 前提
* Windows 10
* Unity 2019.4.22f1
* Android Build で Target API Level を 30 で設定

# 概要手順
1. Target API Level 30 に設定する
1. [SDK を入れる](https://qiita.com/drafts#%E6%89%8

元記事を表示

[Flutter] 動画プレイヤーを再実装する形でTexture Widgetについて調べてみた

この記事は「[Flutter Advent Calendar 2021](https://qiita.com/advent-calendar/2021/flutter)」の17日目の記事です。

FlutterにはiOS/Androidと言った「プラットフォーム側で用意されているView」や「ネイティブ側で再生した映像」などをWidgetとして表示する仕組みとして、「**[Texture Widget](https://api.flutter.dev/flutter/widgets/Texture-class.html)**」や「**[Platform Views](https://docs.flutter.dev/development/platform-integration/platform-views)**」と言った機能が存在します。

今回、前者の`Texture Widget`について調査してみたので備忘録序に纏めてみようと思います。
もし記事中で間違いや説明不足の箇所などあれば、コメントや編集リクエストなどで教えて頂けると幸いです。

なお、調査する上では以下の

元記事を表示

Androidアプリ Realmでモデルパラメータを追加するとき、過去バージョン全てに渡ってパラメータ有無を考慮する必要があった話

こんにちは、ピリカ開発チームの九鬼です。

SNSピリカのAndroidアプリについて、段階公開していたv5.4.13, v5.4.14リリースで起動クラッシュが発生する問題がありました。v5.4.13でRealmのバージョンアップおよびRealm操作周りの役割分離を行っており、そのなかでのマイグレーション処理の不備が原因でした。本稿ではその経緯を共有いたします。

## 背景
SNSピリカにはイベント機能があるのですが、イベント一覧をキャッシュしておくためにRealmライブラリを使っています。v5.4.12の時点で、[Realm](https://realm.io/)のバージョンはv7.0.8でした。そのため、Realmをv10.0.0以上にアップデートするためにアプリ側の修正対応が必要でした。Realmのv10.0.0から、データの書き込みはUIスレッド以外から行う必要があるためです。

また、当時Realmを操作する部分の処理がView操作と密結合だった問題があり、そのままだと保守が難しくなる懸念がありました。そこで、Realmのバージョンアップとと

元記事を表示

kotlinのSAM変換

# kotlinでSAMのCallbackを登録する方法

## JAVAの場合

“`java
btn.setPressReleaseCallback((state) -> {
int discard = state ?
Log.i(TAG, “aiueo”)
: Log.i(TAG, “kakikukeko”);
});
“`

## Kotlinの場合

“`kotlin
btn?.setPressReleaseCallback({ pressed: Boolean ->
{
if (pressed) Log.i(TAG, “aiueo”)
else Log.i(TAG, “kakikukeko”)
}
} as PressReleaseCallback)
“`

ラベルも使える

“`kotlin

元記事を表示

Windows10でAndroid端末を複数台繋げた状態で、Appiumで特定の端末を指定できるか試してみた。

久しぶりに、Appium使うことになったので、試しに複数台端末の接続に挑戦してみました。

以前書いた記事はこちら、、Appiumを使って、Android端末を操作することを実践してみたわけです。

https://qiita.com/jun_higuche/items/7c6a23ed4f9cda53b8a0

今回は、Windows10でAndroid端末を複数台繋げた状態で、Appiumで特定の端末を指定できるか試してみました。

:::note info
いきなり結論ですが、
端末指定で「udid」を指定すれば可能です。
:::

まずは、物理的にPCに2台のAndroid端末を接続します。
![imgpsh_fullsize_anim.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/448092/2416add2-4ad6-ae03-8f49-739b6934adfb.jpeg)

「adb devices」コマンドで接続確認。2行表示されることを確認
※ここで、2行表示されないとか、「at

元記事を表示

Androidの多機能Fragmentを再利用可能にした話

# はじめに
この記事は、[eureka Advent Calendar](https://qiita.com/advent-calendar/2021/eureka)の17日目の記事です。
本日は今年の4月にeurekaに新卒のAndroidエンジニアとして入社した私が担当させていただきます。

この記事では、複数の画面で共通する多機能なFragmentを再利用可能な形に書き換えた際に自分にとって学びがあったことを紹介します。

## 概要
![communitychat_KV.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146329/256fbed6-e8ce-0fbf-cd2a-d769d1c2eeed.jpeg)

Pairsでは、2021年6月に新機能としてコミュニティチャットが実装されました。
これは、マッチング前のお相手とカジュアルにテキストベースでお話が出来る機能です。
これに加えて、コミュニティチャットにスタンプを投稿する機能が実装されることとなりました。

ところが、途中でマッチ

元記事を表示

MaterialDesign3で端末の壁紙から作られたテーマカラーが決められるって!?!?!??!?

# Material Design ってなぁに?

2014年にGoogleが提唱したデザインで、明確なガイドラインが定められています。
`Material Components`というライブラリが公開されているのでお手軽に使えるのが良いところですね。
しかも、Androidだけでなく、iOSやWeb向けのライブラリもあります。
2021年から[MaterialDesign3](https://m3.material.io/)が出てきました。

# 本題

## 壁紙からテーマカラーが決められるってどういうこと?

Android12のデザインコンセプトがMaterialDesign3となっています。
その中で色について、個人の色の好みやニーズを反映させようみたいなことが書かれているみたいです。
そのためAndroid12からはDynamic Colorというものが追加されました。

ホームを長押しして出てくる`壁紙とスタイル`で抽出された色が選択できます。
ここで選択された色が使用できるようになりました。

![Screenshot_20211215-203031.png](http

元記事を表示

スマプロハッカソン参加してみた!

# 「スマプロハッカソン」とは…

**金沢工業大学スマートフォンアプリプロジェクトが主催する学内のハッカソンイベント**

※私は運営に関わっていません※

HP:https://smapro.wixsite.com/smapro-hackathon

協賛企業:合同会社DMM.com
特別協力企業:株式会社ハックツ

# 日程

|日付|内容|
|:—:|—-|
|11/18|参加申し込み|
|12/2|アイデア出し|
|12/3|**キックオフ**|
|12/7|事前開発|
|12/8|タスク振り|
|12/11|**本番1日目**|
|12/12|**本番2日目**|
|12/16|事後開発|

# 11月18日 参加申し込み

聞いたところによるとこの時点で結構集まってたらしい!(すごい!)

23号館等いろいろなところで宣伝していたのが効果大きかったみたい・・・

# 12月2日 アイデア出し

テーマが「大学生活を便利にするもの」という事なので身近な問題について考えてみた

案として
– 家計簿系のアプリ
– 献立系のアプリ
– 学内の混雑状況把握アプリ
等が出ま

元記事を表示

android:windowLightNavigationBarはAPI level 27だが、View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BARはAPI level 26という罠

Android 5以上ではNavigationBarの色を指定することができます。
テーマでは`android:navigationBarColor`で指定しますね。
ただし、ナビゲーションバーのボタンは白系統の色で描画されるため、明るい色を使いたい場合は、`android:windowLightNavigationBar`をtrueにすることでナビゲーションバーのアイコンが黒系の色に変わり視認性を確保することができます。

“`xml

“`

この、`android:windowLightNavigationBar`はAPI leve

元記事を表示

Retrofit2でform-dataでファイルを含む複数の値をPOSTする

## はじめに

この記事は [N・S高等学校 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/n-s-highschool-1) の15日目です。

こんにちは。N高等学校梅田キャンパスの端っこでモジモジしてる人です。空いてたので書きます。

## 本題

Postmanで言うこれをしたい。

![](https://i.imgur.com/WePkYDY.png)

“`kotlin:ApiService.kt
interface ApiService {
@JvmSuppressWildcards
@POST(“upload.php”)
suspend fun upload(@Body body: RequestBody): Response // Response はよしなに。

companion object {
var apiService: ApiService? = null

元記事を表示

MethodChannelとPlatformViewを使ってFlutterにネイティブビューを表示しよう

##開発環境
“`
Flutter 2.5.2
Dart 2.14.3
“`

#MethodChannelとは?
Flutterは柔軟なシステムを使用しており、AndroidではKotlinまたはJava、iOSではSwiftまたはObjective-Cで利用できるかどうかにかかわらず、プラットフォーム固有のAPIを呼び出すことができます。

#PlatformViewとは?
PlatformViewを使用すると、ネイティブビューをFlutterアプリに埋め込むことができます。
たとえば、AndroidおよびiOSSDKのネイティブGoogleマップをFlutterアプリ内で直接使用できます。

(ネイティブ側からFlutter側へ受け取るにはEventChannelを使います。今回は割愛します。)

##つまり

元記事を表示

株式会社ゆめみ Android技術ロードマップを作成しました!!

# はじめに
こんにちは!株式会社ゆめみでAndroidエンジニアをしています
清水 亮です

株式会社ゆめみでは委員会という単位を作り
採用や育成、勉強会などへの課題を解決するワーキンググループを稼働させています。

そこで、私の所属する育成WGでは社内外のAndroidエンジニアに向けて
現在主流であるAndroid技術の概念をロードマップとして作成して共有しようという試みを行い、
この度そちらを公開させて頂くことになりました!

このロードマップがあればAndroidアプリの全貌が分かるかも・・・

初学者の方や既に業務でAndroidアプリに携わっている方にも
ぜひ、ご活用頂ければと思います!
↓↓↓↓↓↓↓↓

https://notion.yumemi.co.jp/c107a4281e824f8ea3d10094e25581aa

一緒にロードマップを作成してくれた[門田さん](https://twitter.com/tmk815)のフォローもぜひ、お願いします!笑

# ロードマップ全体の構成
こちらのロードマップ・・・

非常に巨大です!!!!
ほんの一部だけでこんな感

元記事を表示

既存アプリにおけるEncryptedSharedPreferencesへの移行方法

本記事は、[Android Advent Calendar 2021](https://qiita.com/advent-calendar/2021/android) 16日目の記事です。

# はじめに:EncryptedSharedPreferencesとは
[Android Developers – データをより安全に取り扱う](https://developer.android.com/topic/security/data?hl=ja)

> SharedPreferences クラスをラップし、2 つの方式を使用してキーと値を自動的に暗号化します。
> – キーは、暗号化された状態でも検索できるように、決定性暗号化アルゴリズムを使用して暗号化されます。
> – 値は、AES-256 GCM を使用して暗号化されます。これは非決定性です。

2021年4月にStable版ver1.0.0がリリースされた、Jetpackのライブラリです。
このライブラリを用いると、煩雑なコードなしで暗号化したSharedPreferencesのデータを読み書きできます。

リリースしてい

元記事を表示

OTHERカテゴリの最新記事