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

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

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のデータを読み書きできます。

リリースしてい

元記事を表示

LiveDataをFlowにリプレースしてみて得た知見(StateFlow、SharedFlow、Channel)

この記事は、and factory.inc Advent Calendar 2021の 16日目 の記事です。
昨日は、@go_sagawaさんの「[GoでAtCoderをやる話](https://qiita.com/go_sagawa/items/bc83c9c781be29b5bd88)」でした。

## About

Kotlin coroutines Flowが登場して、RxやLiveDataを入れ替えられるムーブメントを感じています。
とくにLiveDataに関しては、今後はFlowを使うことができる状態になっているようです。

この記事では、さくっと実際にリプレースしてみたらどんな感じに書けるのかを見ていこうと思います。

## 状態管理

### LiveData

まずは、画面に表示する値や状態など、LiveDataの最もスタンダードな書き方を見ていきます。

“`kotlin
class MainViewModel : ViewModel(), DefaultLifecycleObserver {

private val _message = Mutabl

元記事を表示

[Android]MavenCentralの概要

#この記事は
build.gradleにて、mavenCentralがなんなのか分からなかったので調べた。

“`groovy
repository {
mavenCentral()
}
“`

#MavenCenrtalとは
Javaのライブラリを保管してるリポジトリ

#参考
https://www.infoq.com/jp/news/2015/11/maven-central-at-google/

#寂しいので
廃止になったJcenterとの違いにも触れます。

“`groovy
repository {
jcenter() // deprecated (コードの打ち消し線ってマークダウンだとどうやるんだろう?)
mavenCentral() // instead
}
“`

jcenterは、mavenCentralと同様にライブラリの配布する機能を果たしています。

しかし、jcenterは読み取り専用になり、新しくライブラリを更新することができないです。
そのため、mavenCentralに切り替えることが推奨されています。

#参考
ht

元記事を表示

EditTextを使うときは必ずimeOptionsを指定しよう

EditText内でエンターキーを入力すると、通常はIME_ACTION_DONEというactionIdがlistenerに流れます。
が、EditTextの下に編集可能なUIが存在していた場合は、IME_ACTION_DONEではなくIME_ACTION_NEXTが呼ばれます。

なので、EditTextの配下に別のEditTextがない場合、以下コードのように「IME_ACTION_DONE」が来ることを前提として条件分岐をすることもあるかと思います。

“`kotlin:
commentEditor.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
/** コメント投稿処理 */
}
/** IME_ACTION_DONE以外の時は何もしない */
true
}
“`

しかしながら、実は場合によっては、配下にEditTextや編集可能な

元記事を表示

Android Bazaar and Conference Diverse の案内

日本Androidの会が年2回主催する大きなAndroid系開発者イベントに『ABC:Android Bazaar and Conference』について簡単に記載したく思います。
ABCは2010年から年2回定期的に開催され続けてきたAndroidに関するカンファレンスとバザールを主としたイベントです。
今はさまざまなITイベントが開催されるようになり技術・知識共有が簡単になりましたが自身の振り返りも兼ねてせっかくの機会ですので記載しておきたく思います。

# 勝手に主なイベント回を紹介します。

* 記念すべき第1回は東大で開催されました。そして次の第2回も東大で開催され、当時は入場制限がかかるほどの長蛇でした。

http://www.android-group.jp/index.php?%A5%A4%A5%D9%A5%F3%A5%C8%2FAndroid%20Bazaar%20and%20Conference%202010%20Spring

http://www.android-group.jp/abc2011w/

* 第3回は早稲田大学でした。

第3回は3.11の後とい

元記事を表示

【Unity+Android+Vuforia】クリスマスパーティ向けレンタルトナカイ

この記事は、NTTテクノクロス Advent Calendar 2021 の16日目です。

こんにちは、NTTテクノクロスの定行です。普段はVR関係の配信システムやアプリケーション開発をやっています。今回はクリスマスパーティへトナカイを派遣するべく、特定の画像上にトナカイの3Dモデルを表示させるARアプリをでUnity+Android+Vuforiaで作成してみます。※ものすごく古典的なARアプリです

Unity+Vuforia組み合わせは簡単に導入できる反面、バージョンによって微妙に導入方法が異なるので個人的な備忘録も兼ねてます。Unityに興味があるけど触った事がないという人は是非やってみてください。想像以上に簡単にARプリ作成ができます。作成までの手順は以下になります。

1. Unityインストール
2. Vuforiaへ画像を登録
3. アプリケーション作成

それではやってみましょう。

#1.Unityインストール

①”Unity Hub” をダウンロードしてインストール。

https://unity3d.com/jp/get-unity/download

②”

元記事を表示

android版dxlibの使いかた(2021年12月)

 アドベントカレンダーに投稿する記事の3番目です。
 今回は、dxlibのandroid版の使いかたです。今回何かandroid版を使って記事を書こうとしたら色々と苦労したので苦労したところを共有しようと思いました。なお、あくまでも私の環境で成功した方法ですし、アプリを公開する予定はないので自分のスマホで動けばいいの精神で開発しています。アプリを公開する人は気を付けてください。

# 前提条件
 android版を使うには以下のものが必要です。

* android studio
(visualstudioでも開発できますが、今後を考えると絶対にandroidstudioにしてください)
* android版dxlib

# 環境構築
 1からすべてを説明するには大変なので、ある程度公式サイトに書かれていることは省略させていただきます。

1. dxlibを参考にandroidstudioでプロジェクトを作成する。
注意することがあって、途中にあるminimumSDKというところをAPI26にすることです。
こちらの環境ではデフォルトはAPI21となっていました。

元記事を表示

Androidアプリでバックグラウンド再生機能を実現するためのヒントとiOSアプリとの見比べた際の特徴を簡単にまとめてみた

## 1. はじめに

皆様お疲れ様です。「Swift/Kotlin Advent Calendar」の15日目を担当させて頂きます、fumiyasac(Fumiya Sakai)と申します。何卒よろしくお願い致します。

まずは僕自身の今年のトピックスとしては、昨年5月からお世話になっている現場では、iOSアプリ開発と並行してAndroidアプリ開発にも携わる機会があったり、これまでに執筆をしていた「[iOSアプリ会開発 UI実装であると嬉しいレシピブック Vol.3](https://www.amazon.co.jp/dp/B09HX6MQ1T/)」の商業誌化、そしてiOSDC Japan 2021での[パンフレット原稿執筆](https://github.com/fumiyasac/iosdc2021_pamphlet_manuscript/blob/main/manuscript.md)&登壇など、慌ただしくしながらも楽しく過ごしてきました。

業務の中で動画プレイヤー機能を盛り込んだiOS/Androidアプリ開発に携わっていたこともあり、今年のiOSDC Japan 202

元記事を表示

AndroidでYouTubeの再生画面の回転仕様を再現する

# はじめに
本記事は[Globis Advent Calendar](https://qiita.com/advent-calendar/2021/globis)15日目の記事です。

業務で動画学習アプリを作っている中で、YouTubeの画面回転の仕様を真似しようとしたら一筋縄ではいかなかったので備忘録として残しておきます:pencil:

長いので要約すると**requestedOrientationとOrientationEventListenerを使って実現しました**という話です。

# YouTube再生画面の画面回転仕様について
普段YouTubeで動画を視聴する中で特に違和感なく利用していたのですが、詳細仕様を意識して触っていなかったため、この機会にじっくり観察してみました。
試した環境はAndroid 11のPixel 3a XLで、YouTubeアプリのバージョンは16.46.37です。

## 画面表示の向き
言うまでもありませんが、YouTubeの再生画面には縦向きと横向きの表示があります。

### 縦向き
まずは基本の縦向きです。

このときプレイヤーの右

元記事を表示

実用的なストアIDの取得方法

#前提
アップデート等をさせるため、アプリのストアに遷移させる時は多々あると思います。
ただ、アプリのパッケージ名でGoogle Playのリンクを作ってしまうと、flavorによってGoogle Playに飛なくてQAで困ります。
だからと言って本番のパッケージ名を`strings.xml`に記述するのもおかしな話ですよね?
そこで利用するのがストアIDです

#どこに置くのが最適か
######ではどこに保管しておき、どのように取得するのが最適かです
早速ですが答えは下記の通りになります

“`kotlin:build.gradle
defaultConfig {applicationId = “jp.co.sample.app”}
buildTypes {
getByName(“debug”) {
buildConfigField(“String”, “STORE_ID”, “\”${defaultConfig.applicationId}\””)
}
getByName(“release”) {

元記事を表示

OTHERカテゴリの最新記事