- 1. ActivityResultContractのリクエストと結果の処理をより強く結びつかせる
- 2. AndroidアプリのCircleCiによる自動ビルドからPlayストア自動アップロードまで試してみる
- 3. .ideaのgit管理について Android Studio
- 4. 【Android】BottomNavigationView(画面下部のナビゲーションビュー)の実装(Java)
- 5. [Flutter] CodeMagic で自動で build_number を更新できない時の対処法。build number が更新されない。 –build-number=$(($BUILD_NUMBER))
- 6. PreferenceScreenの導入に手間取った話
- 7. Android 11 API30 以降に対応したアプリ開発用メモ
- 8. 【Flutter】プラグインでAndroidのActivityとContextを取得する方法
- 9. M1 Mac (Monterey) でandroid studio をインスコするときに躓いた話。 ”Failed to determine required packages”
- 10. Couchbase Lite 機能解説:インデックス作成
- 11. Composeで左右に揃えた複数行のレイアウトを組む
- 12. 【忘備録】ライブラリの依存関係を表示する(特定ライブラリを外す)
- 13. Unity2019でAdmob実装時にクラッシュして表示されないときの対処法
- 14. Android 12に最速で最低限対応してみた!
- 15. App Links の Android 12 うんぬん関連メモ
- 16. 【Flutter】Statefullなカウンターアプリをhooks_riverpod+state_notifier+freezedでリファクタリングする
- 17. Android Studioでビルドエラーと格闘する
- 18. [Jetpack Compose] Paging Libraryを使わずに無限リストを実装する
- 19. M1 MacでAndroidエミュレーターを起動する
- 20. kotlinで画面のタップイベントを実行する方法
ActivityResultContractのリクエストと結果の処理をより強く結びつかせる
ActivityResultContractsの仕組み、個人的にちょっとどうかな?と思っているところがあります。
それは、リクエスト内容と、結果の処理の結びつきが弱く、余計な自由度が残されてしまうところです。例えばパーミッションのリクエストの場合、以下のように記述します。
“`kotlin
private val launcher =
registerForActivityResult(RequestPermission()) {
// 結果の処理
}
…
// リクエスト
launcher.launch(Manifest.permission.CAMERA)
“`ここで、リクエストしているパーミッションと、その結果の処理は紐付いています。にもかかわらず、コールバックの登録時点でリクエストするパーミッションは決まっておらず、lauchをコールする時点で自由度が残されています。ここで間違って異なるパーミッションを指定してしまうと意図した動作となりません。
registerをコールした時点でこの対応関係が固定できないところがちょっとモヤモ
AndroidアプリのCircleCiによる自動ビルドからPlayストア自動アップロードまで試してみる
## 概要
AndroidアプリのCircleCiによる自動ビルドからPlayストア自動アップロードまで試してみる
これで aab を自前でビルドして作成し、手動でPlayストアにアップロードする手間が省かれる## 前提条件
前提条件として既にPlayストアに公開済みのアプリがあること。app bundleに対応していること(apkではなくaabを対象とする)## ビルド設定
`./gradlew bundleRelease` で署名付きaabが出力されるよう設定しておく“`build.gradle
…
android {
…
signingConfigs {
release {
storeFile file(‘../keystore/xxxx.jks’)
storePassword ‘xxxx’
keyAlias = ‘xxxx’
keyPassword ‘xxxx’
}
}
…
buildT
.ideaのgit管理について Android Studio
Android Studioでプロジェクトを開始するときに.ideaファイル内のgit管理についていつも迷うのメモします。
### 結論
[こちら](https://takemikami.com/2018/08/29/GitIntelliJ-IDEA.html)によると以下3個をgit管理しておけば良いみたいです。– `build.gradle`
– `.idea/gradle.xml`
– `.idea/misc.xml`### 自分の場合
しかし自分の環境では`misc.xml`にはユーザー固有のファイルパスが記述されていました。とりあえずユーザー固有のファイルパスの部分を`$PROJECT_DIR$`に変更しておけば良いと思います。
上記以外も基本的にユーザー固有ファイルパスの部分を適宜`$PROJECT_DIR$`に直してさえいればgit管理して問題ないかと思います。
### .idea内のファイルについて
記事を各過程で各ファイルがどのような役割なのか簡単に分かったことをまとめたいと思います。(適宜更新していくかと思います。)
– `workspace.x
【Android】BottomNavigationView(画面下部のナビゲーションビュー)の実装(Java)
最近、独自でAndroid のアプリを書いているので、それのメモ書きぐらいのつもりで書いています。
独自で書いているコードは下記に収めてあるので、気になる方は下記をご覧ください。
(「カレンダー_設計書.xlsx」に完成図がざっくりと書いてあります。)
https://github.com/NagaJun1/OriginalCalendar#「BottomNavigationView」とは?
下記画像の、赤枠の部分がそれです。
今回の記事の題名には「Java」と書いてありますが、実装方法自体は「xml」で実装します。
![ナビゲーションバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/b5204b73-9f70-d32e-a279-d3b00bde96dd.png)#実装
ソースコードは下記の通りです。
(各ソースの配置位置は、Andoid Studioでプロジェクトを生成した基本的な構造を想定しています。)“`xml:\res\layout\activity_main.x
[Flutter] CodeMagic で自動で build_number を更新できない時の対処法。build number が更新されない。 –build-number=$(($BUILD_NUMBER))
https://kaedeee.com/flutter-codemagic-build_number/
CodemagicでFlutterを利用する際に、Github にデプロイ後、自動でbuild numberを更新するように設定したにも関わらず、iOSで自動更新が反映されませんでした。
対応を以下に示します。
#対処法
##Codemagicの設定を見直す。
build > build arguments を–build-number=$(($BUILD_NUMBER))
と設定する。
![スクリーンショット 2021-11-12 17.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1900756/24fd56ef-c082-f3d8-b787-83342dcb7035.png)
##Xcodeの設定を見直す。
Xcode > Info.plist より、key CFBundleShortVersionString
key CFBundleVersion
部分の
PreferenceScreenの導入に手間取った話
設定画面を自前で作っていましたが、
PreferenceScreenというものがあるらしく導入したときの話です。# 赤くなっていて、設定が反映されていない
“`groovy:build.gradle(:app)
dependencies {
implementation ‘androidx.preference:preference-ktx:1.0.0’
}
“`を記述したのにエラーが出てる。
Alt + Shift + Enterをしても`implementation`が増えるだけで一向に直らない…![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447423/4a2eb61e-0b07-5ade-5f95-e11c27088a0b.png)
# 公式に書いてある通りに修正
https://developer.android.com/guide/topics/ui/settings#kotlin
をもう一度見てみると、
![image.png](https://
Android 11 API30 以降に対応したアプリ開発用メモ
2021年11月からプレイストアの要件でターゲットAPIバージョンが30以降になったことに伴い、作業で躓いたポイントのメモです。
——-
## 前提
Android API30 の要件により、端末内へのアクセスなどをする場合は以降に記載する作業が必要になっています。
私の場合はアプリからブラウザを呼び出すために作業が必要でした。
[Android でのパッケージの公開設定のフィルタリング | Android デベロッパー | Android Developers](https://developer.android.com/training/package-visibility)## AndroidManifest.xml への追記
プロジェクト名/android/app/src/main/__AndroidManifest.xml__
に必要な情報を追記します。
私の場合は以下を記載しました。
“`
【Flutter】プラグインでAndroidのActivityとContextを取得する方法 #概要
FlutterプラグインでAndroidネイティブ画面を利用するために、プラグイン側でActivityとContextを取得する方法を整理します。
プラグイン作成時にはthis経由でActivityを取得できず、代替手段が必要になるため、その補足記事となります。
本記事は[公式ドキュメント](https://flutter.dev/docs/development/packages-and-plugins/plugin-api-migration)を参考にして記載しています。#環境
“`shell-session
$ flutter –version
Flutter 2.5.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 18116933e7 (3 weeks ago) • 2021-10-15 10:46:35 -0700
Engine • revision d3ea636dc5
Tools • Dart 2.14.4
“`#実装
以下の手順で実
M1 Mac (Monterey) でandroid studio をインスコするときに躓いた話。 ”Failed to determine required packages”
##概要
Montereyが動いているM1MacにAndroid studioを新規インストールしようとしたところ、セットアップが一発でうまくいかなかったので解決策をメモ。##症状
Android studioの初期セットアップでNextとfinishを押していけば問題ないという記事が多くあるが、その通りに進めていくと、以下のようなエラー画面が出る。
![k7NcO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2270248/ebafcb33-9221-0b5e-72d4-57322f4ed4a7.png)Android studioがAndroid SDKを正常にインストールできない(そんなことあっていいのか?)ためにこのエラーが出るようだ。因みに、Brewで別個にAndroid SDKをインストールしてもダメ。
##解決策
IntelliJ IDEAをインストールし、新規プロジェクト→Android からAndroid SDKをインストールして、Android Studioのセット
Couchbase Lite 機能解説:インデックス作成
Couchbase Liteの機能全般について、以下の記事も合わせてご参照ください。
https://qiita.com/yoshiyuki_kono/items/6a5bbad1b02196a25417
## 概要
インデックスを作成すると、クエリのパフォーマンスを高速化できます。クエリは、インデックスを利用して、ドキュメントのセットを絞り込むことができれば、より迅速に結果を返すことができます。
## 新しいインデックスの作成
次のデータモデルに含まれる`type`、`name`プロパティを指定して新しいインデックスを作成します。
データモデル
“`JSON
{
“_id”: “hotel123”,
“type”: “hotel”,
“name”: “Apple Droid”
}
“`インデックスを作成するコードは次のようになります。
##### Android
“`JAVA
database.createIndex(
“TypeNameIndex”,
IndexBuilder.valueIndex(
Composeで左右に揃えた複数行のレイアウトを組む
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53293/d7545a6c-2f9b-453d-7387-b922ce5b486e.png)
こういうやつ。全体の幅を固定値ではなく、もっとも幅の大きい行に揃えて、かつ他の行も左右に揃える。簡単そうに見えて地味に難しいやつ。# 答え
IntrinsicSizeを使用することで簡潔に記述することができます。“`kotlin
@Composable
fun AlignedColumn() {
Column(modifier = Modifier.width(IntrinsicSize.Max)) {
Row {
Text(text = “中華そば”, modifier = Modifier.weight(1f))
Spacer(modifier = Modifier.width(16.dp))
Text(text = “800円”)
}
Row {
Text(
【忘備録】ライブラリの依存関係を表示する(特定ライブラリを外す)
ライブラリの依存関係を表示する
./gradlew :app:dependencies
こんな感じで依存関係が表示される
“`
+— com.google.firebase:firebase-config:21.0.1
| +— com.google.android.gms:play-services-tasks:17.0.2 -> 17.2.0 (*)
| +— com.google.firebase:firebase-abt:21.0.0
| | +— com.google.android.gms:play-services-basement:17.0.0 -> 17.5.0 (*)
| | +— com.google.firebase:firebase-common:20.0.0 (*)
| | +— com.google.firebase:firebase-components:17.0.0 (*)
| | \— com.google.firebase:firebase-measu
Unity2019でAdmob実装時にクラッシュして表示されないときの対処法
https://kaedeee.com/unity2019-admob/
しばらく更新していませんでした!というのもアプリ作るのにはまってて笑
(アプリのURLはまた後で)
ところで今回は、 Unity 2019でAdMobを実装した際にクラッシュしてしまいアプリが表示できなくなってしまう時の対処法です。
(やはり Unity 2019は最新版ということで2019に関する記事がなかなかなーい!!笑笑)
というわけで僕のでよければ参考にどうぞ。
結論から言うと以下二つに対応することでうまくいきました!!
(あ、Android アプリ用です。この記事)
#Unityのバージョンを確認する
結論から言うと
Unity 2019 1.4f1
×
Google mobile ADS Unity plugin 3.16
が最強!
はじめ自分は
Unity のバージョン→ 2019.3.0a3
に
AdMobのバージョン→Google mobile ADS Unity plugin v3.17
を投入!
ですがこの時にx86 no
Android 12に最速で最低限対応してみた!
みなさんいかがお過ごしでしょうか?
私はこの前の週末、某大型商業施設で献血してきました。(400㎖)
プチ社会貢献できましたので、自己満足している今日この頃です。ご褒美?に爽健美茶とアクエリアスのどっちか選んでね。と言われたので
お茶より「栄養」がありそうなアクエリアスにしました。あと箱ティッシュもらいました。
※飲み物配給は血抜き中に飲んでね、という意味でした。急に水分減るので。血抜き時間は5分ほどです。ほて、そのときの出来事なんですけど、献血のバスの横をみるとタンカの上でおんなの人が倒れてました。
どうしたのかな?**早速血の供給を受けてるのかな?**と思ったんですが、ここは病院ではないのです。どうやら血を抜きすぎて?**貧血を起こした**ようです。
かわいそう。だいたい、体重50kgでも100kgオーバーでもおんなじ量抜くのが変なんですよね。
みなさん、くれぐれも献血しすぎには要注意です。
***
さて前置きが長くなりましたが、今回のお題は、Android 12対応です。
Pixel 6シリーズが発売されて、ぼちぼち使っている人が現れてますので、
こりゃ早
App Links の Android 12 うんぬん関連メモ
軽くドキュメントを読んだ際のメモです。
# ドキュメントに関して
– おいらが読んだ時点での[ドキュメント](https://developer.android.com/training/app-links)に関して言えば、和文と英文で文章がまったく異なり、リンクのタイプ分類のような基本的なレベルで異なることが書かれているなど、結構微妙な感じだった、、、。英語側のほうがまともだとは思うのだが、web links の scheme が HTTP, App Links 側が HTTP and HTTPS であると書かれているけど、実際は両方とも https を含む動作をするので、何を信じでいいのかわからない、、、。# たぶんこういうことなんだろーなということ
– Android 12 から云々という話は、端末OSの話であり、ビルド時の compileSdk や targetSdk とは無関係だと思われ。
– http, https 以外は、今まで通りの deep link.
– http, https は、
– 端末OSが Android 12 未満の場合はダイアログで選択。
【Flutter】Statefullなカウンターアプリをhooks_riverpod+state_notifier+freezedでリファクタリングする
FlutterのNullSafetyがstableになってしばらくたち、最近になってriverpodがstableになったので、記念にhooks_riverpod + state_notifier + freezedの使い方を最低限記載しておきます。
プロジェクトを作った時に作られるカウンターアプリを上記パッケージを使って実現するようにリファクタリングしていきます。# tl;dr
– flutterの初期アプリをhooks_riverpod+state_notifier+freezedを使うようにリファクタリングする
– 結論としては単機能なアプリでこんなに複雑にやると余計わかりずらい(趣旨としてはサンプルなので良いのですが、、、)
– freezedも無理やり使ったしhooksはさすがに使えなかったので、hooks特有の機能については本記事のスコープ外#### 完成版の全コード
https://github.com/tokku5552/flutter_riverpod_sample/tree/1.0.0
## 環境
– Android Studio“`yaml:
Android Studioでビルドエラーと格闘する
# はじめに
2016年頃まで自作のAndroidアプリを作って、[Google Play](https://play.google.com/store/apps/developer?id=hamham)に公開していました。
2021年の某日。突然Googleから**「ご対応のお願い: Google Play のポリシーをアプリが遵守していません」**とのメールがきて、アプリがストアから削除されてしまいました。
最後のアプリのアップデートをしてから5年も経って、突然こうなったということは、**Google Play側のデベロッパープログラムポリシーの変更に追随できておらず放置していたということが原因**と考えられます。
幸い、ポリシーに違反していた部分は軽微だったので修正自体は難しくなさそうです。
ポリシー違反部分を修正して再アップすればよいのですが、なんせ5年も前なので、開発環境を整えていたPCは手放してしまったし、アプリのビルドやストアへの公開方法も忘れてしまっている状態です。
残っているのはzipで固められた当時のソースコードのみ。ということで、開発環境を構築して、アプリをビ
[Jetpack Compose] Paging Libraryを使わずに無限リストを実装する
末尾までスクロールすると追加の要素を読み込んでいくやつです。
Androidではこの無限スクロールを実装するのにPaging3を使うことで簡単に(?)実装することができます。https://developer.android.com/jetpack/androidx/releases/paging
Jetpack Compose対応もされているので、そちらを使って無限スクロール実装するのがベターな気がしますが、それを使わなくともかなりシンプルに実装することができましたので紹介します?♂️
## 完成図
25件ずつ追加で読み込んでいます。サンプルコードなので通信処理はなしでListのジョインをしているのでローディング表示なくスルスルいきます。
末尾にはローディングがあるので読み込みに時間がかかる場合は見える感じです。
M1 MacでAndroidエミュレーターを起動する
# はじめに
Flutterのアプリ開発をしようとしてめちゃくちゃハマりました。
## Flutterのチュートリアル
https://flutter.dev/docs/get-started/test-drive?tab=terminal
iOSはこれ見ながらやれば大丈夫です。
問題はAndroid
## 何が問題か
手順の途中で `flutter doctor` でそれぞれのプラットフォームが起動準備できているか確認します。
iOS であれば XCode, Android であれば Android Studioを事前にインストールしておきましょう。
しかし、AndroidについてSDKがないと怒られました。
## 解決策
SDKを手動で入れます。
まず、JDKを入れましょう。とりあえず brew で最新stableをインストールしましょう。
“`sh
$ arch -arm64 brew install openjdk
“`次に sdkmanager と呼ばれる Android SDK用のCLIをインストールします。
https://develo
kotlinで画面のタップイベントを実行する方法
kotlin学習中メモ
## onTouchEventを設定
“`MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}// 画面タッチ処理はoverride fun onTouchEventの中に書く
override fun onTouchEvent(event: MotionEvent?): Boolean {
// ここに処理を追記していく
return super.onTouchEvent(event)
}
}
“`画面をタップした時になんらかの処理をしたい場合は、onTouchEventを設定してその中に実行したい処理を書いていけばOK
試しに