- 0.0.1. [Android] ベースラインプロファイルでパフォーマンスが改善される仕組み
- 0.0.2. Material3のDatePicker, TimePickerの仕様について
- 0.0.3. Android マイグレーション ガイド(古い技術から新しい技術へ)
- 0.0.4. Google Play StoreにAndroidアプリをリリースする手順2023(令和最新版)
- 0.0.5. LocalDateクラス備忘録
- 0.0.6. JetpackComposeのHorizontalPagerにPaging indicatorを使ってみた。
- 0.0.7. Realmをセットアップしようとして苦戦して休日溶かした件について
- 0.0.8. 【Android】Fluid Attacksを利用して脆弱性を検出する手順まとめ
- 0.0.9. Flutterのcontextとは何者か。
- 1. 1.前書き
- 1.0.1. Jetpack Compose × Google Maps SDKで地図上にカスタマイズしたマーカーを配置 & クラスタリング
- 1.0.2. MapBoxMapをAndroid、JAVAのみで使ってマーカーで詰まった話
- 1.0.3. 【Android】CoroutineExceptionHandlerのErrorもThrowしよう
- 1.0.4. 【未解決】突然、Google Play Console デベロッパーアカウントが停止され、アプリが全て削除された話
- 1.0.5. 【Android】Glanceでウィジェット開発〜状態管理編〜
- 1.0.6. VSCodeで.NET MAUIの開発環境構築
- 1.0.7. 【Android】Kotlin用の静的コード分析ツール「Konsist」を導入してみた
- 1.0.8. DreamServiceでエオルゼア時計スクリーンセーバーを作る
- 1.0.9. 【Android】RatingBar使ってみた【Kotlin】
- 1.0.10. FileStreamの正体🤔(UnityAndroidの場合)
- 1.0.11. Flutter 個体識別IDの取得方法 iOS/Android
[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
Realmをセットアップしようとして苦戦して休日溶かした件について
こんにちは。
ゆーさんと申します。
当方20代後半で未経験転職をして1年ほど経ちました駆け出し中の駆け出しエンジニアです。
婚活中です(どうでもいい)
今までは技術のキャッチアップでアップアップしていて頭に知識をねじ込んで何とかやっていくので精一杯でしたが、ある程度余裕も出てきたのでそろそろ技術記事を書きたい!!!!!!と考え本記事作成に至りました。
今回のお題はkotlinで開発するアンドロイドアプリケーションでのDBセットアップについて書こうと思います。
# 前提条件
– [x] kotlin kotlinc-jvm 1.9.21 (JRE 17.0.9+9)
– [x] jdk openjdk version “17.0.9” 2023-10-17
OpenJDK Runtime Environment Temurin-17.0.9+9 (build 17.0.9+9)
OpenJDK 64-Bit Server VM Temurin-17.0.9+9 (build 17.0.9+9, mixed mode)
– [x]gradle 8.4
–
【Android】Fluid Attacksを利用して脆弱性を検出する手順まとめ
# はじめに
最近GoogleのAPIを使用する際などの事前審査の項目に、脆弱性テストの結果を求められるようになりましたね。
アプリのセキュリティレベルを押し上げるための施策かと思いますが、今回は審査時に必要な脆弱性テストをFluid Attacksを使用して実施するための手順をまとめておこうと思います。# Fluid Attacksとは?
Fluid Attacksは、Android、iOS、Windows UI用のアプリケーションのセキュリティ脆弱性を検出するサービスになります。
2001年から、テクノロジー業界などのクライアント向けにセキュリティサービスソリューションを開発しています。# テスト実施手順
まず、環境はMacで実施し、Docker環境がインストール済みである前提でご説明します。
DockerがPC内にインストールされていない場合は、以下を参考に導入しておいてください。https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/install/
上記がすでに環境としてある場合は実施に向け
Flutterのcontextとは何者か。
目次
- 1.前書き
- 2.contexrtとは(概念)
- 3.contexrtとは(具象)
- 4.Elementの役割
- 5._parentの使い方
- 6.find~/dependOnInherited~の動き
- 7.まとめ
1.前書き
なぜ、この記事を書こうと思ったのか。
Flutterといえば、ios,android両方のアプリを開発できるフレームワークで
ある程度の知識があれば簡単なアプリなら作業量ほぼ半分で作れてしまう便利な代物です。
しかし、ある程度以上のものを作るとなると必ずと言っていいほど
【contextとは何か】
という壁
Jetpack Compose × Google Maps SDKで地図上にカスタマイズしたマーカーを配置 & クラスタリング
:::note info
この記事は[Safie Engineers’ Blog! Advent Calendar](https://adventar.org/calendars/8881) 10日目の記事です。
:::
# はじめに
こんにちは。Safieでモバイルアプリの開発をしている@rui_qmaです。モバイル版Safie Viewerでは、位置情報を持つカメラを地図上で選択することができるマップビューアー機能の実装に取り組んでいます。
AndroidチームではJetpack Composeの導入を積極的に進めていることもあり、本機能についてはMaps SDK for Android を Jetpack Compose で実装できる [Maps Compose](https://developers.google.com/maps/documentation/android-sdk/maps-compose) ライブラリを利用して実装しています。今回はMaps Composeの導入、マーカーの配置、カスタマイズするまでの流れを4つのStepでまとめてみました。
完成形の
MapBoxMapをAndroid、JAVAのみで使ってマーカーで詰まった話
MapBoxMapは便利な地図APIです。
https://qiita.com/ppt_msdg_maas/items/c35c07ec2502e9a2de12
↑MapBoxMapの概要はこれ見てください
GoogleMap APIより体感お手軽に使えるしなんかマップの見た目とかかなりカスタマイズ効くので個人的には特に理由がなければ埋め込みのMapはこれを使うのが良いと思う。## 記事の内容
MapBoxMapのドキュメントはほぼKotlinで書かれてる。
Kotlinはとても強い言語なのでやはり特に理由がなければJavaよりこちらを使うべきだが、なんかの理由でJavaでAndroidアプリを作らなければならない場合があった場合、公式ドキュメントに書かれているメソッドとかクラスとかが一部うまく動かないので、主に詰まったところをこの記事に書いていく。## マーカーを打つ
公式ドキュメント:https://docs.mapbox.com/android/maps/guides/annotations/annotations/
ここにはmapboxmapでマーカーを打つ方
【Android】CoroutineExceptionHandlerのErrorもThrowしよう
# はじめに
[Shibuya.apk #45](
https://shibuya-apk.connpass.com/event/299317/) にて以下の発表がありました。### 要約
本記事に必要な部分のみを要約すると下記の通りです。– runCachingはThrowableをcatchするため、Errorも含まれている。(ErrorはThrowableのサブタイプのため)
– Errorは回復不可能な例外であり、アプリはただちに終了すべき### この内容を受けて
優秀なAndroidエンジニアから[CoroutineExceptionHandler](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-coroutine-exception-handler/)についても同じことが言えるのではないかという提案がありました
【未解決】突然、Google Play Console デベロッパーアカウントが停止され、アプリが全て削除された話
[株式会社Never](https://neverjp.com/)のshoheiです。
株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/# TL;DR
– 弊社のGoogle Play Console デベロッパーアカウントが突然停止、公開していたアプリが全て削除、アプリのアップロードもインストールもできない状態に
– 自社ゲームアプリのポリシー違反によるものだが、違反内容に思い当たる節は無く、再審査請求をした
– TODO(オチを書く)# 概要
弊社が運用していたGoogle Play Console デベロッパーアカウントが突然停止され、自社アプリが全て削除されました。
急な出来事かつ停止した理由に思い当たる節はなくとても混乱しました。
巷でアプリの配信停止はたまに
【Android】Glanceでウィジェット開発〜状態管理編〜
本記事は以下の導入編の続きです
https://qiita.com/Seo-4d696b75/items/3cb024a71307e1d7d3c8
———–
# Glanceウィジェットの状態管理
ウィジェットは通常のアプリとは異なる仕組みで描画・状態管理されるため、Jetpack Compose + ViewModelとはだいぶ要領が変わります。
https://developer.android.com/jetpack/compose/glance/glance-app-widget?hl=en
最初に Glance での状態管理の基本を確認してから以下2種類のケースを紹介します
– 定期的に更新する
– ユーザー操作をトリガーに更新する[本記事で作成するアプリ・ウィジェットの全ソースコードをGitHubで公開しています](https://github.com/Seo-4d696b75/glance-widget-demo/tree/count-stateful)
## 状態の参照
Glance では簡単に [Preferences Da
VSCodeで.NET MAUIの開発環境構築
# はじめに
## .NET MAUIについて
.NET MAUI(Multi-platform App UI)は、C#とXAMLを使用してモバイルアプリやデスクトップアプリを開発することができるクロスプラットフォームのフレームワークです。名前の通り、Microsoftの.NETシリーズとして提供されています。
これまではXamarin.Formsという名前で提供されてきましたが、2024年5月1日にサポートが終了し.NETシリーズに統合される予定となっています。
https://dotnet.microsoft.com/ja-jp/platform/support/policy/xamarin
## Visual Studio for Macのサポート終了について
.NET MAUIでiOSやMacOS向けのアプリをビルドするにはmacOSの環境が必要ですが、
公式から提供される開発環境としては、Visual Studio for Macが唯一の手段となっていました。しかしながら、2023年8月に、MicrosoftからVisual Studio for Macの廃止
【Android】Kotlin用の静的コード分析ツール「Konsist」を導入してみた
# はじめに
この記事は [and factory.inc Advent Calendar 2023](https://qiita.com/advent-calendar/2023/andfactory) の10日目の記事です。
昨日は @nsym__m さんの「[今年やってよかった輪読会の本と進め方](https://qiita.com/nsym__m/items/fa24d9eed123dc8f1a95)」でした。本記事では、Kotlin用の静的コード分析ツールである「Konsist」を試しに導入してみたので、導入方法や実際に作成した内容を共有したいと思います。
# :eyes: Konsistとは
https://github.com/LemonAppDev/konsist
> 「Konsist」は、Kotlin専用の静的コード分析ツールです。コードの一貫性とコーディング規約の遵守を目指し、Kotlinプロジェクトの統一されたコード構造を維持します。このツールは、JUnitやKotestを使用した単体テストの形式で、コード品質を確保するためのチェックを行います。
(Ch
DreamServiceでエオルゼア時計スクリーンセーバーを作る
# はじめに
この話は『 [ThinkSmart View for Zoom](https://psref.lenovo.com/product/thinksmart/thinksmart_view_for_zoom) 』という製品の新古品を[結構安いお店](https://iosys.co.jp/)で買ったところから始まります。
とりあえずROMイメージをごにょごにょして(保障対象外です)APKのインストールができるようになりましたが、何に使いましょうか…。
そうだね、エオルゼア時計だね!(お約束)
せっかくなのでスクリーンセーバー化して、いつでも見れるようにしましょう。# コード
アドベントカレンダー進行というわけで、ガシガシとコーディングしていきましょう。
## レイアウトXML
簡易的な割に長いので折りたたんでいます
“`xml:daydream.xml
【Android】RatingBar使ってみた【Kotlin】 # 実践
“`php:activity_main.xml
“`
xml側はそのままRatingBarとして設定できます。以下は 使えるメソッドを紹介します。
val ratingBar : RatingBar = findViewById(R.i
FileStreamの正体🤔(UnityAndroidの場合)
# 前書き
この記事は、2023のUnityアドカレの12/9の記事です。
今年は、完走賞に挑戦してみたいと思います。Qiita君ぬい欲しい!https://qiita.com/advent-calendar/2023/present-calendar#qiita_award
# はじめに
C#でファイルを扱うときには、`System.IO.FileStream`という抽象化された型で取り扱うことができます。C#…のランタイムである.NETは、これをOSレベルのファイルシステムにつなぐことで実際のファイルにアクセスできるということです。
Androidのネイティブ(NDKによるC++)とつなぐ必要があったり、このFileStreamが何者なのかを調べる必要がありました。本記事ではそれを追跡する過程をご紹介します。
# とりあえずC#で書いてみる
適当にFileStreamを使ったC#コードを記述します。
“`csharp
public class FileAccessTest : MonoBehaviour
{
void Start()
{
Flutter 個体識別IDの取得方法 iOS/Android
# デバイスIDの取得方法
実務でデバイスの個別識別IDを取得する必要が生じたため、その方法を共有します。まず、`flutter pub add device_info`を実行して、`device_info`パッケージの依存関係をプロジェクトに追加します。
次に、このパッケージをインポートします。
“`dart
import ‘package:device_info/device_info.dart’;
“`
# AndroidでのdeviceID取得方法
AndroidデバイスのIDを取得するには、DeviceInfoPluginを使用します。以下はその例です。
“`
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
print(‘Android Device ID: ${androidInfo.androidId}’);
“`
このコードは、非同期関数内で実行する必要があります。androidId