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

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

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が無いからどうしよう…」といった悩みは誰もが持つものな気がします。
そんなツラミを解決できるクラスを作成したので、紹介します。
(Databinding利用を想定していますが、工夫すればcomposeでも使えると思います)

# 作成したクラス
結論から。まずは文字列を扱うクラスの、本体。

“`kotlin:StringSource.kt
sealed class StringSource {
abstract fun getString(context: Context): String

private data class Raw(private val

元記事を表示

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あたりには警告対応の重要性を理解してもらえないこともあると思います。
警告を対応していくに

元記事を表示

Cordovaアプリの技術的負債を頑張って解消した話

## はじめに

この記事は[ラクス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/rakus)の14日目の記事です。
なんだかんだで4年連続4回目の参加になりました。感慨深い。

今年は、cordovaを利用したAndroidアプリの技術的負債を解消した話をしようと思います。

## 技術的負債を解消しよう

現在私は主に、以下3つのプロダクトの開発に携わっています。

* Androidアプリ(Kotlin)
* Androidアプリ(Apache Cordova)
* APIサーバー(Spring Boot)

で、まあどのプロダクトもそれなりにフレームワークやライブラリを使用しているのですが、
今まではそれらに脆弱性が見つかるなどがない限り、中々バージョンアップの機会がありませんでした。

今のところはまだなんとかなっていますが、今後重大な脆弱性が発見されてから急いでアップデートしようとしても
色々変わりすぎてて中々対応できない!ということになりかねないので、これを機に各プロダクトをさっぱり最新化して技

元記事を表示

負債を Redash で可視化する

## はじめに

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

こんにちは [with](https://with.is/welcome) でAndroid エンジニアをしている石田です。with の Androidチームでは新規機能開発に加え **負債解消にも積極的に取り組んでおり、常に健康なコードベース維持を心がけています**。

本記事では [Redashというダッシュボードツール](https://redash.io/) を使用してコードベースの負債を可視化した話をします。 ツールの使い方などの詳細な説明は割愛し アイデアの説明にフォーカスします。

## モチベーション

数年以上歴史のあるプロダクトには必ず負債があります。負債の種類は設計、依存ライブラリ、命名、モジュール、言語などなど プロダクトによって様々だと思います。しかしながら 「負債は解消しないといけないんだけど、新しい機能も入れないといけないし…」 という風に **負債があるこ

元記事を表示

[Android] 実行時アノテーションによる処理例

本記事は エムティーアイ [Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mti) の 13 日目の記事です。

## はじめに

独自のアノテーションクラスを作成し、アノテーションに応じた処理を実行する例を紹介します。
あまり実用性はないので、こんなこともできるんだくらいの感覚で読んでいただけると幸いです。

記事中で説明するサンプルアプリはこちら。

https://github.com/pps5/annotation-sample

## 実行時のアノテーション取得方法

アノテーションは Retention が定められています。

– Kotlin: [AnnotationRetention](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.annotation/-annotation-retention/)
– Java: [RetentionPolicy](https://docs.oracle.com/javase/jp/8/docs/ap

元記事を表示

Galaxy Z Fold3が気になったので調べてみた

# はじめに
こんにちは、運動通信社でiOSアプリを担当している松川です。
今回は気になっていたガジェットの `Galaxy Z Fold3` について調べてみました!

# 調べてみた
まず、皆さんGalazy Z Foldって端末についてご存知でしょうか!

https://www.galaxymobile.jp/galaxy-z-fold3-5g/?cid=jp_pd_ppc_google_galaxy-z-fold3_text—1000530-210901_hot-galaxy-z-fold&gclid=CjwKCAiA-9uNBhBTEiwAN3IlNC3E1AoSyQO-X8C-Ba7_mPQ3WjuTW-zWsVzD0KcgXJiIAN7rpI7A2hoCxFgQAvD_BwE

Galaxyから出ているAndroid端末なんですが、なんと折りたたみスマホなんです!
2019年にGalaxy Foldが発売して、現在の最新機種はGalaxy Z Fold3みたいです。
Galaxyのホームページを見るのはいつぶりか分からないくらい久しぶりですが、さっそく閲覧。

ふむ

元記事を表示

Pigeonで安全なFlutter画面-ネイティブ画面のコミュニケーションを実装する

この記事は[Makuake Advent Calendar 2021](https://adventar.org/calendars/6822)の6日目の記事です。

# 概要

Flutter-Native間の通信は受け渡しできるデータ型がStringやprimitive型に限られたり、ネイティブメソッドを呼び出す際にメソッド名を文字列で取り扱う場面があるなど保守性に多少不安を感じてしまうところがある。

Pigeonを使うと、事前に定義したschemeをもとにFlutter/Java/Objective-Cのコードを自動生成しFlutter-ネイティブ間の通信をより安全に実装することができる。

例えば既存アプリにFlutterを部分的に導入したいがどうしてもFlutter-ネイティブのやりとりが発生してしまうケースにおいて、Pigeonを活用することでその障壁を下げられるかもしれない。

今回はFlutter化したログイン画面でのログイン成功時にネイティブ側にコールバックするケースを想定して実装してみる。

“`
[ネイティブ画面] -> [ログイン画面(Flutter)]

元記事を表示

技術選定を疎かにしたツケを払ったお話し

この記事は,フラー株式会社 Advent Calendar 2021 の 12 日目の記事です。

11日目の記事は @shogo82148 さんによる [AWS ClockBound で遊んでみた](https://shogo82148.github.io/blog/2021/12/11/aws-cloud-bound/) でした。

フラーに来てAndroidエンジニアとして活動を始めてから3年、マネージャーになってからも会社でも個人でもちょこちょこ開発に携わっているのですが、今回は個人アプリの開発をするときに技術選定を疎かにして、その結果どんなツケが回ってきたかのお話でもしようと思います。

##技術選定の経緯

もう2年も前のことになりますが、SUZURIさんのAPIを使ってアプリの開発をしていました。
https://qiita.com/seto_inugami/items/952a41e63c403b7e8fb2

そのときにアプリではよく見る`ViewPager + PageIndicator`のレイアウトを組みたくなってPageIndicatorのライブラリを導入するこ

元記事を表示

【Flutter & Android】インタースティシャル広告を実装する方法

# 1. Flutter でインタースティシャル広告を実装する

– [1. Flutter でインタースティシャル広告を実装する](#1-flutter-でインタースティシャル広告を実装する)
– [1.1. 概要](#11-概要)
– [1.2. 詳細](#12-詳細)
– [1.2.1. Flutter の新規プロジェクトを作成](#121-flutter-の新規プロジェクトを作成)
– [1.2.2. AdMob 実装のためのライブラリをインストール](#122-admob-実装のためのライブラリをインストール)
– [1.2.3. AndroidManifest.xml を編集](#123-androidmanifestxml-を編集)
– [1.2.4. SDK のバージョンを修正](#124-sdk-のバージョンを修正)
– [1.2.5. Kotlin のバージョンを修正](#125-kotlin-のバージョンを修正)
– [1.2.6. インタースティシャル広告を実装](#126-イン

元記事を表示

OTHERカテゴリの最新記事