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

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

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”) {

元記事を表示

さらばContext引き回し!リソースを扱うクラスを作ってみた

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

# はじめに
Androidでリソースを扱う際、例えば文字列だとstrings.xmlを使い、取得にはgetString(context)が必要になります。
「ViewModelでR.stingを使いたいけどcontextが無いからどうしよう…」といった悩みは誰もが持つものな気がします。
メソッドの引数に入れたり、AndroidViewModelやDagger-Hiltの@ApplicationContextを使えば、ViewModelでContextを扱うことも出来ますが、ViewModelやUseCaseなど、View外のスコープではContextをなるべく使いたくないという設計も多いと思います。
そんなツラミを解決できるクラスを作成したので、紹介します。
(Databinding利用を想定していますが、工夫すればcomposeでも使えると思います)

# 作成したクラス
結論から。まずは文字

元記事を表示

ConstraintLayout FlowでViewを動的に追加してみる

こんにちは。株式会社ZOZOでAndroidエンジニアをしております@zzt-osamuhanzawaです。[ZOZO Advent Calendar 2021](https://qiita.com/advent-calendar/2021/zozo)のその3の15日目の担当をさせていただきます。今回は実務で触った`ConstraintLayout Flow`(以下、Flowと略)について少しだけ書きたいと思います。
## ConstraintLayout Flowとは
まず、なんじゃそれ?という方がいるかもしれないので簡単に説明しますと、例えば以下のQiitaハッシュタグのような連続したUIを実装したいときに利用されるヘルパーウィジェットでConstraintLayout2.0から追加されました。こういったUIは今まではFlexboxLayoutやGridLayoutなどで実装しておりましたが、Flowが追加されたことでシンプルに実装することができるらしい、とのことです。らしいというのは実現したいことを実装しようとすると、そんなシンプルにいかなかったからです。

元記事を表示

BitriseのGooglePlayDeploy設定方法

結構迷う事の多い設定だと思いますので、纏めておこうと思います。

まず初めに、BitriseでGooglePlayに配信する為には以下情報が必要になります。

・サービスアカウントのJsonキー
・対象アプリのパッケージ名
・配信先(内部テスト?alpha?)

サービスアカウントの発行は[こちら](https://labs.armut.com/android-ci-cd-pipeline-with-bitrise-deploy-app-to-google-play-store-6bd95f652f8c)の記事が参考になります。

:::note warn
サービスアカウントを発行する手順ですが、アップデート等で資料とは発行手順が異なっている可能性があります。
:::

上記が準備できましたら、設定の手順に移ります。

####1. Jsonキーのアップロード
Code Signingタブの一番下の欄(画像参照)に、GENERIC FILE STORAGEという項目があると思います。

![スクリ

元記事を表示

テスト観点一覧

# はじめに

こんにちは @nittannittan です。

今回は私がテスト設計時に抜け漏れがないかを確認するときに使っているテスト観点を書き出しておこうと思います。

テストをすり抜けてしまった不具合が見つかるたびにこのテスト観点は、更新していきます。

他にも抜けている観点があればコメントいただけると幸いです。

# 更新履歴

| 日付 | 更新内容 |
|:-:|:-:|
| 2021/12/14 | 初稿 |
| | |

# 入力観点

|項目名|説明|
|:—-|:—-|
|未入力|key,valueの値でkey自体がなかった場合|
|null|key,valueの値でkeyはあるが、valueがnullだった場合|
|空文字|key,valueの値でkeyはあるが、valueが空文字だった場合|
|型違い|key,valueの値でkeyはあるが、valueが想定外の型だった場合|
|0|0を設定した場合に期待通りの動作をするか|
|最小桁数未満| |
|最大桁数オーバー| |
|半角英字| |
|半角数字| |
|半角カナ| |
|全角| |

元記事を表示

Jetpack ComposeでOverScrollのエフェクトを消す方法

Jetpack Compose では 1.1.0 から `LazyColumn`/`LazyRow` や  `Modifier.verticalScroll`/`Modifier.horizontalScroll` で OverScroll のエフェクトが適用されるようになります。
( Android 11 以前は波のようなエフェクト、Android 12 以降はストレッチのエフェクト)

|Android 11以前|Android 12以降|
|:–:|:–:|
| |

元記事を表示

virtual voxからandroid emulatorに接続する

ゲストOSからホストOSに接続出来るか確認する

デフォルトでOKのはず

スタートメニュー
 ⇒歯車
  ⇒更新とセキュリティ
   ⇒Windowsセキュリティ
    ⇒ファイアウォールとネットワーク保護
     ⇒(アクティブ)となっているものを選択
      ⇒ファイアウォールをOFFにする。

ゲストからpingを打って返ってきたらOK

ファイアウォールは戻しておく

Windowsの転送設定をする

“`
netsh interface portproxy add v4tov4 listenport=6000 listenaddr=192.168.11.3 connectport=5555 connectaddress=127.0.0.1
“`

ファイアウォールの穴あけ

スタートメニュー
 ⇒歯

元記事を表示

play storeの無いandroid に ブラウザを入れる

# midoriを入れる

ソースコードダウンロード

“`shell
git clone https://github.com/midori-browser/core.git
“`

VersionとかLint警告で止まるのを修正

“`
$ git diff -U0 | cat
diff –git a/app/build.gradle b/app/build.gradle
index 5129c1f0..f8435bb0 100644
— a/app/build.gradle
+++ b/app/build.gradle
@@ -11 +11 @@ android {
– minSdkVersion 15
+ minSdkVersion 22
@@ -26,0 +27,4 @@ android {
+ lintOptions {
+ checkReleaseB

元記事を表示

【Dart & Flutter】pub.dev に公開したライブラリが [UNIDENTIFIED] になる時の対応

# 1. pub.dev に公開したライブラリが [UNIDENTIFIED] になる時の対応

– [1. pub.dev に公開したライブラリが [UNIDENTIFIED] になる時の対応](#1-pubdev-に公開したライブラリが-unidentified-になる時の対応)
– [1.1. 概要](#11-概要)
– [1.2. 詳細](#12-詳細)
– [1.2.1. 原因](#121-原因)
– [1.2.2. 対応](#122-対応)
– [1.3. 結論](#13-結論)
– [1.4. 備考](#14-備考)
– [1.5. 筆者について](#15-筆者について)

## 1.1. 概要

私が開発保守している [Duolingo4D](https://pub.dev/packages/duolingo4d) という `Duolingo API` をラッピングしたライブラリがあるのですが、先日新機能の実装とテストを終えて `dart pub publish` を実行してア

元記事を表示

【Android】ストレージ系を簡単にまとめる

株式会社パーソンリンクアドベントカレンダー14日目です!?
本日12/14は、南極の日だそうです。
> 1911(明治44)年のこの日、ノルウェーの探検家・アムンゼンと4人の隊員が人類で初めて南極点に到達した。
よろしくお願いします。

## はじめに
Anroidアプリでファイルや画像を保存する時に、
保存ディレクトリを取得することがあるのですが、どこに保存すれば良いのか、どんな違いがあるのか、すごくややこしいので簡潔にまとめます。

## その前に
Androidはメジャーバージョンが年に1回上がるらしいです。
Android9.0からAndroid10.0へ みたいな
バージョンが上がると非推奨になるメソッドや処理が当然ながら出てきますが、
今回は非推奨になっているものも含んで紹介します。
スマホ業界は、プライバシーを守るため、セキュリティの向上のために、バージョンを上げて対応していきますが、アプリ開発者はその対応に必死です。
→場合によってはこれに対応しないとリリースできないよーってなるみたいです。

## 内部ストレージ系
端末ストレージに保存する内部ストレージ系
Andr

元記事を表示

NrealLightアプリ実行中にログを確認する

# NrealLightとは

NrealLightとはARグラスの一種です。

https://au5g.jp/smartglasses/

このデバイスのログを、アプリ実行中に取得したいというのが、今回のお話です。

# NrealLightアプリ実行中にログを確認する

NrealLightアプリのOSはAndroidなので、ログを確認するにはlogcatが必要です。
ただし、スマートフォンのUSBポートはグラスに接続されており、PCにつなげることはできません。
そこで、PCと無線でつなげてみることにしました。

# 検証環境

– グラスデバイス: NrealLight
– スマートフォンOS: Android 11

# スマートフォンのワイヤレスデバッグを有効にする

開発者向けオプションを有効にした状態で、図のように `ワイヤレスデバッグ` のトグルを有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/85bca8c7-8150-144d-9d

元記事を表示

[Android] 警告を0件にするまでの道程

みなさん、警告ってきちんと対応してますか?
この記事では私が色々なプロジェクトで警告を0件にしていった経験を踏まえた警告の修正方針などについてまとめてみました。

# 警告の確認方法
Android Studioでは、Analyze → Inspect CodeからInspectionを実行することができます。
![スクリーンショット 2021-11-15 12.57.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188222/cb163960-ac36-56e6-1b07-719143213ba3.png)

Whole projectでInspectionを実行してみると、警告対応をきちんとやれてないプロジェクトでは物凄い数の警告が発生していることでしょう。

# 警告対応方針
「これだけ警告が出てても問題なく動くのなら、対応しなくてもいいのでは?」という意見が聞こえてくるかもしれません。
特に企画やPMあたりには警告対応の重要性を理解してもらえないこともあると思います。
警告を対応していくに

元記事を表示

OTHERカテゴリの最新記事