- 1. Guide to app architectureからプラクティスを拾うメモ データレイヤー編
- 2. Binding Coroutine Job, SupervisorJob and viewModelScope to Android Lifecycle
- 3. WorkManagerを使ってバックグラウンドでエンドポイントを呼び出す
- 4. 【Android】AnimatedVectorDrawableを作成する
- 5. DroidKaigi2021
- 6. スマホアプリ クロスプラットフォーム開発 in Flutter
- 7. Viewを突き出して表示させたい
- 8. JetpackComposeでJavaクラスを引数にとるとスマートコンポジションが効かない(1.1.0-rc03時点)
- 9. MotionLayoutの例を試してみる(カスタム属性編)
- 10. 【Android】アプリのローカライズ(海外言語対応)する方法について
- 11. ViewBindingをonViewCreated以外でも使う時とonViewCreatedでしか使わない時
- 12. 【2022年版】OpenCV for Androidのlibopencv_java4.soのバイナリサイズを減らし、APKのサイズを減らす
- 13. Clound Functionsで特定のAndroidアプリのみ許可する
- 14. [Android]Androidアプリ開発でのNend広告実装方法[Nend広告]
- 15. 【Flutter】そのおじさん、オーバーフローしてませんか?
- 16. 【AndroidStudio】 便利なAuto Import機能でimportの手間をなくす
- 17. パーミッションを要求するためアプリの設定画面へ飛ばす【Swift/Kotlin】
- 18. argumentsを使いactivityからfragmentにオブジェクトを渡す【Android】【kotlin】
- 19. CoordinatorLayoutについて
- 20. JUnitでのユニットテストに入門してみた
Guide to app architectureからプラクティスを拾うメモ データレイヤー編
https://qiita.com/takahirom/items/8175752b86fd38105482
の続きです。
https://developer.android.com/jetpack/guide/data-layer?hl=en
## 用語整理
データレイヤーとは?
> **While the UI layer contains UI-related state and UI logic, the data layer contains application data and business logic. The business logic is what gives value to your app—it’s made of real-world business rules that determine how application data must be created, stored, and changed.**
アプリケーションデータとビジネスロジックを含む。ビジネスロジックはアプリに価値を与えるもので、ビジネスロジックはアプリケーシ
Binding Coroutine Job, SupervisorJob and viewModelScope to Android Lifecycle
#目次
[0.はじめに;](#0-はじめに)
[1.TLDR](#1-TLDR;)
[2.Coroutine Job](#2-Coroutine Job)
[3.SupervisorJob](#3-SupervisorJob)
[4.viewModelScope](#4-viewModelScope)
[5.おわりに](#5-おわりに)#0-はじめに
株式会社オプティマインドのGoです!When developing android apps, it is often common for beginners to be confused about how the kotlin coroutine integrated with android lifecycle. In this article I will explain the relationship between Coroutine Job, SupervisorJob and viewModelScope using a simple example (I will use Hilt as DI tool as
WorkManagerを使ってバックグラウンドでエンドポイントを呼び出す
## はじめに
### WorkManagerとは
WorkManagerは重たい処理や永続的な処理などをバックグラウンドで実行するために提供されているAndroidのフレームワークです。例えば重いデータのアップロード処理や定期的なタスクをバックグラウンドで実行したいといったユースケースで推奨されるフレームワークです。### やりたいこと
今回はViewのライフサイクルに依存せずにエンドポイントを呼びたいケースがあり、WorkManagerを使ったやり方でシンプルに実現できたため、その説明したいと思います。簡単に説明するとボタンを押下後に、エンドポイントを呼び出す必要があったのですが呼び出すViewが破棄されてしまうため通常のやり方だと非同期処理がキャンセルしてしまうのため、WorkManagerを使ってライフサイクルに依存せずにエンドポイントを呼び出したいというのがモチベーションです。## アクセス方法
Workerには2種類のアクセス方法があり、– OneTimeWorkRequest
– PeriodicWorkRequestが実装されており、OneTime
【Android】AnimatedVectorDrawableを作成する
# 概要
作成方法が少しややこしかったので、自分用にメモ。
[AnimatedVectorDrawable](https://developer.android.com/guide/topics/graphics/drawable-animation?hl=ja#AnimVector)により画像をアニメーション化する方法について説明。
ここでは、[Shape Shifter](https://shapeshifter.design)を使用して作成する方法を記述。# 作成方法
## 1. SVG画像を2個用意
アニメーション開始時の画像と終了時の画像をsvg形式で用意。## 2. Shape Shifterにimport
[Shape Shifter](https://shapeshifter.design)サイト内
DroidKaigi2021
# Index
1.プロダクトレベルで必要になるJetpackComposeテクニック
2.Master Of Lifecycle
3.長く生きるコードベースの「品質」問題に向き合う## 1.プロダクトレベルで必要になるJetpackComposeテクニック
#### Android Jetpackとは
Android Jetpackとは、Android公式開発者ページにある通り、
ベストプラクティスを集めたライブラリである。ボイラープレートコード(ほぼ固定化されたよく出てくるコード)を減らし
Androidバージョンやデバイスが変わっても一貫して機能するコードの作成を助け、
コーディングの負担を軽減する。Android Jetpackは、4つのカテゴリに分類される。
![スクリーンショット 2021-12-05 14.56.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355942/2c081f92-e46b-f5ef-4dc9-10b151e04ee2.png)#### Jetp
スマホアプリ クロスプラットフォーム開発 in Flutter
# Index
1.Flutterフレームワーク
2.AndroidStudioで開発できる
3.UIの記載はネストを多用する
4.UIとビジネスロジックを分けて書く
5.KotlinとSwiftによる書き分けが必要な場合がある
6.Dartプログラムのエントリーポイント
7.使用パッケージの宣言
8.ホットリロードで一回一回ビルドしなくてもいい
9.動作確認
10.アプリ公開## 1.Flutterフレームワーク
2018年12月にGoogleからリリースされた、モバイルアプリ開発用のフレームワーク。#### Dart言語
従来ならば、AndroidならKotlin
iOSであればSwift
という、それぞれの言語を覚えなければいけないがFlutterの場合は、DartというJavaライクな言語を覚えるだけで
両方の開発ができ、学習コストを抑えることができる。## 2.AndroidStudioで開発できる
##### AndroidStudioのインストール
![スクリーンショット 2022-01-20 20.56.23.png](https://qiita-im
Viewを突き出して表示させたい
#初めに
Viewを突き出して表示したい
Viewを他のViewと重ねて表示したい
そんな時のためにやり方を残しておきます#コードでxmlに書いていく
JetpackComposeでJavaクラスを引数にとるとスマートコンポジションが効かない(1.1.0-rc03時点)
# TLTR
## どういう現象が発生し得るか?
* Composable関数の入力値にJavaで書かれたクラスがある場合、スマートコンポジションが効かなくなってしまう場合があるようです。
つまり、__入力値が前回と今回で全く同じであったとしても、毎回再コンポジションが発生してしまうということ__です。## 回避するには
クラスに@Stable or @Immutableアノテーションを付与しましょう。* 公開プロパティが全て不変である場合は、@Immutalbeを付与しましょう。
* 公開プロパティの変更をComposable関数に通知したい場合(再コンポジションを発生させたい場合)は、@Stableを付与しましょう。__ただし、闇雲に上記アノテーションを付与すると、再コンポジションの仕組みがうまく行かない場合があるため、アノテーションを付与できる細かい条件は下記公式ドキュメントを参照して下さい!!__
https://developer.android.com/jetpack/compose/lifecycle?hl=ja#skipping# 詳細
## 前提
MotionLayoutの例を試してみる(カスタム属性編)
前回は基本的なモーションをやりました。
[前回の基本的なモーション](https://qiita.com/yuta317/items/7a81ddcda30afc8e45d2)今回はカスタム属性を試してみようと思います。
# 公式リファレンス
https://developer.android.com/training/constraint-layout/motionlayout/examples?hl=jahttps://developer.android.com/training/constraint-layout/motionlayout/ref?hl=ja
# カスタム属性
今回はビューの移動に伴ってビューの背景色を変更しようと思います。
こんな感じです。
![カスタム属性.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/8075cd7e-ba93-0b1c-e92a-fd11e8db46c6.gif)
“` sample_scene.xml
【Android】アプリのローカライズ(海外言語対応)する方法について
# 海外言語の対応について
よく越境とかインバウンドとか聞きますが、ようするに海外言語に対応して表示する文字列を英語とかフランス語とかに対応させようって話で
Androidではどうやるのっていうのを記載します。# ユーザによる言語変更のイメージ
私のOPPO端末でのイメージ画像ですが、このように言語設定変えることを指しています。
![Screenshot_2022-01-30-17-45-56-94_png_と_Screenshot_2022-01-30-17-45-52-56_png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574173/3796c948-39c3-a2a6-dc0e-a44cf8ca6491.png)
# 開発側でどこを変更するのか
※公式を参考に説明しています。~~知っている風に書いててごめんなs~~
https://developer.android.com/guide/topics/resources/localization?hl=ja## Androi
ViewBindingをonViewCreated以外でも使う時とonViewCreatedでしか使わない時
#使い分けが必要
`ViewBinding`を`onViewCreated`以外でも使う時と`onViewCreated`でしか使わない時とでは書き方が異なる。できるだけ、変数のスコープが狭くしたいという意図がある。また、今回はFragmentの`onViewCreated`においての話であるが、Activityの`onCreate`に関しても同様である。## onViewCreated以外でも使う時
“`kotlin
private var _binding: FragmentHomeAllBinding? = null
private val binding
get() = _binding!!override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)_binding = FragmentHomeAllBinding.bind(view)
binding.allRecycl
【2022年版】OpenCV for Androidのlibopencv_java4.soのバイナリサイズを減らし、APKのサイズを減らす
# はじめに
## Qiitaマイルストーン
2019年01月20日に投稿した記事「[OpenCV for Androidのlibopencv_java4.soのバイナリサイズを減らし、APKのサイズを減らす](https://qiita.com/tfandkusu/items/188d51b5c1c76dd540fd)」ですが、おかげさまで3年かけて10LGTMを達成して、Qiitaマイルストーンで紹介されました。
10LGTM! | OpenCV for Androidのlibopencv_java4.soのバイナリサイズを減らし、APKのサイズを減らす by @tfandkusu https://t.co/rnYrepPYBX
— Qiitaマイルストーン (@qiita_milestone) January 19, 2022
## 現在ではできない方法
そこで3年前のやり方は2022年1月現在で可能なのかやってみたところ、できなかったです。そこで新たにやり方を調べたので紹介しようと思います。
# Dockerを使ってビルドする
結論からいうと、MacではDockerでビルドできました。Macネイティブではできなかった理由は後で解説します。
## 全体ソースコード
今回のソースコードはGitHubで公開しています。
https://github.com/
Clound Functionsで特定のAndroidアプリのみ許可する
# はじめに
こんにちは。Androidエンジニアのgottieです。
個人開発でCloud Functions(GCP)を使ってみたのですが、APIのアクセス制限の方法が少しやっかいだったため記事にしておきます。# やりたいこと
特定のAndroidアプリからからのみ、GCPのAPI呼び出しを行えるようにしたいです。# やったこと
**1 APIキーの作成**
GCPの「APIとサービス」から「認証情報」>「認証情報を作成」>「APIキー」を選択します。
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130833/d5f5c94a-5449-8dc9-7e4f-56afc54a7d5b.png)|
|:–|作成したAPIキーの詳細に移動すると以下の画面が表示されます。
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2130833/9ceb9088-5
[Android]Androidアプリ開発でのNend広告実装方法[Nend広告]
# はじめに
Qiita初投稿になります。
私はAndroidでアプリ開発を勉強しています。
去年、作ったアプリを初めて公開することができました。https://play.google.com/store/apps/details?id=com.chaba_lab.kitchen_timer
今回はそのアプリにNend広告を実装しましたので、その時のことを記事にしたいと思います。
基本的にはマニュアルがわかりやすいので、そこまでつまずくことはないかなと思いますが、一部わからない部分が自分はありましたので、メモに残しておきたいと思います。
よろしくお願いします。
# 環境
– nend-sdk : 8.0.1
– AndroidStudio Arctic Fox 2020.3.1
– 使用言語 Kotlin# 目次
– [はじめに](#はじめに)
– [環境](#環境)
– [目次](#目次)
– [nendのメディア会員に登録](#nendのメディア会員に登録)
– [アプリの登録と広告枠を作成する](#アプリの登録
【Flutter】そのおじさん、オーバーフローしてませんか?
# プロローグ
Flutterの勉強を始めて1ヶ月。
Aさんの元についに初めての案件が!**「おじさんが痩せたり太ったりするモバイルアプリ作成」**
仕様を見ると、
**「スクロールなしの1画面に文字とボタンとおじさんの画像を表示するだけ」**
らしい。簡単そうだったので、Aさんは早速作業開始!
意気揚々に作り始めて30分。Aさん 「できました!」
と自信満々にクライアントに見せる。 g早速 **iPhone13** で確認作業が始まる。
クライアント 「うん、いい感じ!SafeAreaの対応もばっちりだし!!」
…でも、 **iPhoneSE 第一世代で確認すると、あららら?**
【AndroidStudio】 便利なAuto Import機能でimportの手間をなくす
# Unresolved reference: ○○
このようなエラーはAndroidStudioで開発しているとよく起きますね。
使いたいクラスや機能などをimportしてないことから起きています。解決方法としてはOption + Enterキーを押すかImportをの箇所をクリックするとimportコードが記載されて突破できます。
今回はその手間をなくす方法の紹介です。![スクリーンショット 2022-01-30 11.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574173/f2be6021-c83f-3d55-89ba-6b0011e7bcd6.png)
# Auto Import機能の追加方法
## Android Studio > Preferencesを開く
ここではAndroidStudioの環境設定をしています。
変えたいことのない設定は多くありますが、設定の変更はここで可能です。![スクリーンショット 2022-01-30 11.13.38.png](
パーミッションを要求するためアプリの設定画面へ飛ばす【Swift/Kotlin】
# はじめに
Android、iOSに限らず、アプリがBluetoothやカメラを利用する際にはユーザがその権限を許可する必要があります。
許可を求めるポップアップが表示され、そこで「許可する」「許可しない」をユーザが選択します。
「許可する」が選択された場合は特に問題ありませんが、「許可しない」が選択された場合は、もう一度許可を求めたり、設定画面から許可するように促す必要があります。設定画面から許可を促すために設定画面へ飛ばすコードを以下に記述します。
# iOS
以下のコードでアプリの設定画面へ飛ばすことができます。
“`.swift
if let url = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
“`以下の画面に飛び、権限の許可ができます。
![名称未設定3.jpg](https://qiita-image-store.s3.ap-northeas
argumentsを使いactivityからfragmentにオブジェクトを渡す【Android】【kotlin】
フラグメントに値を渡すやり方を備忘録として残します。
activityからactivityへの値の受け渡しはintentを使いました
fragmentに値を渡すときにはargumentsというfragmentが持つプロパティをつかいます。argumentsはBundleという型のプロパティです。
値を渡すにはBundleのインスタンスを作り、BundleにputIntなどで値を渡します。オブジェクトを渡す方法は、、、
main.Activity内でfragmentクラス、Bundleクラスをインスタンス化する
インスタンス化したbundleにputParceLable(キー, オブジェクト)
fragmentクラス.arguments = bundle
と繋ぐことで対象のfragmentへオブジェクトを渡すことができる。前提としてデータクラスを使い@Parcelizeを実装してるとする。
“`main.Activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCr
CoordinatorLayoutについて
#はじめに
##早速実装
パレットからAppBarLayoutをconstraintLayoutとかの場所にドラッグ
すると下の画像のようなポップアップが表示される。
Collapsing Toolbarにチェックを入れてOKを押下する。
現段階で実行したのがこちら。
![image.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/339e43e2-7ce9-4
JUnitでのユニットテストに入門してみた
# はじめに
初めまして、Androidエンジニアのバナナと申します。
Android開発の経験年数はそれなりになるのですが、テストコードを書くことなくここまできてしまったため、今年こそはという思いでテストについてまとめていければと思っています。
Androidテストのバイブルと言われている[Androidテスト全書](https://peaks.cc/books/android_testing)を参考に進めていきます
まずは、JUnitを使って簡単なユニットテストをしていきます。# テスト対象クラスの作成
今回は簡単な入力ボックスを想定し、8文字以上の英数字の入力であれば真を返すメソッドを持つクラスを作成していきます。“`kotlin:InputChecker.kt
class InputChecker {
fun isValid(text: String): Boolean {
if (TextUtils.isEmpty(text)) throw IllegalArgumentException(“Cannot be blank”)