- 0.1. Misuse of Sign in with Google API: Use of `:googleid` classes without use of `GoogleIdTokenCredential`
- 0.2. 初心者エンジニアによるAndroidアプリ開発日記⑤
- 0.3. ど素人の私が Material3 と仲良くなるために読んだWebサイト
- 0.4. MVP(Model-View-Presenter)をComposeでやってみる
- 0.5. Jetpack ComposeでActivityを再起動せずにアプリのテーマを変更する方法
- 0.6. グラフライブラリ6. Maven Centralにデプロイする
- 0.7. グラフライブラリ 5. タッチ、インタラクション
- 0.8. グラフライブラリ 4. デザイン適用
- 0.9. グラフライブラリ 3. グラフデータの作成
- 0.10. グラフライブラリ 2. グラフ軸の作成
- 0.11. グラフライブラリ 1. カスタムビュー生成
- 0.12. グラフライブラリ 0. 企画、データ構造
- 0.13. iOSとAndroidでPWAをサポート
- 0.14. GitHub ActionsでMagisk Patchを自動化する
- 0.15. 【Flutter】Flutter 3.24.0にアップデートした際に発生したビルドエラーの解決方法
- 0.16. Google推奨アーキテクチャとClean Architectureの違い
- 0.17. Google Playからインストール数などの情報を取得
- 0.18. EC2とスマホをOpenVPNでつなげてみた。
- 1. はじめに
- 2. 1.EC2を立てる
- 3. 2.EC2側の設定。
Misuse of Sign in with Google API: Use of `:googleid` classes without use of `GoogleIdTokenCredential`
Ladybug2024.2.1にアップデートしたところ、Lintが次のメッセージで失敗するようになりました。
“`
Error: Use of :googleid classes without use of GoogleIdTokenCredential [CredentialManagerSignInWithGoogle]
val googleIdOption = GetGoogleIdOption.Builder()
~~~~~~~~~~~~~~~~~Explanation for issues of type “CredentialManagerSignInWithGoogle”:
When using :googleid classes like GetGoogleIdOption and
GetSignInWithGoogleOption, you typically must handle the response using
GoogleI
初心者エンジニアによるAndroidアプリ開発日記⑤
# まえがき
前回にレイアウトの大まかな実装を行うことができたので、今回はロジックの大枠を実装していきます。前回は[こちら](https://qiita.com/hukusima65/items/5cf550cd345718f9d57d)
# 目次
* [概要](#概要)
* [アクティビティ実装概論](#アクティビティ実装概論)
* [AppCompatActivityクラス](#appcompatactivityクラス)
* [Rクラス](#rクラス)
* [実装:manifests](#実装manifests)
* [実装:TitleActivity](#実装titleactivity)
* [実装:QuizActivity](#実装quizactivity)
* [実装:IncorrectActivity](#実装incorrectactivity)
* [国旗リソース](#国旗リソース)
* [動作確認](#動作確認)
* [終わりに](#終わりに)—
## 概要
この記事では、アプリ全体のロジックの実装内容を記載する。## アクティビティ実装
ど素人の私が Material3 と仲良くなるために読んだWebサイト
## デザインできる人ってかっこいいじゃないですかー
7年前にほぼデフォルト設定で作成した Android アプリのデザインを [Material Design 3](https://m3.material.io/) にしたら、かっこよくなれるんじゃないかという素人的な発想でデザインの変更に取り組んでみたら、まぁ時間が溶けていきました。最初は、Google 検索と ChartGPT とか使えばさくっと終わると思って検索ワードやプロンプトを入力しまくってましたが、なんかうまく動かず、色が変わらん!?という状況でイライラモードになりました。
結局、Material Design の公式サイトを読むところから始めるのが一番良かったというおちになりますが、作業を進めていく間にブックマークした Web サイトをまとめておきます。
## Web サイト集
### 1. Material Design の前に
そもそも Android アプリの Style や theme について知識ゼロの自分が、Material Design の公式サイトを読んだところで、チンプンカンプンになりました。知
MVP(Model-View-Presenter)をComposeでやってみる
## 要旨
ComposeアプリにおけるアーキテクチャはMVVM(Model-View-ViewModel)がよく用いられるが、今回はMVP(Model-View-Presenter)を用いてアプリを作成していく。
## MVP(Model-View-Presenter)について一言で
Presenterはビジネスロジック(Model)とUi(View)の仲介役である。
“`plantuml
package “Model” {
}package “Presenter” {
}package “View” {
}[Presenter] <.. [Model] : Update [Presenter] --> [Model] : Fetch
[Presenter] <-- [View] : Emit\nUiEvent [Presenter] ..> [View] : Update\nUiState
“`今年のDroidKaigiアプリはMVPアーキテクチャで作成された。
https://github.com/DroidKaigi/conference-app-
Jetpack ComposeでActivityを再起動せずにアプリのテーマを変更する方法
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/compose-theme-viewmodel/), 同じく私が作成しました。)*
一般的にAndroidアプリでテーマを変更すると、Activityを再起動する必要があります。しかし、いくつかのアプリを利用していた時、テーマを変更してもActivityを再起動しないアプリをいくつか発見し、興味を持って分析した後、好みに合わせて変更して実装してみました。
## 新しい発見
Android開発をしていると、Activityのライフサイクルで`onCreate`は無条件に1回だけ呼び出されるという事実を知っているはずです。そうやってアプリを開発してる時、`onCreate`が二回呼び出される現象を経験して、原因を調べてみると、ActivityでConfigurationの変更が起こる何かをしたことに気づきます。([参考](https://developer.andro
グラフライブラリ6. Maven Centralにデプロイする
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/graph-library-6/), 同じく私が作成しました。)*
グループプロジェクトでグラフライブラリを実装する過程をまとめてみました。この記事では完成したグラフライブラリをMaven Central Repositoryへ配布する過程について説明します。([project repo](https://github.com/boostcampwm2023/and09-PriceGuard), [library repo](https://github.com/Taewan-P/material-android-chart))
## Sonatype 加入、課題生成
まず、アカウントがない場合は[https://issues.sonatype.org/](https://issues.sonatype.org/)に入って会員登録をします。
![sonatype
グラフライブラリ 5. タッチ、インタラクション
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://github.com/boostcampwm2023/and09-PriceGuard/wiki/%EA%B7%B8%EB%9E%98%ED%94%84-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-5.-%ED%84%B0%EC%B9%98,-%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9))*
グループプロジェクトでグラフライブラリを実装する過程をまとめてみました。今回の記事ではその中でタッチやインタラクション処理部分について説明します。([project repo](https://github.com/boostcampwm2023/and09-PriceGuard), [library repo](https://github.com/Taewan-P/material-android-chart))
### 問題 1.グラフの軸ですべてのデータを
グラフライブラリ 4. デザイン適用
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://github.com/boostcampwm2023/and09-PriceGuard/wiki/%EA%B7%B8%EB%9E%98%ED%94%84-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EB%94%94%EC%9E%90%EC%9D%B8-%EC%9E%85%ED%9E%88%EA%B8%B0), 同じく私が作成しました。)*
グループプロジェクトでグラフライブラリを実装する過程をまとめてみました。今回の記事ではその中でグラフデザインやテーマの部分について説明します。([project repo](https://github.com/boostcampwm2023/and09-PriceGuard), [library repo](https://github.com/Taewan-P/material-android-chart))
# 目標
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/graph-library-3/), 同じく私が作成しました。)*
グループプロジェクトでグラフライブラリを実装する過程をまとめてみました。今回の記事ではその中でグラフデータを描画する部分について説明します。([project repo](https://github.com/boostcampwm2023/and09-PriceGuard), [library repo](https://github.com/Taewan-P/material-android-chart))
## グラフデザインモチーフ
まず、実装方法を説明する前になぜこのライブラリを実装することになったのか説明します。
ブーストキャンプグループのプロジェクトデザインをする時、Material Designを遵守するデザインで制作しようと思い、グラフのデザインもMaterial的に反映させ
グラフライブラリ 2. グラフ軸の作成
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/graph-library-2/), 同じく私が作成しました。)*
グループプロジェクトでグラフライブラリを実装する過程をまとめてみました。今回の記事ではその中で核心部分であるグラフ軸を描く部分について説明します。([project repo](https://github.com/boostcampwm2023/and09-PriceGuard), [library repo](https://github.com/Taewan-P/material-android-chart))
## 考慮すべきこと
実装する前、軸を描く時どのようなことを考慮する必要があるのか簡単に書いてみました。
– スケールの数
– スケールあたりの範囲
– 目盛ごとの間隔 (px)
– 軸の長さと余白最初はこのように考えて実装したのですが、テストをしていくうちに考慮しなければな
グラフライブラリ 1. カスタムビュー生成
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/graph-library-1/), 同じく私が作成しました。)*
グループプロジェクトでグラフライブラリを実装する過程をまとめてみました。この記事ではプロジェクトの初期設定やカスタムビューを作る過程について説明します。([project repo](https://github.com/boostcampwm2023/and09-PriceGuard), [library repo](https://github.com/Taewan-P/material-android-chart))
## プロジェクト初期設定
### プロジェクト構造
“`
Project Root
│
├───app
│ ├───src
│ └───build.gradle.kts
│
├───materialchart
│ ├───src
│ └───build
グラフライブラリ 0. 企画、データ構造
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/graph-library-0/), 同じく私が作成しました。)*
グラフライブラリを実装するために必要な企画と資料構造についてまとめてみました。 ([project repo](https://github.com/boostcampwm2023/and09-PriceGuard), [library repo](https://github.com/Taewan-P/material-android-chart))
## 企画
![graph_library_plan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3896189/bba0a5cc-674b-fd7c-15dd-37bebead4fe2.png)
まず、私たちのプロジェクト企画に合うようにグラフライブラリを
iOSとAndroidでPWAをサポート
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/pwa-support/), 同じく私が作成しました。)*
今回、[バスハニャーンサービス](https://hybus.app)をリニューアルしながら、PWAをより良くサポートするための努力を書いてみたいと思います。
## PWAとは?
PWAとはProgressive Web Appの略です。
Web環境でのサービスは比較的発見されやすく、他の人にリンク一つで簡単に共有できる特徴があります。
一方、Nativeアプリのような場合には、システムにインストールする方式なので、ユーザーエクスペリエンスを最大化することができ、アプリドロワーからアプリアイコンをクリックして簡単にアクセスできるという特徴がある。また、Nativeはオフラインでも使用が可能です。
PWAはNativeのこのような長所をWeb環境でも同様にサポートすることができます。
バスハニャーンは
GitHub ActionsでMagisk Patchを自動化する
*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/magisk-automation/), 同じく私が作成しました。)*
GitHub Actionsを利用してMagiskパッチを自動化した経験を書いてみます。
## 既存の方法
Magiskをパッチする方法は下記の通りです。
1. Factory Imageをダウンロードします。
2.解凍後、boot.imgを抽出します。
3.boot.imgを携帯電話に移動した後、Magiskアプリでboot.imgを入れてパッチを適用します。
4.パッチを適用したboot.imgをコンピュータに戻し、携帯電話をfastbootモードにします。
5. `fastboot` コマンドを使ってboot領域にパッチを適用したboot.imgをフラッシュ(flashing)します。
6.再起動したら完了アンドロイドスマホは毎月セキュリティーアップデートが出ますが、root権限を
【Flutter】Flutter 3.24.0にアップデートした際に発生したビルドエラーの解決方法
## はじめに
Flutter 3.24.0にアップデートした際に発生したビルドエラーの解決方法についてまとめます。この記事は、私自身の環境で直面したエラーとその解決方法を記載しています。
依存関係やバージョンによって異なるエラーが発生する可能性があるため、その際にはエラーメッセージをもとに適切な対応方法をお探しいただければと思います。また、ここで紹介する方法が最適解というわけではないかもしれないので参考程度にご覧いただけると幸いです。
## 前提
Flutter 3.16 ⇨ 3.19以降では`build.gradle`の記述方法が変更されており、その影響で発生するエラーや対応策について詳しくは、[こちらの記事](https://flutter.salon/error_warning/flutter-3-19-with-android/)や[公式](https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply)で解説されています。この変更点を理解しておくことで、ビルドエラーの解決が
Google推奨アーキテクチャとClean Architectureの違い
# この記事で伝えたいこと
Now in Androidのドキュメントを読んでいて、興味深い議論を見つけたので、自分なりの解釈を加えつつピックアップしていこうと思います。:::note warn
アーキテクチャの解説を含みますが、私の個人的な解釈や大雑把な説明に留める箇所が多々あるので、正確な情報でない部分がありましたらご指摘ください。
また、今回は議論の一部のみを取り上げます。詳細な内容は、後述するリンク先のページでご確認ください。
:::# はじめに
最近アーキテクチャについて勉強していましたが、なかなか頭に入ってきませんでした。Clean Architectureについても理解が浅く、Google推奨アーキテクチャとの違いもなんだかよくわかっていませんでした。どうしたらアーキテクチャの全体像を掴めるんだろうと思い、まずはAndroidエンジニアには馴染み深いNow in Androidを参考にしてみることにしました。
[アーキテクチャの解説ドキュメント](https://github.com/android/nowinandroid/blob/main/docs/
Google Playからインストール数などの情報を取得
Google Playで公開している以下のアプリが最近10万ダウンロードを突破したのですが、Play Consoleで確認できる統計情報や、ダッシュボードのKPIで表示される 合計インストール数 とGoogle Playの数値とは乖離があるようでした。
https://play.google.com/store/apps/details?id=com.hnimrod.loancalc&hl=ja
具体的にはダッシュボードの合計インストール数(新規デバイス獲得数(累計))は10万を超えていますが、Google Playのページでは50,000+の表示となっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59203/8f775106-0344-6425-3901-1e64a713ece7.png)
## 実際のインストール数を取得する方法
Google Playの実際のインストール数を確認したい場合、Pythonのライブラリgoogle-play-scraperを使う
EC2とスマホをOpenVPNでつなげてみた。
はじめに
今回はEC2を立てるところから、スマホからOpenVPNを使って接続するところまでの解説です。といっても初学者なので、至らぬところがあればご指摘ください。
1.EC2を立てる
グローバルIPを固定させる必要がある
VPNをつかってクライアントからアクセスするときに、宛先グローバルアドレスIPアドレスが必要です。この宛先グローバルアドレスがコロコロ変わるとそのたびに設定を書き換えないといけません。それは面倒なので今回はグローバルIPを固定させます。固定IPを契約するか、EC2をつけっぱなしにするとグローバルIPを固定できます。今回は安い個人開発用の安いEC2なので、つけっぱなしにしてIPを固定させます。
EC2を立てる
下記記事で進めたらうまくいきました。
https://qiita.com/yu0224miao/items/e897fe50613a3d34a4e2
2.EC2側の設定。
easyrsaを使ってと証明書の生成。
・easyrsaを使って秘密鍵と証
Composeの副作用についての注意事項
# はじめに
今回は、自分がComposeで実装していて少し手間取った部分を紹介していきます
### 本文
Composeでは特定のタイミングで処理をするための副作用と呼ばれるものが存在します。
初回の描画時に処理をしたい場合はLaunchedEffectの引数に対してUnitを渡すことで実現することが可能です。
その時に気をつけたいのがSideEffectの扱いについてです。
SideEffectはLaunchedEffectと違いCoroutinScopeではないですが、Recompositionのたびに呼ばれるので意図せず処理が走ってしまうことがあります。
DisposableEffectと違いSideEffectとLaunched Effectは似た処理をやろうと思えばできてしまう分使用時にはどちらが適しているかと適切に判断しないといけません
### 最後に
今回はCompose実装時の副作用と呼ばれるものについての留意点を紹介しました
自戒の意味合いが強いですが、どなたかのお役に立てれば幸いです
AndroidStudioが重い時にやること
# はじめにやって欲しいこと
* **Invalidate Caches…**
AndroidStudio上部にカーソルを合わせた時に表示される**File**から選択* **Clean Project**
同じく上部の**Build**から選択# メモリ関係
「gradle.properties」ファイルの最後に
“`
org.gradle.jvmargs=-Xmx1024m
“`
を追加。PCのメモリサイズによって異なるので、
https://qiita.com/shirahon/items/f5d145689c0ea4230257
詳しくはこちらを参照。
# エミュレータ
* Instant Runを使用する
修正した内容をビルドしなくても反映させる 簡単な内容だったらこれを使うといいかも* エミュレータの不要な設定をオフにする
必要な動作確認に音声やGPS機能などの機能が使われない場合、それをオフにすることでエミュレータの動作が軽くなる可能性があります。
configファイルに以下を追記します。
“`
hw.audioInput = no