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

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

Product Flavor を複数のアプリモジュールに展開したお話

# はじめに

Android用のTwitterクライアントやmixiビューアといった個人開発アプリ[^1]をいくつか開発しています。

[^1]: 法人化していますが実質開発メンバー1人の個人開発です。

Twitterアプリの TwitPane は [無料版](https://play.google.com/store/apps/details?id=com.twitpane&referrer=twitpane.com)、[有料版](https://play.google.com/store/apps/details?id=com.twitpane.premium&referrer=twitpane.com)、[Kindle版](https://www.amazon.co.jp/takke-TwitPane-for-KindleFire/dp/B00LI9AWTG) という3種類を同一ソースから生成しています。

2013年頃から開発しているので `Eclipse+ADT` 時代にどうやっていたのかはもう既に覚えていませんが、`Android Studio` に移行して `Pro

元記事を表示

[Android] Roomの@RawQueryの使いどころ

## 利用すべきでないケース
使いどころの前に、まず使うべきではないケースについて説明します。[RawQueryのドキュメント](https://developer.android.com/reference/androidx/room/RawQuery)には以下のサンプルコードが記載されていますが、どれも基本的には利用すべきではないです。

– Observable Queries
– Returning POJOs
– POJOs with Embedded Fields
– Relations

適切にプレースホルダを利用すれば、これらのほとんどのクエリを他の`@Query`等のアノテーションでも実現できます。`@RawQuery`を利用してしまうとコンパイル時のバリデーションが出来ないため、Roomのメリットを捨てることになります。

## 使いどころ
Roomの他の機能を利用して、どうしても実現できない場合には`@RawQuery`の出番です。

### PRAGMA
[PRAGMA](https://sqlite.org/pragma.html)の利用が`@RawQuery

元記事を表示

Jetpack Composeが正式版になったのでQiitaビューアに機能を追加してみた

この記事は[NTTテクノクロス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ntt-tx)の21日目です。

こんにちは、NTTテクノクロスの戸部@etctaroと申します。

普段は社内でモバイルアプリ開発関連の技術支援や社内向けのノウハウ記事執筆、社内研修講師活動、社内コミュニティ活動などを行なっています。
社内研修でも本記事のテーマである[Jetpack Compose](https://developer.android.com/jetpack/compose?hl=ja)を取り扱っています。

# はじめに
– Jetpack Composeは今年7月に正式にリリースされた、Androidアプリの宣言的UIフレームワークです。
– 一言で言えば、新しいUI開発手法となります。
– 12/1現在のStable版は1.0.5であり、次のバージョンである1.1系についても、ベータ版になっています。

※という、ざっくりな説明を **今年たくさんした気がします** 。

# 今回のサンプルコードにつ

元記事を表示

【android】折りたたみ式端末対応

この記事は[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory) 21日目の記事です。
昨日は [@ticktakclock](https://qiita.com/ticktakclock) さんの [【Jetpack Compose】お気に入りボタンのタップアニメーションの作り方](https://qiita.com/ticktakclock/items/e671733d1c5daac10ac7) でした。

# はじめに
android10で折りたたみ式端末のサポートが正式に始まり、OPPOから13万円台の折りたたみスマホが発表されるなど、折りたたみ端末が身近になりつつある昨今。
GoogleDevelopers[折りたたみ式端末に対応したアプリの作成](https://developer.android.com/guide/topics/ui/foldables?hl=ja)から、どう対応していくのかを見てみます

# [序文](https://develo

元記事を表示

Androidでもシェーダーでモニョモニョしたい!

こんにちは!tkhsktです。
昨今のオシャレWeb界隈ではWebGL(OpenGL)がたくさん使われていますが、AndroidやiOSではあまり話を聞かないな〜と思ったのでやってみました。

## OpenGL ES実行環境の構築

AndroidでOpenGL ESを使う場合、`GLSurfaceView`を利用することが多いと思います。が、`GLSurfaceView`では生に近いOpenGLの設定を書く必要があるため、OpenGLの知識がないとかなりキツいです。

### ShaderView

そんなOpenGL ESの辛さを(一部)解決してくれるのが、[appspell/ShaderView](https://github.com/appspell/ShaderView)です。これは、[TextureView](https://source.android.google.cn/devices/graphics/arch-tv?hl=ja)をベースに作られたカスタムビューで、シェーダーを簡単に扱うことができます。
本記事では、この`ShaderView`を使ってモニョモニョし

元記事を表示

[Android]Applicationクラスとは何か?

##この記事は
質問箱でも、聞かれたことのある

「Applicationクラスってなんですか?」

に対する回答を記事にまとめてみます。
##Applicationクラスとは?
まず、Applicationクラスを「全体」のことと捉えてください。
そうすると、イメージがつくかなと思います。

実際の動きとしては、Androidアプリが起動した時に最初にインスタンス化されるクラスです。

このクラスでは、アプリ全体で用いる設定をこのクラスで行います。
例えば、RoomなどのローカルDBの呼び出しやHiltのトリガーなどなど。

ちなみに、不要であればApplicationを継承したクラスをわざわざ作らなくても大丈夫です。

##まとめ
Applicationクラス is 全体.
##参考
https://guides.codepath.com/android/Understanding-the-Android-Application-Class

元記事を表示

【Flutter】AdMob広告のアプリID,ユニットIDをdebug/releaseビルドで切り替える

ちょっと想像してみてください。

Flutterで作ったアプリで儲けたい!そう考え、AdMob広告をつけることにしたあなた。
開発中エミュレータを使用するため、AdMob広告のIDはテスト用のものを設定します。

アプリを頑張って作って、審査も通って、よし、リリースだ!
そんな時ふと気づきます。
「あれ、AdMob広告のID,本番用にしたっけ。。。?」

こんな経験、ありませんか?(私はあります。)

IDを変えるのを忘れなければ済む話ではあるんですが、
リリースにあたっての作業はかなり多く、IDを変える、のような細かいタスクは忘れやすいです。
また、IDを変える作業は結構手間でミスも発生しやすいです。
なので、この作業、自動でできるように検討しました。

本記事では、AdMob広告のアプリID,ユニットIDをdebug/releaseビルドで切り替える方法について解説します。
具体的には以下を解説します。

– アプリID の切り替え
– iOSの場合
– Androidの場合
– ユニットIDの切り替え

設定はちょっと手間ですが、一度やってしまえば、自分で変え

元記事を表示

FlexboxLayoutManagerを利用した際のEditTextのfocusについて

会社ではRecyclerViewにいろいろなサイズ幅のViewを入れるフリーレイアウト機能みたいなのがあり、そこでFlexboxLayoutManagerを利用してRecyclerViewを利用しています。
その際にEditTextが入った時にフォーカスが外れるという現象に遭遇しちょっと調べた内容をまとめておきます。

下記条件が揃った時のみですが、フォーカスが強制的に外れます。。。
1. softInputModeをadjustResize
2. EditTextをキーボードが隠れる位置に配置

LinearLayoutManagerの場合
linearLayoutManager

FlexboxLayoutManagerの場合
linearLayoutManagerFlutterアプリに(ホーム)ウィジェットを追加してみる+α

この記事は [NTTテクノクロス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ntt-tx)の20日目です。

こんにちは。NTTテクノクロスで、エバンジェリストとして活動している神原([@korodroid](https://twitter.com/korodroid))です。実は、本日投稿予定だった弊社の別メンバがやむを得ない事情により、担当できなくなりました。同記事を楽しみにしてくださっていた皆様、申し訳ございません。代わりに、私が20日目をお送りします。

自己紹介は、投稿済みの14日目の私の別記事[「海外活動を通じて得た英語の学び方+α」](https://qiita.com/korodroid/items/193788fd1a911be77725)をご覧いただけますと幸いです。よろしければ、記事も合わせて読んでいただけたらうれしいです。

それでは、今回の内容に入っていきます。先日、 **Flutterでアプリを作っていて、このアプリに(ホーム)ウィジェットを追加したいという衝動に駆られ、実現しま

元記事を表示

ニフクラmobile backendの新Kotlin SDKについて

4年ぶりのqiita記事になりますが、今回FCJTが開催している[アドベントカレンダー](https://qiita.com/advent-calendar/2021/fjct)に参加するために、記事を書くことになりました。ということで、20日目の記事となりますが、どうぞよろしくお願いします。
昨日は[ysaotome](https://qiita.com/ysaotome)さんのがっちり内容となった [ニフクラ上の Docker ホストへ VMware Tanzu Community Edition(TCE) のマネージドクラスタを構築してみた(V0.9.1)](https://sotm.jp/2021/12/18/vmware-tanzu-community-edition-v091-managed-clusters-on-docker-on-nifcloud/)内容でしたが、今回はかなり初心者向けの内容になります。ニフクラmBaaSが2年ぶりに新SDKとなるKotlin SDK (ncmb_kotlin)を対応し、12月中に正式にリリースすることになりますので、こちらについていく

元記事を表示

AppLinksのサポート先を複数登録した場合の挙動

# 何が問題か

曖昧さ回避ダイアログが出てしまう。
![Screenshot_2021-10-15-16-20-37-857_android.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429030/e5737e50-ea22-6aec-9a76-3f27eb11ec64.jpeg)

AppLinksを設定済みで、SHA256証明書はyyy.page.linkと、xxx.page.linkに連携してます。

Android8の場合はアプリ設定画面にて”Open supported links”の設定がデフォルトで”open in this app”に設定されるのですが、
Android11の場合は”ask every time”となってしまうようです。

## Android11

毎回ダイアログで開くアプリを聞かれる
![Screenshot 2021-10-14 133304.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

フィーチャーで気にされる[戻る]ボタンについて

# はじめに
この記事ではGoogleゲームアプリのフィーチャーの審査においての、[戻る]ボタン(※)にフォーカスを絞ってお話しさせていただこうと思います。
[Developer向けガイドライン](https://developers-jp.googleblog.com/2017/07/standard-back-key-navigation-on-android.html)内でも記載されており、個人的に重要な要素として考えています。
実装的にというより、テストを依頼された際に観点を持っておく、期待値としての情報を持っておく目的で、参考になれば幸いです。

※バックキー、⇦ボタンなど呼称がありますが、この記事では[戻る]ボタンと記載いたします
####読了までの時間
・約5分
####ターゲット
・これから[戻る]ボタンのテストを行うが、明確な期待値をもっていない方

# [戻る]ボタンの動作について
Androidのナビゲーションバーにある[戻る]ボタンをタップした際の動作で好ましいものとしては、分かりやすく言うと下記のような動作が担保されていると指摘を受けにくいと感じます。

**

元記事を表示

【Jetpack Compose】 Molecule を使って Flow → StateFlow に変換する

## はじめに

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

こんにちは [with](https://with.is/welcome) でAndroid エンジニアをしている石田です。Jetpack Compose がプロダクトで使えるようになって以来、 **「状態」** を扱うことが多くなったように感じる今日このごろです。

というわけで今回は状態にまつわるお話です。

## Composeで状態を扱う時に困ること

状態を扱うとき、ViewModel では `StateFlow` 、 Compose では `State` を使用します。 `StateFlow` は `collectAsState` を使って 簡単に `State` に変換することができます

困るのは `Flow` を `State` に変換したい場合です。 `StateFlow` と同様に `collectAsState` を使っ

元記事を表示

Jetpack Composeの学習にBloomはどう?

今年の7月にJetpack Composeが正式リリース(1.0)となり、本格的にプロダクトに利用されるようになってきました。
がっつり使っているよ!という方も、これから勉強していくよ!という方もいると思います。
Jetpack Composeの勉強にとても役立った課題について書かせていただきます。

## Bloom is :thumbsup:

[Android Dev Challenge: Week 3 – Speed round](https://android-developers.googleblog.com/2021/03/android-dev-challenge-3.html)のAPAC向け課題が**Bloom**というアプリを時間内に作成するというものでした。
この課題の良かった点を上げていこうとおもいます。

### Android Dev Challenge – Jetpack Compose
2021年の5月におこなわれたAndroid Dev Challengeは、Jetpack Composeを利用し限られた時間内に課題にそったアプリを作成し提出するとい

元記事を表示

【Android】Jetpack Composeでよく使うプロパティをまとめてみた

こちらの記事は[食べログAdvent Calendar2021](https://qiita.com/advent-calendar/2021/tabelog)の20日目の記事になります。

今年の8月に食べログのAndroidエンジニアとして入社しました、柴犬好きな @hokutonikukyu です!
食べログでは、主にUI/UX周りの開発・修正を担当しています!

AndroidのJetpack Composeが追加されてしばらく経ちますが、まだがっつり触れることができていないです、、、
今回は自身のメモがてらComposeのViewプロパティについて少しだけまとめてみようかと思います!!

#はじめに
JetpackComposeとはどういうものなのか、軽く触れます。
以下、[ **公式ドキュメント** ](https://developer.android.com/jetpack/compose/why-adopt?hl=ja)からの抜粋です。
> Jetpack Compose は、ネイティブ UI をビルドするための Android の最新ツールキットです。少ないコード、

元記事を表示

【Jetpack Compose】お気に入りボタンのタップアニメーションの作り方

この記事は[and factory.inc Advent Calendar 2021](https://qiita.com/advent-calendar/2021/andfactory) 20日目の記事です。
昨日は @k_shinn さんの [【Android】画面分割やカットアウトに負けない画面サイズの測り方](https://qiita.com/k_shinn/items/e6c12d459bec5af36fae) でした。

## はじめに

ツイッター等アプリでよく見る『お気に入り、いいねボタンをタップしたときのアニメーション』をjetpack composeで1ステップずつ段階を踏んで作ってみたいと思います。

![record-211219154544.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193770/8bccfe88-492b-a005-3934-fd421cb423cd.gif)

## ドキュメント類

https://developer.android.com/jet

元記事を表示

clusterのAndroidアプリ開発状況2021版

この記事は クラスター Advent Calendar 2021 20日目の記事です。
昨日は、@ryoya_ino の「2021年の振り返りと2022年に向けて」でした。

https://note.com/inotch247/n/na6e684228e54

これで抜粋なんですよねぇ、並べてみると本当にすごい色々イベントやってたな〜と改めて感じます。

このイベントでほしい!と言われた機能を**そのイベントだけで使える機能**ではなく、**プラットフォームの機能として落とし込む**ことはできないか?みたいなのを考えたり設計するのも楽しいし、我々の腕の見せ所って感じですね。
引き続きやっていき! :muscle: :muscle: :muscle:

## はじめに
[クラスター株式会社](https://recruit.cluster.mu/engineer/)で、clusterのプラットフォーム事業部に所属しています。
バックエンドServer(Go)とモバイルアプリ(Android)の開発を担当をしているkyokomi(きょこみ)です!!

https://qiita.com

元記事を表示

【最新版】九州大学の全学基本メールのiPhone Android 設定方法.設定できない時の対処法.

九州大学の基本メールをスマホ(iPhone, Android)に追加する際に,下記の公式マニュアルでは設定不可能だったため.解決法を載せておきます.

修正版↓
https://kaedeee.com/kyushu-univ-mail-setting

「設定不可能になってしまっている」公式マニュアル
http://www.hes.kyushu-u.ac.jp/~hesguide/wp-content/uploads/2016/12/iPhone-mail.pdf

#問題点

公式マニュアルでは,「アカウント追加」の際.「その他」から追加することになっていますが,これだとうまくいきません.

![スクリーンショット-2021-12-07-13.08.26-1024×578-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1900756/bc5f26b0-3a72-bf9d-91e3-5f6a46c0d480.png)

#解決方法
「アカウント追加」の際.「Exchange」を選択します.

元記事を表示

[Android Kotlin]インタースティシャル広告のcloseイベント検知

### 実装

“`MainActivity.kt
val adRequest = AdRequest.Builder().build()
InterstitialAd.load(context, interstitial_id), adRequest, object : InterstitialAdLoadCallback() {
override fun onAdLoaded(interstitialAd: InterstitialAd) {
interstitialAd.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
super.onAdDismissedFullScreenContent()
// ここに閉じたあとの処理を記述する
}
}

元記事を表示

リストの先頭or末尾を調べる方法

いつも調べて思い出すことが多いので、メモとして残しておこうと思います。

#・リストの先頭かどうか

上記は以下で判断が可能です。

“`
recyclerView.canScrollVertically(-1).not()
“`

#・リストの末尾かどうか
上記はcanScrollVerticallyの引数を反転させれば判断が可能です。

“`
recyclerView.canScrollVertically(1).not()
“`

#・onScrolledでの実装
onScrolledで見たいケースが殆どだと思いますが、大体以下のような実装になるかと思います。

“`
binding.recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (recyclerView.can

元記事を表示

OTHERカテゴリの最新記事