- 1. 【初心者応援】画像を選ぶ際の判断基準
- 2. 2022年度版 RecyclerViewをわかりやすく解説(Kotlin, View Binding)
- 3. Android Studio エミュレーターでのエラー Qt platform plugin could be initialized … 【備忘録】
- 4. 【Material Design】Material Designを読むときに知っていると理解しやすくなる単語集
- 5. Flutter × Firebaseでアプリを個人開発した話
- 6. UnityでHMSのAnalytics Kitを使用する方法
- 7. 既存の Android アプリの UI を Jetpack Compose で書き換えた際の知見をまとめてみる
- 8. Androidアプリを開発する #1
- 9. KMMプロジェクトを作ってバージョンカタログが利用できるスタート地点に立つまで
- 10. [Android + Vulkan + ImGui] AndroidでGUIをC++で
- 11. 【初心者応援】初心者Androiderに贈る、学習時に使用できるコンテンツ3選
- 12. Nexus 7(2012)にAndroid 7をインストールする
- 13. 今更ながらRiverPodのdependenciesをためしてみた
- 14. AnimatedSwitcherが動かない!というときの対処法
- 15. 【Material Design】Material Design 3のタイポグラフィーは、今までと何が違うの?
- 16. Android タブレット端末で ROS の点群データを表示
- 17. 背景付きTextViewやEditTextでautoSizeTextTypeを使う方法
- 18. 【初心者応援】デグレしないために気をつけること
- 19. Flutter 公開済みAndroidアプリの更新時テストで、署名が異なるエラーが出たとき
- 20. Profileable apkを使ってリリースapkで起動時に実際に何が時間がかかっているのかを確認する
【初心者応援】画像を選ぶ際の判断基準
# 初めに
今回はアプリ内で使用する画像をどういった形式で保持しておくかについて書いていこうと思います。
自分が新人だった頃に、`svg`って何?どうしてここはsvgじゃないの?等疑問に思ったことがあったので、もし同じ感覚になっている方がいれば助けになれれば幸いです。### SVGとは
まず`svg`とはなんぞや?という部分からですね。
`Scalable Vector Graphics`(スケーラブル・ベクター・グラフィックス)の略で「大きさを変えられるベクター画像」という意味です
実はグラフと一緒で指定された座標を指定された色で塗りつぶしてるのがsvgなんですね。
他の`PNG/JPEG`はピクセルの集まりなので拡大した際に`svg`の方が綺麗だったりします。
また、名前の通り大きさを変えても綺麗に描画することができます。### 判断基準
ここからは、普段自分がどうやって画像の形式を分けているかをご紹介します。
自分は基本的に`svg`を使います。
ただし、`svg`は先ほど紹介したように座標や色の情報を持っているため、複雑で大きい画像を描画するとなるとデータがどうしても重
2022年度版 RecyclerViewをわかりやすく解説(Kotlin, View Binding)
# はじめに
「リスト表示程度で難しすぎる!!」
全初心者がそう思うであろうRecyclerViewを超わかりやすく解説します。::: note warn
本記事ではViewBindingの使用を前提に書いております。
findViewByIdより明らかに見やすく動作も早いです。
知らない人は調べてね!!
:::↓完成図
# RecycleViewとは
見た目をカスタム可能なリスト表示です。
特徴として、例えば100個のアイテムを表示したいとき、スマートフォンの画面に一度に見えているのは高々10個だとしましょう。
そしたら残りの90個のレイアウトを用意しておくのって無駄ですよね。
だから見えてる10個のレイアウトを再利用して使いまわ
Android Studio エミュレーターでのエラー Qt platform plugin could be initialized … 【備忘録】
## ■事象
Android StudioでADV Managerからエミュレーターを指定して、起動した時にエラーが出てきた## ■エラー文
「This application failed to start because no Qt platform plugin could be initialized. Reinsalling the application may fix this problem」## ■原因を探ってみる
グーグル検索したところ、他のソフトウェアで定義された環境変数がアプリケーションと競合するために発生しているので、アプリケーションを起動する前に、現在の環境から以下の変数を削除してください。とのことだったので、環境変数を見てみたが以下の環境変数は設定していない。なぜ?
・QT_PLUGIN_PATH
・QML2_IMPORT_PATH## ■本当の原因
どうやら、C:\Users\{username}直下のAndroidStudioのSDKやら何やらにアクセスできないため発生していたらしいusenamerフォルダ以下の、「読取り専用」「隠しフ
【Material Design】Material Designを読むときに知っていると理解しやすくなる単語集
## 概要
この記事では、少し前に公開された[Material Design 3(通称 : M3)](https://m3.material.io/)を読むときに
知っていると、M3さらに理解しやすくなる単語とその意味について解説します。この記事を読んで、単語とその意味について理解すれば、
M3をさらに理解することができるでしょう!## Banner
目立つメッセージと、それに関連するアクションを表示するコンポーネント。
[詳しい解説はこちら](https://material.io/components/banners)
## Button
メールの送信やドキュメントの共有、投稿へのいいね!など、ユーザーのアクションを助ける コンポーネント。
[詳しい解説はこちら(M3)](https://m3.material.io/compon
Flutter × Firebaseでアプリを個人開発した話
今回、初めてFlutterとFirebaseを使ってandroidrアプリを作りました。
個人でアプリを作ってみたい人やFlutterを使ってみたい人の参考になればと思います。# 作ったアプリ
[てすろぐ](https://play.google.com/store/apps/details?id=com.murapon.self_scoring_app)
テストや問題集を解いた結果を保存し、復習に使えるようにするアプリです。
今後、iosアプリもリリースする予定です。
アプリに関してはこちらにも書きました。# 使った言語、サービス
## Flutter
1つのソースで、android、ios両方のアプリができるのでこちら選びました
僕の場合、[現場で使える Flutter開発入門](https://www.amazon.co.jp/gp/product/483997375X/)を買って、一通り勉強してから作り始めようと思ったのですが、初心者には少し難しい内容で、1章だけ読んで挫折しました・・:sweat:
ただ、サンプルソースがダウンロードできるようになっていたので、それを
UnityでHMSのAnalytics Kitを使用する方法
Unityのオフィシャルドキュメントにしたがって、HMSのAnalytics Kitを実装しましたが、うまくいきませんでした。
Analytics Kit (HMS)
https://docs.unity.cn/cn/Packages-cn/com.unity.huaweiservice@2.3/manual/analyticskit.html“`
2022/04/06 11:40:52.159 3747 3747 Error HiAnalyticsSDK createInstance=> Stop report! Instance init failed: _openness_config_tag
2022/04/06 11:40:52.159 3747 3747 Error HiAnalyticsSDK createInstance=> Stop report! Instance init failed: _openness_config_tag
2022/04/06 11:40:52.159 3747 3747 Error HiAnalyticsSDK cr
既存の Android アプリの UI を Jetpack Compose で書き換えた際の知見をまとめてみる
# 概要
View & Fragment で画面を20ほど作っていた既存のアプリを1ヶ月かけて Jetpack Compose で書き換えたので、その際の進め方や気づいたことをまとめてみます。Jetpack Compose を使う意義や具体的な書き方については別の記事をお読みください。
# モチベーション
[Jetpack Compose 移行する前と移行した後](https://developers-jp.googleblog.com/2020/12/jetpack-compose-before-and-after.html) を読んでやってみたくなったのがきっかけでした。特にビルド時の最適化のパフォーマンスが向上するという点に興味を持ちました。> 最大のポイントは Compose がほとんどのデベロッパー指標で良好な(または中立的な)影響を示していることです。この点と Compose でデベロッパーの生産性が大幅に向上することを踏まえれば、いろいろ考えなくても、Compose が Android の UI 開発の未来であることはわかります。
# 書き換えのステップ
大ま
Androidアプリを開発する #1
# はじめに
今回から本格的に中身の機能を作っていきます
下準備編はこちらからhttps://qiita.com/sekkenn1102/items/eb0bc3646036b0ad9d36
# 作成するアプリに関して
#0の時にもほんの少し触れましたが、今回から「汎用性の高そうなスケジュール・タスク管理アプリ」を目指していきます
目指すにあたって最低限必要のは以下の3機能だと思っています
* スケジュール/タスクを登録する画面
* 登録したスケジュール/タスクを表示させる画面
* そもそも登録データを保存するためのDB想定としてはかなりざっくりしていますがこんな感じ
まずはスケジュール/タスクを登録する画面から手を付けていきます
# スケジュール/タスクを登録する画面を作成する
登録画面に必要な項目としては以下を想定していま
KMMプロジェクトを作ってバージョンカタログが利用できるスタート地点に立つまで
## はじめに
設定が複雑で設定やちゃんと動くようにするだけで一苦労。
とりあえず現時点での環境でプロジェクトが動くようになるまでまとめておく。後々別環境とかで動かす機会があったら、最初から環境構築から書きたい。
ライブラリのバージョンカタログ、バージョン管理ができるようになるまでします。## 環境
* Macbook Air M1 2020
* iOS 12.1 Monterey
* Android Studio Bumblebee | 2021.1.1 Patch 1
* Kotlin Multiplatform Mobile plugin 0.3.2
* Xcode 13.2.1## プロジェクトが動くようになるまでの手順
1. Android StudioでNew Project->Kotlin Multiplatform App
2. 名前を任意で決めて、OSバージョンは29〜
3. アプリ名は、androidApp,iosApp,shared
4. iOS frameworkは、 CocoaPods dependency frameworkを利用
5. Androi
[Android + Vulkan + ImGui] AndroidでGUIをC++で
# 概要
AndroidにVulkanベースでImGuiを導入できた。
ImGuiとはMITライセンスで公開されている、C++で書けるGUIライブラリである。
https://github.com/ocornut/imgui
ImGuiはexampleとして、いくつかのplatformとgraphics APIの組み合わせを紹介している。
https://github.com/ocornut/imgui/tree/master/examples
この中にAndroid + Vulkanの組み合わせはないが、やってみると導入は可能だったので、手順を簡単にまとめる。# 結果

私の前回記事の続きにimguiの領域を追加。
https://qiita.com/Aqoole/items/d8f020b24d2861d20322
オブジェクトはray
【初心者応援】初心者Androiderに贈る、学習時に使用できるコンテンツ3選
# はじめに
[新人プログラマ応援 – みんなで新人を育てよう!](https://qiita.com/official-events/3f21c92121aa125807b4)
ということで、今月から社会人となり、エンジニアになる方も多いのではないでしょうか?
今月は上記イベントに合わせて初心者応援をキーワードとして記事を書いていこうと思います。今回は初心者応援記事第5弾、Android学習時に使用できるコンテンツを3つほどご紹介したいと思います。
# 1.GoogleDeveloperトレーニングコース
https://developer.android.com/courses
1つ目にご紹介するコンテンツは、Googleが公式に出している、学習コンテンツです。
初心者から経験者まで幅広くコンテンツを提供しており、基本的にCodelabベースの学習システムです。Kotlin、Androidの基礎中の基礎から、比較的新しい技術であるComposeにフォーカスを当てた講座など、それぞれにあったレベル間で学習できるのが強みとなっています。
今後Androidをメインで開
Nexus 7(2012)にAndroid 7をインストールする
Nexus 7(2012)が余っているので、AndroidのカスタムROMをインストールしてみました。
手順としては他のAndroid機種でも大体同じなので、試してみたい人はどうぞ。なんでこんな古いタブレットをまだ使っているかというと、Androidアプリの実機テスト用です。
パワフルな最新機種で早く動くアプリを作るのは簡単です。
しかし古い(非力な)機種でもある程度の早さで動くアプリを作るには、アルゴリズムやデータ構造の工夫が必要です。
そうゆうテストをするために敢えて古い機種を残しています。今回はXDAのフォーラムで紹介されているAOSP 7.xをインストールします。
# 1. TWRPのインストール
まずは`Recovery`と呼ばれるプログラムを書き換える必要があります。
`Recovery`は何をするかというと、Androidをリセットするときに元の初期状態に戻すためのプログラムです。いくつか有名なリカバリーソフトがありますが、`TWRP`が一番有名なのでこれを使いましょう。
—
Nexus 7の`電源ボタン`と`下ボリュームボタン`を**同時押し**
今更ながらRiverPodのdependenciesをためしてみた
タイトルの通り、今更ながらRiverPodのdependenciesを試してみたメモです。
※RiverPod 1.0.3で確認
# そもそもdependenciesとは?
https://pub.dev/documentation/riverpod/latest/riverpod/Provider/dependencies.html
かんたんにいうと、ProviderRefからScopedなProviderにアクセスするためのパラメータです。dependenciesにScopedなProviderを指定すると、そのProviderもScopedになりアクセスが可能になります。“`dart
final scopedValue = Provider((_) => ‘1’);
final valueDependsOnScopedValue = Provider(
(ref) => ref.watch(scopedValue),
// この指定により、scopedValueがoverrideされるとvalueDependsOnScopedValueもscopedになる
de
AnimatedSwitcherが動かない!というときの対処法
# 結論
これを
“`dart
class _BadWidget extends ConsumerWidget {
const _BadWidget({Key? key}) : super(key: key);@override
Widget build(BuildContext context, WidgetRef ref) {
return AnimatedSwitcher(
duration: const Duration(milliseconds: 100),
child: Icon(
ref.watch(_shouldShowDetail)
? Icons.keyboard_arrow_up
: Icons.keyboard_arrow_down,
),
);
}
}
“`
こうする
“`dart
class _GoodWidget extends ConsumerWidget {
const _GoodWidget({Key? k
【Material Design】Material Design 3のタイポグラフィーは、今までと何が違うの?
## 概要
この記事では、少し前に公開された[Material Design 3(通称 : M3)](https://m3.material.io/)のTypographyと、
今までのTypographyを比べて、変わったところ、追加されたところについて解説します。M3のTypographyでの変更点を簡単にまとめると、
**シンプルに、わかりやすく、使いまわすことができるようになった**
ということになると思います。## M3のTypographyのアップデート内容
M3のTypographyでは、以下の内容がアップデートされました。+ **デフォルトフォントが決められた。**
+ **テキストの種類が単純になった。**
+ **TokenでTypographyを管理することで、デバイスに最適なサイズになった。**これらを順番に解説していこうと思います。
## デフォルトフォントが決められた。
デフォルトフォントが決められていなかったのが、不思議ですが、
M3で、デフォルトフォントとして決められたのは、
[**Roboto**](https://fonts.g
Android タブレット端末で ROS の点群データを表示
ROSロボットシステムのLiDAR、ステレオカメラなどのデバイスより生成した点群データ(PointCloud2)をユーザに表示時、パソコンPCの画面で表示できますが、ビジネス現場で運用には、丁度不便です。
何か簡単にAndroid タブレット端末でROS の点群データを表示できるかを試してます。# システム構成
“`mermaid
sequenceDiagram
Androidタブレット端末 –>> ROSロボット : Wifi接続
ROSロボット –>> Androidタブレット端末: 点群データ
“`# Point Cloudアプリをインストール
[android_pointcloud_viewer](http://wiki.ros.org/android_pointcloud_viewer)のAndroidアプリを使用して点群データを表示します。
Gitから[android_ros_pointcloud_viewer](https://github.com/cogniteam/android_ros_pointcloud_viewer)のAn
背景付きTextViewやEditTextでautoSizeTextTypeを使う方法
# 背景付きTextViewやEditTextでautoSizeTextTypeを使う方法
>Android 8.0(API レベル 26)以上では、テキストサイズを自動的に拡大または縮小し、TextView の特性と境界に基づいてレイアウトを埋めるよう TextView に指示できます。このように設定すると、動的コンテンツを表示するさまざまな画面で、テキストサイズの最適化が容易になります。
https://developer.android.google.cn/guide/topics/ui/look-and-feel/autosizing-textview?hl=ja&msclkid=d5ecdf15c07511ecbb50c59aa695f7ef
TextViewに対して上下左右の制約を課したときに自動サイズ調節を行える機能があります。
こちら、xmlファイルに`android:autoSizeTextType=”uniform”`を追加するだけで済むので非常に便利なのですが、
以下のような要件の時に問題が発生します。– ①TextViewに背景を設定したい場合
– ②
【初心者応援】デグレしないために気をつけること
# 初めに
今回は、デグレを起こさないために気をつけるべきことを紹介していきたいと思います。
デグレとは、不具合修正をした際に元々正常だった動作が不具合を起こすことを言います。### 正常動作と異常動作の確認をする
正常時の動作はどういったものなのか、今回の不具合はどういった異常が起こってしまっているのかを把握することで、不具合の原因に見当をつける際にかなり絞ることができます。
そして、正常時との違いを把握することで他の部分に対して無駄な変更をしなくて済むので、間接的にデグレが起こることを未然に防ぐことができます。### 修正は大雑把にしすぎない
通信部分や変数に修正を加える際に、大元を変えてしまったりすると意図しない変更が起こってしまい他の部分にも影響が出てしまいます。
そのためにも3段回に分けるといいかと思います。
1.原因を発見
2.それを修正するのに必要なことを見定める
3.実装するのにはどうするのが適切なのかを考える
このように、修正に必要なものを見定めた後に適切な修正はどれかを考えることで、直線的な考えをしてデグレが起こってしまうということを防ぐことができます
Flutter 公開済みAndroidアプリの更新時テストで、署名が異なるエラーが出たとき
## アプリのアップデートでエラー
Flutterで作成し、既にPlayStoreで公開済みのAndroidアプリを更新する際のテストで、
アプリの更新ができなかった事象について、備忘録として記載します。## 前提条件
・バージョン1.0.0を新規アプリとしてPlayStore公開済み
・上記公開時はapkファイルではなく、aabファイルで申請を行った
・バージョン1.1.0をapkファイルとして作成
・アプリはFlutterで作成## 更新できなかった事象
PlayStoreより、既に公開されている1.0.0をダウンロードし、そのあとローカルで作成した1.1.0の新バージョンapkファイルを
ファイルシステムより、インストールしようとしたところ、8割ほどインストールが進んだのちに、「アプリはインストールされていません。」と表示され、正常にインストールができなかった。## 試してみたこと
1.0.0アプリがインストールされた状態で、1.1.0バージョンの実行をflutter run –release コマンドで行った。
すると、署名が異なるのでエラーする旨のメッセージが
Profileable apkを使ってリリースapkで起動時に実際に何が時間がかかっているのかを確認する
# モチベーション
デバッグではランダムに時間が増えてしまうので、基本的にデバッグが有効の場合でプロファイルしても実際にかかっている時間は取れないです。ですが、これまではデバッグでしかプロファイルが取れなかったので、正確なものを見るには[OSごと書き換えたり](https://github.com/uber/nanoscope)とかしかなかったです。
ランダムに時間が増える図
それがAPI level 30で、Android Studio Bumblebee (2021.1.1) からProfileable apkが利用できるようになりました。
https://android-developers.googleblog.com/202