- 0.0.1. Flutterを知らない人がFlutterでアプリを公開するまでにどのような情報が必要でどのようなエラーを解消したか
- 0.0.2. KMMに対応したRealmを使ってみた!
- 0.0.3. いつもぶつかって何となく調べて解決してきたAndroid周りの対応
- 0.0.4. 【Kotlin 初学者】setの使い方
- 0.0.5. 【Android】Android Sleep APIことはじめ
- 0.0.6. いい感じのランダムの色が欲しいなぁって時にこれ。
- 0.0.7. 【Android】Test dynamic delivery offline のやり方
- 0.0.8. 【Android】ConstraintLayout Attribute まとめ
- 0.0.9. Androidで”storage/emulated/0/”直下にアクセスしてファイルを保存
- 0.0.10. ConstraintLayoutを使ったフラットなレイアウトでもタッチイベントをInterceptしたい
- 0.0.11. 2年かけて個人で全く新しいSNSアプリを作ったお話し
- 0.0.12. 【続】Codelabsの通知機能の実装をViewModelを使って書き換えてみた
- 0.0.13. Reverse Geocoder(逆ジオコーダー) android × kotlin
- 1. Reverse Geocoder(逆ジオコーダー)
- 1.1. 環境
- 1.2. やり方
- 1.2.1. 買い切りアイテム用にGoogle Play Billing Library v3のラッパーライブラリを作成
- 1.2.2. 【Fiddler Everyone】 Android端末のブラウザの通信キャプチャの方法
- 1.2.3. 【Kotlin】Glideの画像データキャッシュを更新したい
- 1.2.4. Androidアプリのクラッシュ対策にやったこと
- 1.2.5. [Android]Vector Assetに枠線をつける方法
- 1.2.6. [Android]テストって何のためにやるのか分からないよね!(初心者の叫び)
- 1.2.7. Codelabsの通知機能の実装をViewModelを使って書き換えてみた
Flutterを知らない人がFlutterでアプリを公開するまでにどのような情報が必要でどのようなエラーを解消したか
## 記事の趣旨
普段iOSで開発をしておりAndroidはほぼ経験がない者が、Flutterでアプリを作り公開するまで、どのようなことを調べなければいけなかったかを記載します。
## アプリ
うつとか診断
iOS https://apps.apple.com/jp/app/うつとか診断/id1559362485
Android (2021/3/30現在 審査待ち 審査に提出したのは24日)リポジトリ GitHub https://github.com/Satoru-PriChan/Depression_Diagnosis
CI/CD CodeMagic https://blog.codemagic.io/getting-started-japanese/必要時間 測ってませんが50~150時間の間?(1日平均30分~1時間半ほど作業して3ヶ月強かかったため)
全体的な参考 [flutter create してから5日で iPhone / Androidアプリを公開した話](https://qiita.com/chooyan_eng/items/4ab2af269e1
KMMに対応したRealmを使ってみた!
# はじめに
主は今回Kotlin, SwiftUIを初めて触ったので間違ってたら申し訳ないです。現時点では動くのでヨシッ!
あと今はまだx86_64アーティファクトのみの対応なので、エミュで試す場合は注意←ハマった。
AndroidStudioにKMMのプラグインとかもろもろ入ってる前提で話します。
Githubに上げてるのでよかったらどうぞ!
https://github.com/hirossan4049/KMMRealmSample# #1 NewProject
![](https://i.imgur.com/6XweeNS.png)
KMM Applicationを選ぶ
![](https://i.imgur.com/hoR8SKe.png)
Android Application NameとiOS Application Nameは好きな名前でも大丈夫ですが、この記事は`androidApp` `iosApp` として進めます。
# #2 Gradleの設定
“`kotlin:/build.gradle.kts
buildscript {
いつもぶつかって何となく調べて解決してきたAndroid周りの対応
# 前置き
– いつも同じようなエラーが発生する……
– 多分Unityのversion upしたタイミングな気がしている……
– でもその度調べて解決してるが、結局いつも原因忘れてしまっている……# 環境
– Unity2019.4.18f1
– GoogleMobileAds-v5.4.0
– Android Studio 4.1.3# 結論
– JDKのバージョンをテキトーなやつ指定してるとUnityでエラーになる場合がある# 事象
– GoogleMobileAdsを更新したので、Android Force Resolveを再度実施しようとした
– そうしたら以下のようにエラーが発生……“`sh
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
at org.codehaus.groovy.vmplugin.VMPluginFactory.(VMPluginFactory.java:43)
at
【Kotlin 初学者】setの使い方
# setについて
KotlinではSetter,Getterを省略してくれますすが、今回はカスタムして書いてみます。“`
var text: String = “”
set(value) {
field = value
if(field == “name”){
binding.text = “”
} else {
“”
}
}fun test(){
type = “name”
// typeの中に文字列が入ってるのでsetが実行される
}
“`
【Android】Android Sleep APIことはじめ
# Sleep API
以下抄訳↓– Sleep APIを活用すると、アプリでユーザーがいつ寝て、いつ起きているかを判断することができます。
– 周囲の明るさ、デバイスの動きなどに関連する情報を収集して、ユーザーが眠りに落ちて目を覚ます時間を推測します。
– 情報の更新を購読することができます。https://developers.google.com/location-context/sleep
様々な機能に組み合わせることで効力を発揮しそうなAPIですね。
# 実際に試してみる
## 下準備
#### 1. target sdkを29以上に設定する
※29以下だと取得ができないので、minsSDKは29に設定してます
“`gradle:build.gradle
android {
compileSdkVersion 30
buildToolsVersion “30.0.3”defaultConfig {
applicationId “xxx”
minSdkVersion 29
targ
いい感じのランダムの色が欲しいなぁって時にこれ。
例えば10個のいい感じのランダムの色が欲しいって時。
ガチのランダムにすると意味わからない変な色が出来上がったりしてしまうので。
っていうものをメモ程度に残しておきます。
意外と使える!hueの部分の分母を欲しい個数にするだけです。
saturationとbrightnessに関しては自分の好みの色味にしてください。下記コードそのまま使用した際にはこんな感じの色が出力されます。
~~似てる色があるとか言わないで~~
`#CC8B29`
`#ABCC29`
`#49CC29`
`#29CC6A`
`#29CCCC`
`#296ACC`
`#4929CC`
`#AB29CC`
`#CC298B`
`#CC2929`“`swift.swift
let colorList =
[
UIColor(hue: 0/10, saturation: 0.8, brightness: 0.8, alpha: 1),
UIColor(hue: 1/10, saturation: 0.8, brightness: 0.8, alpha: 1),
UIColor(
【Android】Test dynamic delivery offline のやり方
# はじめに
Android AppではDynamic Feature Modules(DFM)を用いて、リリース後に必要な機能を追加でインストールすることができます。これにより開発者がアプリのサイズを小さくできたり、ユーザも使わない機能はそもそもインストールしないことでストレージの節約にもなるという便利なものです。
今回はこちらのDFMのインストール状況をユーザへと通知するテストを、内部テストを使用することなく完全オフラインで実施できるようにしていきます。# FakeSplitInstallManagerの実装
https://developer.android.com/reference/com/google/android/play/core/splitinstall/testing/FakeSplitInstallManager
こちらを使っていきます。
通常のDFMのリクエストやインストールをするにはSplitInstallManagerを使いますが、そのFakeバージョンになります。
まずはSplitInstallManagerやSplitInstallManage
【Android】ConstraintLayout Attribute まとめ
# はじめに
この記事は[公式リファレンス](https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout?hl=ja)の内容をまとめたものになります。
ConstraintLayoutのAttributeってどんなのあるの? という方向けのまとめです。
自分の備忘録も兼任していたり…# [Relative positioning](https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout#RelativePositioning)
Viewを別Viewに対して相対的に設置する。
|
Androidで”storage/emulated/0/”直下にアクセスしてファイルを保存
#はじめに
androidでファイルを保存したいとき、ユーザーがアクセス可能なルートディレクトリ(”storage/emulated/0/”)に保存すると何かと便利。
そこでファイルアクセス方法を調べてみた。#現在は非推奨
以前(Android10以前)ではEnvironment.getExternalStorageDirectory()を使用して外部パブリックストレージへのパスを取得できた。
しかし現在では非推奨となり使用できない。
http://blog.lciel.jp/blog/2014/02/08/android-about-storage/#推奨方法
1. Context#getExternalFilesDir(String)
1. MediaStore
1. Intent#ACTION_OPEN_DOCUMENT.
ConstraintLayoutを使ったフラットなレイアウトでもタッチイベントをInterceptしたい
AndroidではConstraintLayoutが登場してから、より一層Viewのネストが少なく、フラットな階層のレイアウトを作れるようになりました。しかし、イベントのハンドリングなど、Viewにネストがあれば簡単だったことが難しくなっている部分も存在します。
例えば、以下のように上下にスクロールするシートと、横スクロールするカルーセルがあるとします。
横スクロールのカルーセルは横方向の操作しか消費しません。一方シートは縦方向の操作だけが必要です。
こういった場合で、特にシートの大きさが十分でない等の場合、カルーセル部分を触った場合でも、操作が上下方向だった場合、動かないカルーセルではなく、シートの操作に反映した方がユーザビリティが高い場合があります。# 親子関係がある場合
このような要求がある場合、シート
2年かけて個人で全く新しいSNSアプリを作ったお話し
こんにちは。歴10年のアプリエンジニア(Best of AppStore?受賞歴あり)です。
**neeboor?**という位置情報を使った新しいSNSアプリを作りました。
toC向け&コンテンツ系&モバイルアプリというサービスの特性上、**最初からある程度高い完成度のサービスを提供しないとユーザーの手に取ってもらえないな**と思い、UI/UX中心にかなりこだわって開発した結果、**開発に2年以上**かかってしまいました。今回はサービスの紹介をしつつ、開発で苦労した点や工数をかけた点について記事にしたいと思います。
# サービスの紹介
neeboor?は、「**あなたの生活圏をもっとおもしろくするSNS** (Make your living area hackable)」というコンセプトの位置情報系SNSアプリです。従来のローカル系サービス(=地域情報サイト、半径◯メートルでお店や友達探す系、出会い系、ナビ系、トラッキング系など)とは異なり、**場所を演出要素としてオープンでカジュアルなコミュニティを作れる**ところがユニークな点になっています。### 機能 / こんな使
【続】Codelabsの通知機能の実装をViewModelを使って書き換えてみた
[前回](https://qiita.com/kilalabu/items/ca420f2346635efe19a8)の続き
[タスク2:通知を更新またはキャンセルする](https://developer.android.com/codelabs/android-training-notifications#3)を参考に通知機能を実装してみた。|update|cancel|
|—-|—-|
|![update.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/ddf7246f-4f77-603f-5f7c-55e59e389192.gif)|![cancel.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/8e69d8c0-2261-e0aa-f122-5104baf70390.gif)|## 実装
### layout
`android:enabled`でボタン操作をコントロール
Reverse Geocoder(逆ジオコーダー) android × kotlin
Reverse Geocoder(逆ジオコーダー)
kotlinで書いている記事が少なかったので書き残して起きます。
逆ジオコーデイングする上で少し沼ってしまったので
誰かの参考になればいいかなと思っています。
*自分は実務経験がない開発者なので間違っている場合があると思いますが
そこら辺はご容赦ください。
環境
- 言語
- kotlin
- フレームワーク
- Android Studio 4.1.2
やり方
事前準備
経度緯度を取得しておく
latitude(緯度)とlongitude(経度)
逆ジオコーダー
“`kotlin.MapActivity.kt
fun getAddress(latitude: Double, longitute: Double) {
val strAddr
買い切りアイテム用にGoogle Play Billing Library v3のラッパーライブラリを作成
# はじめに
Androidの課金ライブラリ(Google Play Billing Library)をv3に上げる必要が出てきました。
期限は新規アプリの場合は2021年8月1日、アプリ更新の場合は2021年11月1日です。
かなり古くから自作アプリの課金システムを放置していたので思い切って作り直してみました。eclipseからAndroidStudioに変わってからまともに触ったことがなかったので、
AndroidStudioやGradleの勉強も兼ねて作成したので構成がおかしかったらすみません。# 公開リポジトリ
– [AndroidBillingTest – GitHub](https://github.com/taiki-f/AndroidBillingTest)**※ライセンス表記をしております。ライセンスの範囲内でご自由にご使用ください。**
**※買い切りアイテム用に作成した物ですので定期購入アイテムや消費アイテムには対応しておりません。**# ライブラリの簡単な使い方
最初にアイテムリストを作ります。
第1引数が課金の結果を受け取るクラス、
第2
【Fiddler Everyone】 Android端末のブラウザの通信キャプチャの方法
## Android端末でのブラウザの通信をFiddler Everyoneで取得する
####①Fiddler Everyoneを起動する
####②設定のConnectionsを開く
ポートは初期設定のままにし(変更したい場合はしておく)、Allow remote computers to connectにチェックを入れる
![fid_everywhere_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1035014/94320f56-c107-4f2f-7ffb-88bdc1fd2334.jpeg)
SAVEを押すと、ファイアウォールの設定がされていない場合に確認が入るが、アクセスを許可する
#### ③Androidのプロキシ設定を行う
Fiddler Everywhereとandroidのwi-fiを同じに設定する
wi-fiの設定から使用しているwi-fiの設定アイコンを選択
![fid_everywhere_3.jpg](https://qiita-image-store.s3.ap-
【Kotlin】Glideの画像データキャッシュを更新したい
#Glideは同じURLからの読み込みだとキャッシュを利用する
Glideのキャッシュ機能は読み込み回数を減らせて便利です。
しかしサーバーのデータを更新してもURLが同じなら、キャッシュから読み込んじゃうので、更新したデータが反映されずに困ることがあります。
以下に回避方法を2種類記載します。##回避策1:キャッシュからの読み込みをスキップする
“`Kotlin
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.NONE) //ディスクキャッシュをスキップ
.skipMemoryCache(true) //メモリキャッシュをスキップ
.into(view)
“`この方法でキャッシュをスキップして更新されたデータを読み込むことはできます。
しかし元々保存されているキャッシュが更新されるわけではないので、毎回キャッシュをスキップしないと古いデータが表示されてしまします。##回避策2:キャッシュを全削除する
“`Kotlin
//ディスクキャッシュをクリア
//バックグラウ
Androidアプリのクラッシュ対策にやったこと
先日GooglePlayにAndroidアプリをリリースしたのですが、1週間でおよそ20件のクラッシュレポートが上がってきました
レポートは20件ほどありましたが、およそ2件の対策をしましたのでメモしておきます解決の保証はできませんので悪しからず
# やったこと
### TextInputEditTextの実装修正
* noExcludeDescendantsを追加
* hint属性はTextinputLayoutにつける
* setOnEditorActionListenerを削除### MapViewのnullチェックを追加
“`MapActivity.kt
override fun onDestroy() {
try {
binder?.mapView?.onDestroy()
} catch (e : NullPointerException) {
// Send report exception..
}
super.onDestroy()
}
[Android]Vector Assetに枠線をつける方法
初めに
===
AndroidのVectorDrawableを利用することであらかじめ用意されている画像を簡単に利用できます。
そのVectorDrawableに枠線をつける方法をまとめていきます。VectorDrawableの作成
===
Android StudioのVector Assetでデフォルトで作成されるのは以下のようなxmlになります。“`xml
[Android]テストって何のためにやるのか分からないよね!(初心者の叫び) # 取り敢えず、分からんけども、テスト書いてみるか!!しかし・・・
最近、企業さんからいただいたアプリ作成の課題でテストをする必要があり、(別に書かなくても良いのですが、テストコードを書いたほうが品質に気を使っているのだなと評価されるので)
テストの学習を始めました。
早速、Android全書やその他記事諸々を読み始める。
しかし、それらは前提知識がないと読めないので、かなり難しい…
取り敢えず、クラス名の上にカーソルを合わせて、右クリックすると「Show Context Actions」と表示されるので、クリックし、そして、「Create Test」みないなものが出てくると思うので、それもクリックすると、そのクラスに対応したテストクラスができます。
超入門以外の記事を読んで、分かることはこれくらい笑
でもでも、諦めず自分に適したレベルの記事を読み漁りながら、この記事を完成させたいと思います。
### 実機テストで良くね?
まず、ここっすね。色々と記事を読み漁っていると、「なぜ、テストを書くのか?」「弊社では、テストを書く必要性がますます高まっています。」という文
Codelabsの通知機能の実装をViewModelを使って書き換えてみた
## はじめに
[Codelabs タスク1:基本的な通知を作成する](https://developer.android.com/codelabs/android-training-notifications#2)を参考に通知機能を実装してみた。
![notification.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/cde8bdd6-3beb-e4a8-3cb4-fff7d5b40f28.gif)## 通知機能の実装ポイント
### ①通知チャネルを作成する
* チャネルIDを用意
* 通知チャネルのカスタマイズ初期設定(APIレベル26以上に対して)
* チャネルの設定名称
* 通知の優先度(他にも通知が複数あったときの表示位置の優先度)
* バイブ、LEDの色設定
* チャネルの説明文
* 注意事項
* Android8.0(APIレベル26)より古いデバイスはカスタマイズできない。
* Android8.0(APIレベル26