- 1. 初心者エンジニアによるAndroidアプリ開発日記②
- 2. 久しぶりにAndroidプログラミングをしたら、オプションメニューが作れなかった問題
- 3. Technical Master 98 「はじめてのAndroidアプリ開発 Kotlin編」 誤記情報 p.197 リスト4-19
- 4. leanbackライブラリにおけるViewBinding化の注意点
- 5. [Android] Javascript Interface
- 6. 動きのあるUIをComposeで実現:美しいAndroid Carouselの作り方
- 7. 【Android】Firebaseメール認証でメールリンクが開けない
- 8. 初心者エンジニアによるAndroidアプリ開発日記①
- 9. [TensofFlow + Android] 姿勢推定デモアプリを動かす
- 10. State backed values should use the lambda overload of Modifier.offset
- 11. Kotlin 〜垂直方向と水平方向の配置〜
- 12. Kotlin革命:次世代プログラミング20の極意
- 13. macrobenchmarkでsetupBlockが終了するとアプリが終わってしまいテストが実行できない(失敗する)
- 14. DroidKaigi 2024: if-else と ?.let-run はどちらが好みか?
- 15. ARFoundationでArucoMarkerをマーカーに指定すると”Failed to get enough key points from target image”とエラーが出てビルドできない
- 16. Android Contextの使い方
- 17. Adjust SDK v5を読み解く[Android]
- 18. TextFieldの下線の幅(長さ)を変更したい
- 19. DroidKaigi 2024の驚いたところメモ
- 20. DroidKaigi2024で見たセッションのメモ(当日編)+所感
初心者エンジニアによるAndroidアプリ開発日記②
# まえがき
開発環境を整え、作成するアプリのイメージも固めたので、AndroidStudioで新規プロジェクトを作成しました。前回は[こちら](https://qiita.com/hukusima65/items/2b4af030fdc74942ec48)
# 目次
* [概要](#概要)
* [新規プロジェクトを作成する](#新規プロジェクトを作成する)
* [新規プロジェクトのテンプレートを選択](#新規プロジェクトのテンプレートを選択)
* [新規プロジェクトの設定](#新規プロジェクトの設定)
* [終わりに](#終わりに)—
## 概要
この記事では、AndroidStudioで新規プロジェクトを作成する過程で調べた内容を記載する。## 新規プロジェクトを作成する
新規プロジェクトのテンプレートを選択し、設定を行っていきます。### 新規プロジェクトのテンプレートを選択
AndroidStudioを立ち上げ、New Projectを選択すると、下のような画面が立ち上がると思います。この画面から、新規プロジェクトのテンプレートを設定しま
久しぶりにAndroidプログラミングをしたら、オプションメニューが作れなかった問題
## 1.オプションメニューが作れなかった問題
3年ぶりぐらいにAndroidプログラミングを再開した。その時使っていた教科書を広げて「オプションメニュー」を作ろうとしたが、できない。アクティビティをよく見るとアクションバーがいつの間にか無くなっている!?(そういえば、最近のアプリにはアクションバーなんかないなぁ。)だから、オプションメニューが表示されないのかと納得。![Screenshot_20240921_201756_25parcent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/bf052fa3-0118-f012-5f5b-506165e72747.png) ![Screenshot_20240921_201418_25parcent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/c37fa0db-4ce3-f798-ff83-cf1baa10568c.png)
図 最近の
Technical Master 98 「はじめてのAndroidアプリ開発 Kotlin編」 誤記情報 p.197 リスト4-19
[山田祥寛 著 Technical Master 98 「はじめてのAndroidアプリ開発 Kotlin編」](https://www.shuwasystem.co.jp/book/9784798065106.html)にて誤記を見つけましたので、情報共有します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501068/95c6eeea-df08-bf0c-c2ed-29cbc15f65d4.png)
該当部分
p.197 リスト4-19
“` :Kotlin
class MyListAdapter(
private val context: Context,
private val data: List,
private val resource: Int
) : BaseAdapter() {
// 省略
override fun getView(position: Int, convertView: View
leanbackライブラリにおけるViewBinding化の注意点
# leanbackライブラリにおけるViewBinding化の注意点
## 結論
“` kotlin
class SampleVideoFragment : RowsSupportFragment() {
private var _binding: FragmentSampleVideoBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
private var _adapter: ArrayObjectAdapter = ArrayObjectAdapter(RowPresenterSelector())override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
adapter
[Android] Javascript Interface
# Javascript Interfaceとは?
スマホアプリ内にウェブページを埋め込むwebViewを使う際、
フロントエンドのコードがスマホアプリのネイティブコードを叩く手段が提供されている。それがJavascriptInterface
# 使い方導入
## kotlin実装
“`kotlin
class MyJavascriptInterfaces {
@JavascriptInterface
fun hello(){
Log.i(“webViewApp”, “Hello, World”)
}
}
“`
というJavascript Interfaceを搭載したクラスを作り
“`kotlin
binding.webView.apply {
settings.javaScriptEnabled = true
addJavascriptInterface(MyJavascriptInterfaces(), “MyJavascriptInterface”)
loadUrl(“https://www.googl
動きのあるUIをComposeで実現:美しいAndroid Carouselの作り方
## はじめに
こんにちはcoccoです。
この記事はCarouselレイアウトをComposeで実装してみたよの会です。
何かの参考になれば幸いです。## What’s Carousel?
Carouselとは何かについては、[Carousel – Material Design 3](https://m3.material.io/components/carousel/overview) を参照するのが手っ取り早いです。
今回実装するレイアウトは下記のような基本的なCarouselレイアウトとなります。
全体的なコードは最後に載せているので、説明不要な方はそちらをご覧ください。
## ディレクトリ構成
“`
carouselapp
├─ ui
| └─ CardContent
| └─ Caro
【Android】Firebaseメール認証でメールリンクが開けない
Firebase 認証で Android アプリに **メールリンク認証** 機能を導入したのですが
メールに送られた認証リンクをクリックすると
**「Invalid Dynamic Link – Blocked」** というエラーがブラウザ上で表示され
アプリが起動しませんでした。エラーにはドメインをホワイトリストに登録してくださいとのメッセージだったので
[メールリンクの設定](https://qiita.com/jozuko_dev/items/bf343ba3f2b37a0184be#firebaseauth%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%AA%E3%83%B3%E3%82%AF%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E3%
初心者エンジニアによるAndroidアプリ開発日記①
# まえがき
2024年4月に某IT企業へ新卒入社した筆者。研修期間を終え、本配属となったチームで任されたのはモバイルアプリの保守開発だった。Webアプリなら研修で作った経験があるが、モバイルアプリに関しては一切の知見がない。そんなある日、上司から自主学習の一環として簡単なAndroidアプリを作ってみてはどうか、という提案を受ける。この記事は、そんな筆者の学習の記録である。# 目次
* [概要](#概要)
* [作るもの](#作るもの)
* [開発環境](#開発環境)
* [終わりに](#終わりに)—
## 概要
この記事では、学習内容を記録する以前に必要な前提(作るもの、開発環境)を記載する。## 作るもの
**国旗当てクイズアプリ**
成果物のイメージは下記の通り* 国旗画像を画面上部に表示させ、4択の選択肢を表示させる
* 問題は間違えるまで出題される
* 間違えた段階で、不正解画面と正解数を表示させる## 開発環境
* OS:Windows11
* 言語:Kotlin
* エディタ:AndroidStudio>AndroidStudioのエミュレ
[TensofFlow + Android] 姿勢推定デモアプリを動かす
# 概要
こちらのデモのAndroid版が動かなかったため修正手順メモとして記事化しました。ポーズ推定
https://www.tensorflow.org/lite/examples/pose_estimation/overview#### ざっくり原因と解消方法
モデルのダウンロードリンクが変更されたことでエラーが発生していたため、
ダウンロードを手動で行って所定のフォルダに配置したところ動きました。## Android Studioインストール
https://developer.android.com/studio## Tensorflowのソースダウンロード
“`
git clone https://github.com/tensorflow/examples.git
“`## 実行
Android Studioでクローンしたプロジェクトの中の姿勢推定アプリを開く
“`
\examples\lite\examples\pose_estimation\android
“`
プロジェクトが開いたら再生ボタンでRunする実行できない場合は上部バー
State backed values should use the lambda overload of Modifier.offset
## 先に結論
“`kotlin
// Before
val someOffset by /* State*/
Modifier.offset(x = someOffset)
“`“`kotlin
// After
val someOffset by /* State*/
Modifier.offset { IntOffset(x = someOffset.dp.toPx().toInt(), y = 0) }
“`## 詳細
androidx.compose.foundationを1.7.0アップデートしたところ、次のwarningが出るようになりました。> Modifier.offset{ } is preferred over Modifier.offset() for `State` backed arguments.: State backed values should use the lambda overload of Modifier.offset
> Modifier.offset() is recommend
Kotlin 〜垂直方向と水平方向の配置〜
Jetpack Composeを使用してボタンを水平方向や垂直方向に配置する際、少し複雑だったためこちらの記事でまとめています。
# どのように配置を制御するのか?
Jetpack Composeを使用してボタンを水平方向や垂直方向に配置するには、`Row`と`Column`コンポーザブルを使用する。これらは子要素を指定した方向に並べることができる例えば、このようなコードを実装することで下記のようなボタン配置となる。
“`kotlin@Composable
fun CombinedButtonLayout() {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.SpaceEvenly
) {
// 水平方向のボタン配置
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement
Kotlin革命:次世代プログラミング20の極意
## はじめに
Kotlinは、モダンでパワフルなプログラミング言語です。Androidアプリ開発やサーバーサイド開発など、幅広い用途で人気を集めています。この記事では、Kotlinの基本から応用まで、20の章に分けて詳しく解説します。各章では、具体的なコード例と丁寧な説明を通じて、Kotlinの魅力と実用性を体感していただけます。
## 第1章: Kotlinの基本
Kotlinは、簡潔で読みやすい構文が特徴です。変数の宣言や関数の定義など、基本的な要素から見ていきましょう。
“`kotlin
// 変数の宣言
val immutableVariable = “これは変更できない変数です”
var mutableVariable = “これは変更可能な変数です”// 関数の定義
fun greet(name: String): String {
return “こんにちは、$name さん!”
}// メイン関数
fun main() {
println(greet(“太郎”))
mutableVariable = “値を変更しました”
macrobenchmarkでsetupBlockが終了するとアプリが終わってしまいテストが実行できない(失敗する)
## Macrobenchmarkとは
アプリの起動時間とか、フレーム時間とかを簡単に計測できるテストライブラリです。
https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview?hl=jaUiAutomatorというのを使ってテストを書き、その上でいろいろ計測してくれます。
なのですごく細かい操作をして計測したい場合などは、UiAutomatorでのテストの書き方の知識も必要になってきます。
まあ、起動時間計測くらいなら比較的容易に出来るようになっています。簡単なサンプルはこちらから。
https://developer.android.com/codelabs/android-macrobenchmark-inspect
(情報は古めなので注意)## 実施環境など
| ライブラリ | バージョン|
|:–|:–|
uiautomator | “2.3.0” |
benchmark-macro-junit4 | “1.2.0-beta01” |## 遭
DroidKaigi 2024: if-else と ?.let-run はどちらが好みか?
Day3の企業ブースにあった (A) と (B)、どっちが好みか?という問いを考案しました。
個人的な考えでは
– Kotlinに慣れていない人でもわかりやすいのは(A)
– いかにもKotlinぽいのは(B)
– xがvar変数でスマートキャストが効かない時は(B)にするか、(A)だと一時変数を定義するしかない
– `hoge()` がnullを返す場合は(A)と(B)で結果が変わってくる
– (A)だと二者択一という意図、(B)だと `run { }` がフォールバック的な意図が感じられるという感じで迷います。
単純そうに見えて議論を深められるポイントがいくつかあり話題作りになればいいなと思っていました。
普段実装していて自分自身悩むことが多いので、単純にどっちの方が人気のある書き方なんだろう?という興味もありましたね。**(A)**
“`kotlin
return if (x != null) hoge(x) else {
fuga()
fuga2()
}
“`**(B)**
“`kotlin
return x?.let { hoge(x) } ?
ARFoundationでArucoMarkerをマーカーに指定すると”Failed to get enough key points from target image”とエラーが出てビルドできない
問題:タイトルの通り
解決法:ArucoMarkerの周囲に余白を追加する
環境:
Windows10
Unity2022.3.19f1
BuildSettings AndroidSource:
https://stackoverflow.com/questions/78941537/opencv-not-able-to-detect-aruco-marker-within-image-created-with-opencv
Android Contextの使い方
# 概要
何となくで使用していたContextについて学習をしました。
そのため、本ページにて学習した内容についてまとめます。# この記事を見て理解できること
:::note info
**この記事を見て理解できること**
* AndroidのContextで出来ること
* contextの種類
* Fragmentで使用する際のcontextの取得方法
:::# AndroidのContextで出来ること
AndroidにおけるContextの内容を展開## そもそもContextってどういう意味?
一般的な意味合いとAndroidにおけるContextの意味合いは以下になります。* **一般的な意味合い**:前後関係、文脈、脈絡、背景、状況、環境
* **Androidにおける意味合い**:同じコード記述やプログラム上の要素が、その置かれているプログラム内での位置や、実行される際の内部状態などによって異なる振る舞いをしたり、異なる制約を受けたりすること
Adjust SDK v5を読み解く[Android]
# この記事は何?
Adjustのコードを読んで何となく語学の為にメモしたものです。
長いので生成AIに読み込ませて要約して貰って適宜質問を投げるといった使い方が良いかと思います。# Adjustとは
[Adjust](https://www.adjust.com/ja/)は、アプリの最適化とグロースを支援するソリューションです。
複数のプラットフォームを横断する計測技術で、アプリマーケティングの全過程においてマーケターをサポートします。(公式サイトより引用)
実際に楽天アプリを使ってかみ砕いて説明すると、[楽天市場サービス一覧](https://www.rakuten.co.jp/sitemap/sp/app.html)にあるような
https://app.adjust.com/dj7tmxv のようなadjustリンクを踏んだ際に1. Adjustがリンクをクリックしたことを記録
2. iOSはapp storeへ、androidはGoogle Play Storeにリダイレクトする
3. アプリを初回起動時にインストールされたことをAdjustに送信
4. 1と3を
TextFieldの下線の幅(長さ)を変更したい
Android Jetpack Composeでテキスト入力を受け付けるコンポーネントであるTextFieldの入力フィールドの下についている線の距離を縮める方法を載せています。
:::note info
TextFieldDefaults.DecorationBoxと下記に記載がありますが、Androidの公式リファレンスにはTextFieldDefaults.TextFieldDecorationBoxと紹介されています。
恐らく私の使っているバージョンが古いためだと思われますが、適宜読み替えてください。
:::
まず、初期状態の動きを確認します。
# 通常
“`kotlin
var textFieldValue by rememberSaveable { mutableStateOf(“”) }
TextField(
value = textFieldValue,
onValueChange = {
textFieldValue = it
},
modifier = Modifier
.wrapContentSi
DroidKaigi 2024の驚いたところメモ
個人的に驚いたところを **太字** にしておきます。
# 宣言的UIを学ぶ際に知っておくべき重要なコンセプト
https://2024.droidkaigi.jp/timetable/694168/
プログラミングを始めた頃、for文で数値を合計することがありましたよね。UIも同様に、複数のコンポーネントの合計で成り立っているという、という話で宣言的UIの利点として、コードの可読性が向上し、開発者が意図を明確に表現できるそう。
ReactやiOSなど、さまざまなプラットフォームを網羅しており、Side Effectもカバーしています。Composeから他の言語に移行する際にも便利そうな内容でした。
UI Stateをsingle storeで管理するMVIやTCAは新しい概念なのでしょうか?実際、Fluxで既に行われていたことという話がありました。
**MVIやTCA、Reduxは、ボイラープレートが多く、触るべき箇所が多くて面倒だと言われることがある。**
SWRではキャッシュ管
DroidKaigi2024で見たセッションのメモ(当日編)+所感
今年も[DroidKaigi](https://2024.droidkaigi.jp/)に参加してきました。スピード重視で記憶があるうちにセッションを聞いた感想や学びを書いていきたいと思います。
なお、以下は私の所感でありAsk the speakerしたものも自分の受け止め方であるため、参考程度にしていただけると幸いです。正確には実際のセッションを聞いていただけると幸いです。
## [Contextを理解する](https://2024.droidkaigi.jp/timetable/694464/)
Contextの意味づけから入り、なんとなくで使っていたContextを上手に言語化されており、Contextに対するもやもやを解消できたと思います。activityContextとapplicationContextはライフサイクルを意識する必要があるという話も出てきます。
またライブラリによってはactivityContextを渡しても内部ではapplicationContextになっており、直感に反して動くようです(->workManager)。このあたり注意しておかない