- 0.1. 【Flutter】簡単なToDoアプリの作成手順
- 0.2. YahooのHackday2021で姿勢監視アプリ作ってきた
- 0.3. Android Studio で Android Emulator を直接実行してみよう!!
- 0.4. Andorid 12でカスタム通知を使うときはsetCustomBigContentViewも設定するのを忘れない
- 0.5. メソッドチェーンでかけるModifireのデータ構造はどうなっているか
- 0.6. Flutter環境構築のつまずきポイント(初心者向け)
- 0.7. Android: 画像ファイルの共有は FileProvider と ShareCompat を使う
- 0.8. AndroidでIR(赤外線通信)
- 0.9. ComposeのノードがキャッシュされているときにどのようにRecompose(処理の再呼び出し)をスキップするのか?
- 0.10. [Android]思考停止で使っていたAndroid Architecture Componentのメリットを少し掘り下げる
- 0.11. Javascriptで APKの証明書フィンガープリントを出力する(V3署名対応版)
- 0.12. Xamarin.FormsでAndroidでの実行時に android.support.v7.widget.Toolbar に問題あるという Android.Views.InflateException が発生した場合の対処方法
- 0.13. [Codelabs]「Android アプリでの Hilt の使用」をやってみる
- 0.14. 【備忘録】bundletool を自分でビルドしてみた話
- 0.15. Flutter/複数ファイルのダウンロードの進捗をリアルタイムで表示
- 0.16. Flutterでの開発でAPIKeyを隠してGithubにあげる方法
- 0.17. Android x86のlive USBでデータを保持する
- 0.18. Jetpack ComposeのComposable関数のdoCompose()でノードが消えたときにどう動くのかのコードリーディング
- 0.19. Flutterでバトルシップパズルを作成する4
- 0.20. Android CardViewで背景に透過色を使う場合の注意点
- 1. CardViewの背景透過の問題点
- 2. では、どうやって透過するのか?
【Flutter】簡単なToDoアプリの作成手順
皆さんこんにちは!現役大学生のKamichan_R(@Kamichan_R)です。
今回は、世界中で多く利用されているクロスプラットフォーム開発のフレームワークであるFlutterでアプリ開発をしました。Flutterでアプリ開発をするためにDart,SQLiteを勉強しました。そして、学習のアウトプットとしてToDoアプリを制作しました。
この記事では、今回制作したToDoアプリの説明・開発手順と学習の振り返りを紹介します。#アプリ制作の説明と経緯
ここでは、ToDoアプリの概要と使用した技術と学習の目的を説明します。
##アプリの概要
今回開発したアプリは基本的なToDoアプリの機能が実装されています。タスクの追加・読取・編集・削除(CRUD)の機能があります。タスク作成時は、タスク名・優先度・期限・メモを入力します。複数のタスクがある場合は期日が早い順に並べるという機能があります。【Todoアプリ完成】
1ヶ月前位から YahooのHackday2021で姿勢監視アプリ作ってきた
## 背景
リモートワークで気付いたら猫背になっているということが多くなってきたので、姿勢が崩れたら教えてくれるサービスを作りたいな、と思っていたらYahooのHackdayが開催されるという情報が出ていたので作るかーとなって同僚と参加してきた。## 実現したい事
自分の姿勢が崩れていたら教えてくれる### 実装方法
– Androidアプリで一定間隔で写真を撮りサーバーに送信
– Pythonサーバーでリクエストを受け取りHRNetを使って解析
– Androidアプリに結果を返して、姿勢が悪い場合は通知## 使用技術
![Screen Shot 2021-09-26 at 23.01.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1031136/42ace277-6a17-6eaf-cdf4-0b6501cf112e.png)
### Client-Android
#### HttpClient
https://ktor.io/
ktor(ケイターというらしい)を使用。AndroiAndroid Studio で Android Emulator を直接実行してみよう!!
#初めに
最新のAndroidStudio (Arctic Fox | 2020.3.1) のバージョンアップによりEmulatorをAndroidStudioでそのまま実行できるようになりました。
別ウインドウで表示されなくなるため、ウィンドウがごちゃつかず、完結した画面で行うことができます。また、自分だけの話ですが、PCの電源を消すときにエミュレーターをつけっぱなしにして何度もエミュレーターをぶっこわしたということを防ぐこともできます!!(^▽^)/!
![emulator-tool-window.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/7984ba64-68b4-0a8c-b95d-690a01202f49.gif)
参考:「Android Emulator 上でアプリを実行する #Android Studio で Android Emulator を直接実行する」
https://developer.android.com/studio/run/emulator?h
Andorid 12でカスタム通知を使うときはsetCustomBigContentViewも設定するのを忘れない
Android 12の正式リリースはまだですが、先走ってtargetSdk 31対応をして公式ドキュメントをちゃんと読まずに失敗したので注意喚起
Android 12でtargetSdkを31にするとカスタム通知に関する挙動が変更されます。https://developer.android.com/about/versions/12/behavior-changes-12?hl=ja#custom-notifications
Android 12でもtargetSdkが31未満の場合、以下のように`setCustomContentView`で設定したRemoteViewsが通知全体に表示されます。妙に角のRが大きい問題がありますが、角部分に重要な情報を配置していなければそれほど問題は無いでしょう。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/6ae2ef96-50c9-1777-d7ca-378e7eb67c72.png)
しかし、targetSdkを31にすると以下のように通知
メソッドチェーンでかけるModifireのデータ構造はどうなっているか
Modifireはたくさんつなげてかけると思うのですが、どうなっているんでしょうか?
“`kotlin
Modifier
.fillMaxWidth()
.offset(y = targetValue)
.semantics(mergeDescendants = true) {}
“`**CombinedModifierが作られます。CombinedModifierはouterとinnerのModifireを持ち、CombinedModifierは数珠つなぎにできて、複数個あるときはこのouterの方に同じように連なるだけです。**
“`kotlin
class CombinedModifier(
private val outer: Modifier,
private val inner: Modifier
) : Modifier {
…
“`![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw
Flutter環境構築のつまずきポイント(初心者向け)
#目次
– [はじめに](#はじめに)
– [環境](#環境)
– [PATHが通らない](#pathが通らない)
– [Android StudioでOpen iOS Simulatorが出来ない](#android-studioでopen-ios-simulatorが出来ない)
– [さいごに](#さいごに)
– [参考](#参考)#はじめに
Flutterの勉強を始めたいと思い、まずは環境構築をしてみました。基本的には手順通り進みましたが、Flutter初心者の私が引っ掛かったいくつかのポイントをまとめました。Flutter環境構築が上手くいかない方は是非参考にしてみてください。#環境
– macOS Catalina 10.15.7#PATHが通らない
flutterをダウンロードして所定の場所に配置して、.zshrcファイルにPATHを追加して保存しましたが、not foundエラーとなってしまいました。[解決策] source .zshrcを実行してzshrcファイルの変更を反映させると解決しました。つい忘れがちですが、忘れない様にしたいですね。
[【zsh
Android: 画像ファイルの共有は FileProvider と ShareCompat を使う
Android で画像ファイルを他のアプリへ共有するには、ACTION_SEND Intent または ShareCompat を使います。
共有するファイルの Uri は FileProvider で生成します。
この記事では、FileProvider + ShareCompat での実装についてまとめています。
画像のシェアについては以下が公式のドキュメントとなります。
https://developer.android.com/training/sharing/send
# 前提
AndroidX Core 1.5.0 以上を利用していること。
AndroidX Core 1.5.0-beta01 から、後述の Android 10 ShareSheet でのプレビュー問題が修正されています
# 実装: FileProvider の設定
画像ファイルを cacheDir へ保存し、Intent 発行時に一時的に外部のアプリに読み取り権限を与えられるようにします。
AndroidManixest.xml を設定します。`${applicationId}`もそのま
AndroidでIR(赤外線通信)
#Androidで赤外線送信を行います。
受信は取り扱いません。(私の端末が非対応)
Androidには赤外線通信対応している端末と、していない端末があるので注意してください。ConsumerIrManagerクラスを使用するだけで簡単に実装できます。
このクラスはandrod.hardwareパッケージに入っていますが、このパッケージにはカメラとかセンサとか扱う系のやつが入っていて面白そうです。android端末が赤外線通信に対応しているか
“`Java
ConsumerIrManager irM = (ConsumerIrManager) getSystemService(CONSUMER_IR_SERVICE);
((TextView) findViewById(R.id.text)).setText(irM.hasIrEmitter() ? “この端末で使用できます” : “この端末では使用できません”);
//hasIrEmitter()は赤外線が使用できるならtrue,そうでなければfComposeのノードがキャッシュされているときにどのようにRecompose(処理の再呼び出し)をスキップするのか?
https://qiita.com/takahirom/items/11e3ed72eb2f83440b12
の続きです。
以下の中で3:の部分を読んでいきます。3の最後までになります。
1: recordComposerModificationsLocked() を呼ぶ。Recomposer.snapshotInvalidationsを見て、IdentityScopeMapを使って変更点に対しての影響を受けるスコープを取得し、Recomposer.compositionInvalidationsやComposition.invalidationsというフィールドに変更を入れる。
2: compositionInvalidationsをtoRecomposeに入れる。
3: toRecomposeに対して、performRecompose(composition, modifiedValues)、(内部でdoCompose())することでtoApplyを作成。SlotTableを見て、ここで木を見ていき、木への変更をrecordしていく。
4: recordされたtoApplyに[Android]思考停止で使っていたAndroid Architecture Componentのメリットを少し掘り下げる
#取り敢えず使っていたけども
Google様が推奨しているから何となく使っていたMVVMを改めてメリットについてまとめていきたいと思います。# Android Architecture Componentとは?
可読性とか保守性とかの観点でいい感じのアプリが作れるように、Googleが出してくれているライブラリ達の事です。
通称MVVMですが、正式名称ではないです。
まぁ、見た感じMVVMなのでそれで通りますがね。#メリット一覧
– ライフサイクルを管理しているAndroidのオブジェクトは、ライフサイクルという複雑な経過を辿ります。
その為、何も考えずに使っているとメモリリークが起きてしまします。
使ってないViewがずっと残り続けるなどですね。
これは、実際手動でもどうにかなるのですが、やはり自動化したいですよね。
そこで、LiveDataやViewModel等はViewのライフサイクルを独自に意識してインスタンス化されるので、Viewが破棄されるとそれに対応しているそれらも破棄されメモリリークを回避してくれます。– 責務を跨いでLiveDataでデータを扱うことが
Javascriptで APKの証明書フィンガープリントを出力する(V3署名対応版)
前回の記事で、ブラウザからAPKのフィンガープリントを出力することができました。
これは、V1署名もしくはJAR署名とよばれる仕組みで署名された情報を出力する仕組みでした。https://qiita.com/kkoiwai/items/d9864e83f6cefa56a2d2
しかしながら、新しい署名スキームが導入され、新しいバージョンのAndroidにのみ対応しているAPKについては、V1署名がされていない可能性があり、フィンガープリントを抽出できなくなってしまいました。
https://source.android.google.cn/security/apksigning/v3?hl=ja
そのため、新しいV3署名に対応するように、既存のツールを修正しました。
APK署名ブロックの構造さえ理解できれば、その後の処理はJAR署名より若干簡単にできました。V2以降の署名は、Java付属のkeytoolを使えず、Android Studio付属のapksignerを使わないと確認することができないのですが、このツールを使うことで、開発環境がインストールされていないPCか
Xamarin.FormsでAndroidでの実行時に android.support.v7.widget.Toolbar に問題あるという Android.Views.InflateException が発生した場合の対処方法
# はじめに
本稿は、C#でのXamarin.Formsでの開発時に、Xamarin.Formsを古いバージョンからバージョンアップする時に、発生する実行時エラーの対処方法の記録です。
(少なくとも Xamarin.Forms の Ver4.3.0から5.0.0へのバージョンアップ時に発生することを確認済みです)# エラー内容
ビルドエラーはありませんが、Androidでの実行時に、以下のExceptionが発生します。
Exceptionの種類:Android.Views.InflateException
ExceptionのMessage:Binary XML file line #1: Binary XML file line #1: Error inflating class android.support.v7.widget.Toolbar# 対処方法
以下のMicrosoftサイトのQ&Aにあるように、Toolbar.axmlというファイルの定義を修正することで解消できます。
https://docs.microsoft.com/en-us/answers/[Codelabs]「Android アプリでの Hilt の使用」をやってみる
# はじめに
本記事は、Codelabsの[AndroidアプリでのHiltの使用](https://developer.android.com/codelabs/android-hilt)をやってみた際のログです。
詰まった箇所について述べています。# 実行環境
PC: `MacBook Air (M1, 2020)`
OS: `macOS Big Sur 11.5.2`
チップ: `Apple M1`
メモリ: `16 GB`
Android Studio:“`
Android Studio Arctic Fox | 2020.3.1 Patch 2
Build #AI-203.7717.56.2031.7678000, built on August 27, 2021
Runtime version: 11.0.10+0-b96-7249189 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 11.5.2
GC: G1 Young Generation, G1 Old Generation
M【備忘録】bundletool を自分でビルドしてみた話
# 略称
– PAD:Play Asset Delivery
– AAB:Android App Bundle# ■ はじめに
Android Developer で提供されている bundletool という AAB を弄くり回せるツールがあります。
せっかくオープンソースで公開されていましたのでどのようなことをやっているのかを知りたくて自前でビルドしてみました。
そのときの手順などをまとめておこうと思います。# ■ 開発環境
– bundletool 1.8.0 (masterブランチ)
– Windows 10 Home (21H1)
– IntelliJ IDEA Ultimate 2021.2.1
– 恐らく Community でも動かせると思います。
– 余談ですが Japanease Language Pack をインストールしています。
– JRE 11# ■ bundletool について
公式ドキュメントにございますのでこちらをご確認ください。
– [bundletool – Android developers](https
Flutter/複数ファイルのダウンロードの進捗をリアルタイムで表示
#複数ファイルのダウンロードの進捗をリアルタイムで表示する
今回は動画ファイルをダウンロードしていきます。
色々ググっても複数ファイルのダウンロード進捗をリアルタイムで更新する実装を見かけなかったので、僕なりに実装したものを晒します。
ダウンロード中にアプリをキルしてしまった場合、前回のダウンロードが完了したファイルについては飛ばしてダウンロードされるように実装しています。※殴り書きなので、ディレクトリ構造や状態管理はほとんど考慮していません
※とりあえず動くものを!をモットーにやってます。汚いコーディングだと思います。読みにくければすみません。。。[Githubのレポジトリーはこちら](https://github.com/489yuki/download_sample)
##1.使用パッケージの導入
https://pub.dev/packages/path_provider
https://pub.dev/packages/http
https://pub.dev/packages/rxdart
pubspec.yamlに以下を追記(バージョンは最新のものを使
Flutterでの開発でAPIKeyを隠してGithubにあげる方法
チーム開発をするときなどに、自分のコードをGithubなどにあげたい!→でもAPIKeyを隠さないと…というときがあると思います。そうした時に、これが最も手っ取り早くAPIKeyを隠す方法だと思ったので共有します。
※私が作っていたアプリが地図系なので、APIKeyの名前もそんな感じになってますが、お構いなく好きに名前つけてもらって大丈夫です()
#Android
##基本的な設定
https://www.entwicklernotizen.de/blog/how-to-handle-secret-api-keys-in-flutter-for-android-and-i-os/
“`android/app/src/main/AndroidManifest.xml“`へのAPIKeyの書き込みについてはこれを参考にしてください。ここから先のコードは、“`your_api_key“`という文字列を自分のAPIKeyに書き換えて使用してください。“`dart:android/local.properties
…
MAPS_API_KEY=your_api_key//こAndroid x86のlive USBでデータを保持する
Android x86ではUSBからの起動ができますが、そのままでは一度電源を切るとデータが消えてしまいます。
あまり煩雑でない手順でデータの保持ができたので、以下にその方法をまとめます。
(Windows向けの手順です。Linuxの場合はWSLをターミナルに置き換えれば大丈夫かと思います)#手順
1. Android x86のISOをダウンロードし、Rufus等のソフトを利用してUSBメモリに書き込む。
1. WSL2でUSBメモリをマウントし、ドライブ直下にデータ保存用の領域をimgファイルとして作成する。(countの数値は領域のサイズ(MB)です。)“`
dd if=/dev/zero of=data.img bs=1M count=2048
“`1. 作成した領域をext4でフォーマットする。
“`
mkfs.ext4 data.img
“`以上の手順で、USBから起動したAndroid x86でもデータが保持されるようになりました。
#参考ページ
https://www.youtube
Jetpack ComposeのComposable関数のdoCompose()でノードが消えたときにどう動くのかのコードリーディング
https://qiita.com/takahirom/items/0e72bee081de8cf4f05f
の続きのstateが書き換わってからの動きを追っています。“`kotlin
@Composable
fun Content() {
var state by remember { mutableStateOf(true) }
LaunchedEffect(Unit) {
delay(12000)
state = false
}
if (state) {
Node1()
}
Node2()
}
“`**自分用のコードリーディイングメモ記事で、もっとわかりやすいのを後で出すと思います。**
以下の中で3:の部分を読んでいきます。3の途中までになります。
1: recordComposerModificationsLocked() を呼ぶ。Recomposer.snapshotInvalidationsを見て、IdentityScopeMapを使って変更点に対しての影響
Flutterでバトルシップパズルを作成する4
## 概要
Flutterでバトルシップパズルを作成する
スクリーンサイズと向きを考慮する
効果音を入れる– [Flutterでバトルシップパズルを作成する3]
(https://qiita.com/iharakenji/items/ff65749c4b6acd1b57d2)### 実行環境
#### Mac
“`sh
$ sw_vers
ProductName: macOS
ProductVersion: 11.6
BuildVersion: 20G165
“`#### Flutter
“`sh
$ flutter –version
Flutter 2.5.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ffb2ecea52 (5 days ago) • 2021-09-17 15:26:33 -0400
Engine • revision b3af521a05
Tools • Dart 2.14.2
“`## 修正内容
### スクAndroid CardViewで背景に透過色を使う場合の注意点
CardViewで背景色を透過度ありの色で設定しようとすると、やりたい内容によってはうまくいかないパターンがあります。何回かそういう場面に遭遇していたのですが、毎回調べている気がするので自分のメモ用にまとめたいと思います。
CardViewの背景透過の問題点
1. シャドー(elevation)を設定している状態で背景色に透過度がある色を設定すると画像のように枠線が表示されてしまう。
elevationとかtranslationZの値とか変えると分かるのですが、枠の部分がシャドーを描画するのに使ってそうな感じ。。。
まぁ、背景色を透過して利用するのは想定されてないという感じなのかな?っと。では、どうやって透過するのか?
解決策としては2パター
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた