Android関連のことを調べてみた

Android関連のことを調べてみた

Kotlinコンパイルで出たe: Could not load module をKotlinコンパイラをデバッグして解決するメモ

# 原因
基本的には存在しないクラスを参照していたりして起きています。
なので、Android Studioでそのクラスを開ければ赤くエラーが出ているので解決します。

何もソースコードの位置が出ないので、だいぶ解決が難しいです。
多すぎたりしてクラスを特定するのが難しい場合もあります。

# デバッグ方法

## 事前準備

Kotlinが別のプロセスで動いているとGradleの仕組みでデバッグできないのでプロセス内で動かす必要があります。

> -Dkotlin.compiler.execution.strategy=”in-process”

でin processでビルドできるはずなんですが、できない(デーモンでの起動になってしまう)ので、以下をgradle.propertiesに書きます。

> kotlin.compiler.execution.strategy=in-process

## デバッグ待ち状態にする

以下は:app:kaptGenerateStubsDebugKotlinでエラーが出ている場合です。:app:compileKotlinとかの場合もあります

元記事を表示

Kotlin たまに使うことまとめメモ

思い出したら随時追記していきます。

## ◯非同期でAPIを複数呼びたいとき

“`kotlin

lifecycleScope.launch(Dispatchers.IO) {
val getApiResult = getApi(requestBody)
val getApiSecondResult = getApiSecond(requestBody)

withContext(Dispatchers.Main) {
//APIのレスポンスを使った処理
binding.view = getApiResult.return_data

}
}

//1つ目のapiを呼ぶ関数
private fun getApi(requestBody: GetApiRequest): GetApiResponse? {
val http = RequestApi().getApiRequestObjectPlane().create(GetApi::class.java)
val

元記事を表示

build.gradleの依存に立ち向かう

# はじめに
この記事は [Globee Advent Calendar](https://qiita.com/advent-calendar/2023/globee) の13日目の記事です。
こんにちはGlobeeでAndroidエンジニアをしています屋代です。
皆さんは、ライブラリを有効活用して開発していますでしょうか?

運用期間が長くなっていくと、使用していたライブラリのバージョンアップを行うことがあるかと思います。
何事もなくすっとアップデートが完了すれば良いのですが、ライブラリ内で依存しているライブラリと、別ライブラリ内で依存しているライブラリが競合してしまう場合があります。
そうなると依存の解決地獄、場合によってはアップデートを断念するなんてことも。

今回は、そんな状況に陥っていたAndroid版abceedが健全性を取り戻せた方法をご紹介します。

# 最初に結論
– 大きいライブラリを使う場合は、依存を閉じ込めよう
– 場合によっては、そのライブラリをラップするandroidライブラリを作るのも手
– テストを書いてロジックの恒常性を担保しよう

# And

元記事を表示

Jetpack ComposeでXMLレイアウトからの卒業(超初級)

## はじめに
PHONE APPLI Advent Calender13日目です!
Jetpack ComposeやらKotlin CoroutineやらDagger Hiltやら色々勉強つまみ食いしすぎて、逆に分けわからなくなっているしっがないAndroidエンジニアです。
今回は最近(?)話題のコードベースでレイアウトを構築できるJetpack Composeについて、自分なりに理解したことを初歩の初歩部分ですが記事にしていきたいと思います。

## Jetpack Composeってそもそも何?
Jetpack Compose は、ネイティブ UI をビルドする際に推奨される Android の最新ツールキットです。Android での UI 開発を簡素化し、加速します。少ないコード、パワフルなツール、直感的な Kotlin API を使用してアプリをすぐに動かすことができます。
(※Android Developersサイトから抜粋)

うーん、なんかよく分からん。
百聞は一見にしかずということで、早速使ってみましょう!

## まずはJetpack Composeプロジェク

元記事を表示

Jetpack Composeを使ったSwipeableなPopup UIの実装

こんにちは。今年もこの季節がやってきました。株式会社ZOZOでAndroidエンジニアをしております@zzt-osamuhanzawaです。[ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo)の13日目シリーズ5の担当します。最近のAndroidのUI実装する際、Composeで実装するのが増えてきたかと思います。今回はComposeでポップアップのような画面上部にユーザーに通知し、左スワイプで消えるようなUIの実装について紹介したいと思います。

## はじめに
スワイプ操作はCompose Material API である[`swipeable`](https://developer.android.com/reference/kotlin/androidx/compose/material/SwipeableState)を利用します。ただし、いきなりですが`swipeable`は今後、[`AnchoredDraggable`](https://developer.android.com/j

元記事を表示

ListDetailPaneScaffoldを触ってアダプティブ時代に備えよう

# はじめに
近年のAndroidは、タブレットや折りたたみ式スマホ、車載カーナビ、スマートテレビなど色んな画面サイズが出てきました。
すべての画面サイズに対応しているアプリは中々無いと思いますが、Googleさん的には「対応してほしい!」と思わせるような発表やリリースが相次いでいます。
いずれリジェクト要因として扱われたとき困らないよう、色んな画面サイズに適応できる技術を紹介します!

# Material3 Adaptive
Material3配下にMaterial3 Adaptiveというライブラリが追加されました。ここにアダプティブレイアウトとして機能するComposeが入っています。
[公式のブログ](https://medium.com/androiddevelopers/new-apis-for-adaptive-layouts-in-jetpack-compose-f27cace48bcd)からは`NavigationSuiteScaffold`と`ListDetailPaneScaffold`の2つが紹介されていましたが、今回は`ListDetailPaneScaff

元記事を表示

【Android】プロジェクト初期にやったこと/失敗したこと

# はじめに
この記事は[Android Advent Calendar 2023 12日目](https://qiita.com/advent-calendar/2023/android)の記事です。
ちなみに、本日12月12日は【良い字一字】の語呂合わせにちなんで今年の漢字が発表される日だそうです。いよいよ今年が終わるのだという実感が湧いてきますね。

さて、皆様にとって今年1年はどんな年でしたでしょうか?
非常に忙しかった、新技術にチャレンジしてドキドキワクワクだった、とにかくバグを潰していたら1年が終わろうとしていた等色々あるかと思います。

自分としては、今年一年は新規プロジェクトに携わることが多い1年でした。
なのでこの記事で新規開発を行う上でやったこと・失敗したことをまとめていこうかと思います。

あくまでほんの一例ですが、これから新規プロジェクトを行う方の一助になれば幸いです。

## プロジェクト初期にやったこと
* 使用技術の選定
* モジュール作成
* build.gradleの整備
* AndroidManifestの整備
* 証明書作成
* サンプルクラス

元記事を表示

Android Studioでフォントを指定する方法

## 背景
カスタムフォントを使いたい。

## 設定方法
https://developer.android.com/jetpack/compose/text/fonts?hl=ja#set-font

指定フォントの準備→ダウンロードしておく
https://fonts.google.com/specimen/M+PLUS+Rounded+1c?subset=japanese&noto.script=Jpan

res/にfontフォルダを作成し、小文字にリネームした指定フォントを配置する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245300/1fdda5a7-030e-a84d-d92d-3e7ef1630605.png)

FontLoader objectを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245300/e811f063-4579-a46e-a76

元記事を表示

Jetpack ComposeのHorizontalPager上でLazyColumnを動かす時に、横スワイプの効き具合を調整する方法

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

こんにちは、NTTテクノクロスの笠松と申します。 普段はAndroid/iOSアプリの開発に携わっています。

[`Jetpack Compose`](https://developer.android.com/jetpack/compose)はAndroidのネイティブUIを構築するための最新のツールキットです。2021年7月28日にこのツールキットが安定版リリースとなっており、使用しているチームも多いのではないでしょうか。

この記事ではこの`Jetpack Compose`に関するTipsを紹介します。とてもニッチなケースですが、ご覧ください。

# 本記事で紹介するTips

本記事では以下のように縦スワイプと横スワイプが混在するケースを考えます。

+ `HorizontalPager`により横スワイプで画面を切り替えることができる
+ `LazyColumn`により縦スワイプ

元記事を表示

Compose Materialを使う場合の注意点

# 注意点

Compose Materialが提供するComposableはMaterial Designに準拠するように実装されているため、デフォルトの実装のまま使用すると意図したレイアウトにならないことがあります。

# 例

具体的な例を示して説明します。

以下の例は`android.widget.Button`と`androidx.compose.material.Button`を縦に並べたものです。

上のボタンが`android.widget.Button`、下のボタンが`androidx.compose.material.Button`を使って実装したものです。

以下のように2つのボタンには横幅、フォントサイズ、フォントウェイト、表示するテキストを同じ値で指定しています。

“`xml

元記事を表示

Flutter 環境別Crashlyticsの実装方法 Android/iOS

## この記事ではFLuttterの環境別Crashlyticsの設定方法を紹介します。

## 目次
“`
1. 環境別Firebaseプロジェクトの作成
2. main.dartの実装
3. iOSの設定
4. Androidの設定
“`
上記の順で紹介したいと思います。
まずCrashlyticsを使用するために[Firebase](https://firebase.google.com/?hl=ja)プロジェクトを作成します。URLをタップすると以下の画像のように「使ってみる」が表示されるのでタップ(ログイン、アカウントの作成を行なっていない方は作成して下さい。)

![スクリーンショット [0005-12-07](tel:0005-12-07) 11.36.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/65a692a8-30df-76c8-6a7c-51ca21871784.png)

すると、以下の画像のような画面に遷移すると思うので、プロジェクトを追加→プロジ

元記事を表示

【Android】Glanceでウィジェット開発〜非同期処理編〜

本記事は以下の続編です

1. [導入編](https://qiita.com/Seo-4d696b75/items/3cb024a71307e1d7d3c8)
2. [状態管理編](https://qiita.com/Seo-4d696b75/items/235967ed0c4332683f6e)
3. 非同期処理編 ← HERE

———–

# ウィジェットで非同期処理を扱う

今回はユーザーがタップすると非同期的に画面を更新するウィジェットを作成します。

![async_glance.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440643/10a1d37c-6b2e-9c43-e10c-104733d214c6.gif)

[作成したアプリ・ウィジェットのソースコードはGitHubで公開しています](https://github.com/Seo-4d696b75/glance-widget-demo/)

## Glanceの非同期的な更新処理

ウィジェットを非同期

元記事を表示

AndroidのActivityを縦固定にする

## 背景
画面の横回転させないようにさせたい。

## 設定
AndroidManifestに`android:screenOrientation`で`portrait`を指定する。

https://developer.android.com/guide/topics/manifest/activity-element?hl=ja#:~:text=%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82-,android:screenOrientation,-%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AE%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4

## お悩みどころさん
Activity毎の設定しかできない?
アプリケーション内で一括で設定できないかな…

元記事を表示

Androidでキーボード入力時にUIをずらす

## 背景
キーボード入力時にUIにキーボードが被らないようにしたい。

## 設定
Android ManifestにUIの対応方法を指定する。
`windowSoftInputMode`に`adjustResize`を指定する。
https://developer.android.com/develop/ui/views/touch-and-input/keyboard-input/visibility?hl=ja#Respond

“`






“`

## 結果
キーボード領域分だけUIがずれるようになった。

元記事を表示

[Android] ベースラインプロファイルでパフォーマンスが改善される仕組み

ベースラインプロファイルでパフォーマンスが改善される仕組みについてまとめた。

導入については下記参照。

https://developer.android.com/topic/performance/baselineprofiles/create-baselineprofile?hl=ja

# Androidのコンパイルと実行

1. Androidのソースコードはビルドプロセスの中でコンパイルされ、中間言語であるDexに変換される。
2. DexはAABに格納されPlayConsoleへアップロードされる。
3. PlayStoreはAABを元に各デバイスの構成に最適化したapkファイルを生成し配信する。
4. デバイス上ではapkファイルに含まれたDexのコードをアプリ実行時に機械語へコンパイルして処理を行う。

# ベースラインプロファイル

ベースラインプロファイルとは、ソースコードの中で頻繁に実行されるクラスやメソッドのリストをまとめたもの。

Androidデバイスはベースラインプロファイルを元に頻繫に実行されるコードを事前(AOT)コンパイルすることで起動や実行時の

元記事を表示

Material3のDatePicker, TimePickerの仕様について

# はじめに
JetpackCompose個人開発でDatePickerやTimePickerを使った時に迷ったりつまづいたりした部分をまとめます。

### DatePicker, TimePickerとは
MaterialDesign3で提供されている、日時を取得するUIコンポーネントです。
[DatePicker](https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#DatePicker(androidx.compose.material3.DatePickerState,androidx.compose.ui.Modifier,androidx.compose.material3.DatePickerFormatter,kotlin.Function0,kotlin.Function0,kotlin.Boolean,androidx.compose.material3.DatePickerColors))
[TimePicker](https://d

元記事を表示

Android マイグレーション ガイド(古い技術から新しい技術へ)

# はじめに
Androidの技術にはトレンドがあります。開発現場で10年前まではよく使用されていた技術が、今ではほとんど使われなくなっている技術があります。この記事では、Androidで使われている技術(主にライブラリ)に焦点を当てて、技術の移り変わりを整理してみたいと思います(おそらく、かなり主観的な整理になっていると思いますが、それはご容赦ください)。今自分が使っている技術がトレンド的にはどの位置にあるのか、開発現場で使われている技術はどの位置にいるのかを把握することで、どこをどう強化していけばよいのか、その指針が見えてくると思います。読者様の一助になれば幸いです。

# プログラミング言語

歴史:Java -> Kotlin(Dart)

まずは一番有名なのから。Androidのネイティブ開発として採用されているプログラミング言語は、AndroidがStartした当初はJava言語が使用されていました(NDKはC++やC言語で書けますが話が逸れるので省略)。現在はKotlinが主流になっています。Google I/O 2017辺りから急速にKotlinを使う流れになったでしょ

元記事を表示

Google Play StoreにAndroidアプリをリリースする手順2023(令和最新版)

:::note info
この記事は [ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo) カレンダーのシリーズ3の11日目の記事です。
:::

## はじめに

プライベートでAndroidアプリを作ることはあっても、Play Storeにリリースしたことがなかったので、2023年の11月にリリースをしてみました。当初はアプリといくつかのスクショと説明文があればリリースできると思っていたのですが、リリースするために必要なものや準備するものが思っていたより多くリリースするのに時間がかかってしまったのでその備忘録になります。

## Play Storeへのリリースステップ

1. Googleへのdeveloper登録をする
2. Androidアプリを作る(aabファイルを作る)
3. Google Play Consoleで各種設定をする
4. アプリを審査に出す

## 1. Googleへのdeveloper登録をする

アプリをストアで公開するためにGoogleへ[develope

元記事を表示

LocalDateクラス備忘録

# はじめに
今回は自分が最近カレンダー機能などを実装していて調べたことなどを紹介していこうと思います
### 本文
***monthとmonthValueの違い***
返却物を見てみるとMonth型とInt型で何が違うんだろうとなりますが
中身を見てみると至極単純でmonthはJANUARYなどの文字列で、monthValueは1などの数値で返ってくるものです
表示をするのに使いたい場合はmonthValue比較やLocalDateへの代入に使うのはmonthといった形になります
***月末取得***
自分は今までカレンダーに変換してDAY_OF_MONTHで取得してましたが、実はlengthOfMonth()といった形で取得することができます
***stringとの相互変換***
“`kotlin
// String to Date
val formatter = DateTimeFormatter.ofPattern(“yyyy/MM/dd”)
val localDate = LocalDate.parse(this, formatter)
// Date to Str

元記事を表示

JetpackComposeのHorizontalPagerにPaging indicatorを使ってみた。

https://qiita.com/yuta317/items/2279e647190bcf50903e

こちらでHorizontalPagerを使ってみましたが、それにプラスで、開いているページがわかるような丸い点を下に表示してみようと思います。

“`HorizontalPagerSample.kt
const val PAGE = 3
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun HorizontalPagerSample() {
val pagerState = rememberPagerState(initialPage = 0)
Column(
modifier = Modifier.fillMaxSize()
) {
HorizontalPager(
state = pagerState,
pageCount = PAGE
) { page ->
Column

元記事を表示

OTHERカテゴリの最新記事