- 1. Firebase Storageで処理がタイムアウトしないよー
- 2. 【Unity】UnityとAndroid SDK & NDK Toolsをインストールする時に「ダウンロードが失敗しました: Validation Failed」とエラーが出る
- 3. FirebaseとHerokuでエセAndroidフルスタック開発をした話
- 4. 【Flutter】in_app_purchaseのrestorePurchasesメソッドをAndroidで使った場合の注意点
- 5. 【Jetpack Compose】SwipeRefresh のプログレス表示を制御する際の注意点
- 6. 【Flutter】アラート(ダイアログ)のカスタムウィジェット作ったので共有しておきます
- 7. Jetpack Compose では同一方向にスクロール可能な Composable をネストできない
- 8. Flutterやーる(Windows10、Android)
- 9. RecyclerView【Android】【Kotlin】
- 10. ListAdapter Android Dev
- 11. UntiyでJDKがないとき
- 12. [Android]第二回Contextを掘り下げるの会
- 13. AppAuth for Androidを用いてHUAWEI IDログインを実装する
- 14. pure-python-adbでkillが動かない場合
- 15. スマホからSSH
- 16. AppAuth for Androidを用いてGoogleログインを実装する
- 17. AppAuth for Androidを用いてソーシャルログインを実装する
- 18. Android Studio(Arctic Fox/Bumblebee) + kotlin 1.6.10 でリリースビルドするとアプリの動作がおかしくなる件
- 19. Guide to app architectureからプラクティスを拾うメモ データレイヤー編
- 20. Binding Coroutine Job, SupervisorJob and viewModelScope to Android Lifecycle
Firebase Storageで処理がタイムアウトしないよー
##はじめに
Firebase Storage、アプリから便利に使ってますが、オフライン時に処理が全くタイムアウトしないことが発覚:joy:まあなんとかなったので、ご報告
##どうやる?
iOSは“`ObjC
FIRStorage *storage = [FIRStorage storage];
const int timeout=5; //5秒
storage.maxOperationRetryTime=timeout;
“`
これはdeleteするとき。Operation以外にUploadとDownloadもある。リトライだけど5秒で終わる。androidは
“`Java
FirebaseStorage storage = FirebaseStorage.getInstance();
final long timeoutMS = 5000; //5秒
storage.setMaxDownloadRetryTimeMillis(timeoutMS);
“`
なぜかdeleteはD
【Unity】UnityとAndroid SDK & NDK Toolsをインストールする時に「ダウンロードが失敗しました: Validation Failed」とエラーが出る
Uninty Hub から「Android SDK & NDK Tools」をモジュール追加しようとすると、
「ダウンロードが失敗しました: Validation Failed」とエラーが出て追加できず、
結構ハマってしまったのでその議事録です。# 結論
著者の環境では、ファイアウォールの設定で解決しました。コントロールパネル > システムとセキュリティ > Windowsファイアウォールによるアプリケーションの許可 > Unity Hub の項目をチェックして、「ドメイン / プライベート / パブリック」は環境に応じてチェック
再度、モジュールの追加するとインストールできました。
# 環境
– Windows10
– Unity Hub 3.0.1
– Unity 2020.3.27f1# エラー内容
UnityHubから、Unity 2020.3.27f1をインストールする時に、
「**Android SDK & NDK Tools**」にチェックをして、インストールしようとしました。![68747470733a2f2f71696974612d696d616
FirebaseとHerokuでエセAndroidフルスタック開発をした話
# まえがき
このたび、北海道札幌琴似工業高等学校 全日制 情報技術科を卒業することになりました。
今は学年末テストが終わって成績確定を待っている状況で、今後なにもなければ3/1日をもって卒業、進学することとなりました。弊校では三年時にすべての生徒が「課題研究」という名で、なにかしらものを作ります。
私の所属する班はAndroidアプリを作ることになりました。つまるところこの記事は、FirebaseとHerokuをバックエンドに持ったAndroidアプリを開発した話です。
主に成果物の概要と、振り返り、苦労をただただ書いていきます。技術的な内容は少ないかもしれませんが、Androidアプリ初学者の戯言と思っていただけると幸いです。# Contents
以下にこの記事内の記述内容について簡単にまとめます。
目次はハイパーリンクになっています。スマートフォンでご覧のかたや、Webブラウザのウィンドウサイズ等で右の目次が表示されていない方はご利用ください。– [作ったもの](#作ったもの)
– 実際の完成品について記述しています。
– [使った技術](#使った技術)
【Flutter】in_app_purchaseのrestorePurchasesメソッドをAndroidで使った場合の注意点
# はじめに
本記事は、Flutterの公式の課金ライブラリである [in_app_purchase](https://pub.dev/packages/in_app_purchase) の `restorePurchases` メソッドを、Androidで使った際のハマリポイントをご紹介します。# `restorePurchases` メソッドとは :mag:
いわゆる「復元処理」の際に使えるメソッドで、未消費の課金データを取得できます。
https://github.com/flutter/plugins/blob/a5b97ea9b37283167968755387e6ee4cc5f268d1/packages/in_app_purchase/in_app_purchase/lib/in_app_purchase.dart#L208
Android側の実装は下記のところで行っています。
https://github.com/flutter/plugins/blob/a5b97ea9b37283167968755387e6ee4cc5f268d1/packages/in
【Jetpack Compose】SwipeRefresh のプログレス表示を制御する際の注意点
Jetpack Compose にて`SwipeRefreshLayout`を実現したい場合、Accompanist の`SwipeRefresh`を使用するのが一般的です。
[Guide – Accompanist](https://google.github.io/accompanist/swiperefresh/)
以下は上記サイトに掲載されている例です。
“`kotlin
val viewModel: MyViewModel = viewModel()
val isRefreshing by viewModel.isRefreshing.collectAsState()SwipeRefresh(
state = rememberSwipeRefreshState(isRefreshing),
onRefresh = { viewModel.refresh() },
) {
LazyColumn {
items(30) { index ->
// TODO: list items
}
【Flutter】アラート(ダイアログ)のカスタムウィジェット作ったので共有しておきます
#アラート(ダイアログ)のカスタムクラス作ったので共有しておきます
Flutterモバイルのダイアログになります。
iOSとAndroidでネイティブっぽいダイアログが出したかったので
色々探した上、今後自分自身よく使うだろうからカスタムウィジェット作りました。
良かったら使ってください。フォントとかフォントサイズとかなるべく寄せてますが(主にiOS)
気に入らなければ適宜変更してください。参考にさせていただいた記事
https://dev.classmethod.jp/articles/flutter_platform_ui1/##Alertクラス
とりあえずクラス全文“`Dart:alert.dart
import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;
import ‘dart:io’;
import ‘package:google_fonts/google_fonts.dart’;class AlertButton {
final String
Jetpack Compose では同一方向にスクロール可能な Composable をネストできない
Android において、同一方向にスクロール可能なコンテンツをネストしたいというのはよくある話です。
具体的には、縦スクロール可能な`ScrollView`の中に`ListView`を置くという形ですね。
例えば以下のように、コンテンツ一覧を表示する Composable`ListContents`を作成し、それを複数表示する Composable`MultipleLists`を作成したいとします。
“`kotlin
@Composable
fun MultipleLists(contents1: List, contents2: List ) {
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
Text(text = “コンテンツ1”)
ListContents(contents = contents1)
Flutterやーる(Windows10、Android)
# はじめに
Flutterやっていくー# 開発環境
– Windows 10
– flutter# 実装
1.flutter(flutter_windows_2.8.1-stable.zip)のダウンロードhttps://storage.googleapis.com/flutter_infra_release/releases/stable/windows/flutter_windows_2.8.1-stable.zip
2.PATHを通す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/ae35663f-0f92-15d3-cb86-bf10b709d732.png)3.コマンドプロンプトを開く
~~~
C:\Users\good_>flutter doctor╔════════════════════════════════════════════════════════════════════════════╗
║
RecyclerView【Android】【Kotlin】
RecyclerViewの使い方を備忘録として残します
まずRecyclerViewはスケジュールアプリなどで使うようなデータセットを簡単に表示できるクラスでライブラリでもあります。
タスクの表などをリサイクルするので、複数あるタスクがスクロールをし画面の外になってもビューを消去せず画面にスクロールされた新しいタスクを表示し再利用します。
以下を実装します
・activity_main
activity_mainの中にRecyclerViewを実装・recycler_line.xml
RecyclerViewの1行部のレイアウトを作成・ViewHolder
recycler_line.xmlの1行分を保持する・RecyclerView.Adapter
1行分のデータをViewHolderに紐づける使い方
まずactivity_mainにRecyclerView実装します“`activity_main.xml
ListAdapter Android Dev
#目次
1. ListAdapterとは
2. サンプルコード
3. まとめ## 実装内容
##1. ListAdapterとは
“ListAdapter“‥**Recyclerview**を使用する際に,“ViewHolder“がどのように生成されるかを定義できるクラスで,コンストラクタの引数として**DIFF_UTIL**のオブジェクトを与えることできる.“ListAdapter“の“submitList(List)“を呼び出し,リストを渡しUIの要素として利用することができる.また,この時に渡したリストを, **DIFF_UTIL**が差分を求めることで,**notifydatasetchan
UntiyでJDKがないとき
ここにチェックいれていない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/63eb95ae-d9e6-0ac9-c47e-e3462bfd5b5e.png)参考
https://shibuya24.info/entry/jdk_not_found
[Android]第二回Contextを掘り下げるの会
#はじめに
前回は、ApplicationContextとActivityContextの違いについて掘り下げたので、今回はそもそもContextは何をしているのか?について掘り下げたいと思います。https://qiita.com/reo-androider/items/5cd82d02bd8de1ff14cc
#ドキュメントより
>Interface to global information about an application environment.
ドキュメント先輩のお言葉。
グローバル情報へのインターフェース的な意味があります。
ActivityもApplicationもContextを継承しているので、何となくわかったような気がする。#何をしているのか?
ApplicationContextとActivityContexgの二種類に分けてみていきます。###ApplicationContext
– Resourceへのアクセス
– Serviceを開始する
– Serviceをバインドする
– ブロードキャストを送信する
– ブロードキャストレシ
AppAuth for Androidを用いてHUAWEI IDログインを実装する
# 前置き
HUAWEI IDログインを実装するのに、よく使われているのは[HMS Account Kit](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/android-introduction-0000001098842325)を導入する方法です。しかし、この方法ではAndroid端末にHMS Coreがインストールされていることが前提条件になっています。幸い、HUAWEI IDログインではOAuth 2.0が提供されているので、[AppAuth for Android](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/app-auth-access-huaweiid-android-0000001050434521)を利用すれば、HMS CoreがインストールされていないAndroid端末でもHUAWEI IDログインが使えます。# AppAuth for Androidを利用するメリ
pure-python-adbでkillが動かない場合
# ライブラリを修正する
以下にある
%appdata%\..\Local\Packages\PythonSoftwareFoundation.Python.3.x_xxxxxxxx\LocalCache\local-packages\Python39\site-packages\ppadb\command\transport\\\_\_init__.py
の22行目くらい“`python
# cmd = “shell:{}”.format(cmd)
cmd = “shell,v2,TERM=xterm256color,raw:{}”.format(cmd)
“`こんな感じで使うと動くようになる
“`python
self.device.shell(“kill -9 `ps -ef | grep ” + option + “|grep -v grep | awk ‘{print $2}’`”)
“`# ついでに2重rootの許可とremountも実装するとこんな感じ
“`TEXT
diff –git a/ppadb/co
スマホからSSH
# はじめに
~ SSH connection from your Smart phone ~
スマホからサーバーコンソール、またはラズパイのようなデバイスへのSSH、思ってるより使えるよ!しかもremote.itでインターネット越しにつないじゃおうという記事です。# やりたいこと
AndroidまたはiPhoneを小さいながらもSSHコンソールとして使ってみたいと思います。remote.itを経由すれば携帯電波網でも、しかもポートフォワーディング無しでリモートホストに接続できます。
キーボード/マウスをつなぐとなお一層使いやすいですね。Androidならテキトーなキーボード・マウスでも認識するのでハードルは低くかなり使える環境になります。![SSHfromSmartPhone.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309124/405bda8e-7ee1-8b54-2c63-90b600fb8966.png)
# おすすめSSHクライアント
まずはスマホにSSHクライアントをイン
AppAuth for Androidを用いてGoogleログインを実装する
# 前置き
Android端末において、Googleログインの実装方法として、よく使われているのはGoogle Play開発者サービスを利用するやり方です。しかし、Google Play開発者サービスが無効になった場合、Googleログインができなくなります。また、国や地域、メーカーによって、そもそもAndroid端末にGoogle Play開発者サービスが入っていないことがあります。# AppAuth for Androidを利用するメリット
1. GoogleのOAuthでは、webviewをサポートしなくなりました。AppAuth for AndroidはChrome Custom Tabをサポートしているので、GoogleのOAuthを利用できます。(https://developers-jp.googleblog.com/2016/09/modernizing-oauth-interactions-in-native-apps.html)
2. Google Play開発者サービスがいりません。
3. 独自実装より楽です。# AppAuth for Androidの
AppAuth for Androidを用いてソーシャルログインを実装する
# 前置き
通常、ソーシャルログインを実装するのに、そのソーシャルログインのSDKを導入することが一般的です。しかし、この方法ですと、SDKに依存してしまうため、対象プラットフォームのSDKがなければ、導入ができなくなります。たとえば、– HMSのAndroid端末において、Google IDまたはApple IDでログインする場合
– HMS Coreが入っていないAndroid端末において、HUAWEI IDでログインする場合
– GMSのAndroid端末において、Apple IDでログインする場合上記の状況ですと、SDK導入によるソーシャルログインの実装では対応が不可能です。
また、SDKはプラットフォームごとに異なるため、ソースコードの管理において手間が増えます。
そこで、解決策としてOauthが出てきます。Oauthを利用すれば、プラットフォームとソーシャルログインSDKに依存せずに、ソーシャルログインを実装できます。
Android端末限定であれば、AppAuth for AndroidというOauthに特化したAndroid専用のSDKあり、それを使えば、
Android Studio(Arctic Fox/Bumblebee) + kotlin 1.6.10 でリリースビルドするとアプリの動作がおかしくなる件
みなさんいかがお過ごしでしょうか?
私は寒いのと暑いのが両方嫌いなタイプですので、早くあったかくならないかなあと思っているところです。
でもどうせ寒いなら雪が少しでもふればいいのに、とも思うわけです。
氷じゃだめなんです!雪が必要なんです!
そうとう寒いのに全然雪が降らなかったら、何か損した気分になりますよね?
(ならないか。おかしいな。あと、どうでもいいことかもしれませんが、最近のマイブームは公園にいってカモとコイに食パンをあげることです。
(餌あげていい場所です、これ大事。リストラされたサラリーマンみたいだな、って思わないように。カモとコイを比べると、素早さが武道家と戦士くらい違うので、だいたいカモが先に食べるんですよね。
そんな他人に一切忖度をしないカモが好きになった今日この頃です。
***
さて、今回のお題はリリースビルドについてです。
Android Studio(Arctic Fox/Bumblebee)、gradle、perf-pluginの組み合わせでリリースビルドすると、
アプリの動作がおかしかったり(、ビルドできなかったり)したときのメモです
Guide to app architectureからプラクティスを拾うメモ データレイヤー編
https://qiita.com/takahirom/items/8175752b86fd38105482
の続きです。
https://developer.android.com/jetpack/guide/data-layer?hl=en
## 用語整理
データレイヤーとは?
> **While the UI layer contains UI-related state and UI logic, the data layer contains application data and business logic. The business logic is what gives value to your app—it’s made of real-world business rules that determine how application data must be created, stored, and changed.**
アプリケーションデータとビジネスロジックを含む。ビジネスロジックはアプリに価値を与えるもので、ビジネスロジックはアプリケーシ
Binding Coroutine Job, SupervisorJob and viewModelScope to Android Lifecycle
#目次
[0.はじめに;](#0-はじめに)
[1.TLDR](#1-TLDR;)
[2.Coroutine Job](#2-Coroutine Job)
[3.SupervisorJob](#3-SupervisorJob)
[4.viewModelScope](#4-viewModelScope)
[5.おわりに](#5-おわりに)#0-はじめに
株式会社オプティマインドのGoです!When developing android apps, it is often common for beginners to be confused about how the kotlin coroutine integrated with android lifecycle. In this article I will explain the relationship between Coroutine Job, SupervisorJob and viewModelScope using a simple example (I will use Hilt as DI tool as