- 1. Dagger Hiltでよくハマるミス
- 2. PopupMenu の要素を動的に追加する
- 3. 【Android】 Flipperで簡単にAPIモック環境を作成する
- 4. UiAutomatorで表示しているブラウザのURLを取得する
- 5. [Rails]Webアプリケーションしか作った事ない僕が、ネイティブアプリケーションを作りたい
- 6. Pepper SDK入門(36) LocalizeAndMapでPepper専用地図を得る
- 7. MacのPCでADBを使えるようにする方法
- 8. Androidアプリのダウンロード数をBigQueryで連携・取得する方法
- 9. Flutterでのバックグラウンド処理のスケジューリング実装が難しいというお話
- 10. ARでクリスマス気分を味わってみた!
- 11. Navigation Componentのdeep linkの仕組みを調べて見た
- 12. Android StudioでEspressoを使ったUIテストのやり方
- 13. 【Android】PlayStore遷移時のActivityNotFoundException
- 14. 家にきた赤い服のその人は、本当にサンタですか? 〜tflite modelを作って判別しよう〜
- 15. Android AppLinksについて
- 16. だからボクはオブジェクト指向が使いこなせない Android/Kotlin編
- 17. DialogFragmentで5分刻みのタイムピッカー
- 18. Play Billing LibraryでAndroidの課金実装してみた
- 19. Androidアプリのログが正しく送信されていることを担保する
- 20. ヒーローズ・リーグ2021「カフェのサイズが覚えられない」
Dagger Hiltでよくハマるミス
Dagger Hiltでよくハマるミス
“`
appモジュール -> moduleA -> moduleB
“`という依存関係で、
“` kotlin
// moduleB
interface Hoge
class HogeImpl : Hoge@Module
@InstallIn(SingletonComponent::class)
abstract class BModule {
@Binds
abstract fun provideHoge(impl: HogeImpl): Hoge
}// moduleA
class UseCase @Inject constructor(
private val hoge: Hoge
) {
}// appモジュール
class HogeViewModel @Inject constructor(
private useCase: UseCase
) : ViewModel() {
}
“`こんな感じのDIをしていた場合に、appモジュールのbuild.gradleでmoduleBへのimpl
PopupMenu の要素を動的に追加する
わざわざ記事にすることでもないかもしれないですが、 PopupMenu を使った際に menu リソース以外からも要素を作成する方法の備忘録を自分ように残します。
## やり方
以下のコードの `popupMenu.menu.add(“文字列”)` を行うことで好きな数だけ要素を増やすことができます。“`
val popupMenu = PopupMenu(this, target)
popupMenu.menu.add(“テスト1”)
popupMenu.menu.add(“テスト2”)
popupMenu.menu.add(“テスト3”)
popupMenu.show()
“`
【Android】 Flipperで簡単にAPIモック環境を作成する
## はじめに
Facebookが作ってる[Flipper](https://fbflipper.com/)というデバッグツールで、簡単にAPIモック環境を作成することができたのでまとめておきますFlipper導入は公式サイトを参考にNetwork Pluginを設定するとネットワークのトラフィックが参照できるようになります。
– Flipper
– https://fbflipper.com/docs/getting-started/android-native/
– Network Plugin
– https://fbflipper.com/docs/setup/plugins/network/## モックサポートを有効にする
FlipperのNetwork PluginにはOkhttp統合用のFlipperOkhttpInterceptorが用意されています。
そのFlipperOkhttpInterceptorには、isMockResponseSupportedというパラメータがあり、デフォルトだと無効(false)なのですが、こちらを有効(true)に設定
UiAutomatorで表示しているブラウザのURLを取得する
## 結論
“`kotlin
uiDevice.findObject(UiSelector().resourceId(“com.android.chrome:id/url_bar”)).text
“`## 概要
UiAutomatorを利用した検証で遷移したブラウザページのリンクを取得したい
結論項にある方法で取得が可能## 参考
https://stackoverflow.com/questions/48112983/how-to-verify-a-chrome-tab-url-by-using-ui-automator
[Rails]Webアプリケーションしか作った事ない僕が、ネイティブアプリケーションを作りたい
#はじめに
初学者の私が、2ヶ月でRailsを学びWebアプリケーションを作れるようになりました。
IOSでリリースをするに至って
まずどのような知識が必要かをまとめる記事になっています。##React Native
React Nativeは、iPhoneとAndroidどちらでも動かすことができる開発用フレームワークです。
JavaScriptで開発することができるため、JavaやSwiftが書けないエンジニアでも、React Nativeを使えばアプリ開発ができます。
React Nativeの開発言語は、JavaScriptです。そのため、JavaScriptのコードを書ければAndroidとiOSの両方で開発が可能になるフレームワーク“`
Reactに慣れている人にとっては学習コストの低いReact Native
ネイティブエンジニアには、逆に学習コストが高くなると考えられます。
“`
##FlutterFlutterはGoogleが作ったモバイルアプリ用のフレームワーク。
「Dart」という言語を使って開発をしていきます。“`
モバイルアプリ開発
Pepper SDK入門(36) LocalizeAndMapでPepper専用地図を得る
#はじめに
PepperはLocalizeAndMapアクションとLocalizeアクションによって周辺環境の地図を作成し、移動しても自分の相対位置を保持します。“`java
//アクションをビルドする
LocalizeAndMap localizeAndMap = LocalizeAndMapBuilder.with(qiContext).build();//非同期にアクションを実行
localizeAndMap.async().run();//LocalizeAndMapの実行を保存
private FuturelocalizationAndMapping;
“`つまりLocalizeが実行されていれば、Pepperを特定の位置に配置して周辺をネズミ花火のように動き回ってもらってもPepperは自分の立ち位置を見失いません?
LocalizeAndMapの使い方は以下の通りです↓“`java
//アクションをビルド
LocalizeAndMap localizeAndMap = LocalizeAndMapBuilder.with(qiCon
MacのPCでADBを使えるようにする方法
今回は自分は良くパソコンをお借りして仕事することがあり、その度にADBを入れているのですが、毎回調べている為、ここにまとめておこうと思いました。
# ADBとは
Android Debug Bridge(ADB) の略称です。
android開発をする際に便利な機能を使えるようになります。# 始めに
今回はMacのパソコンで、AndroidStudioを既にインストールしてある状態から始めます。# Android SDK locationのファイルパスを確認する
AndroidStudioを開いてPreferencesを開きます。![スクリーンショット 2021-12-26 15.34.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/bd5f376e-cd7d-87f7-3c12-e8df6cf60af2.png)
SDKと検索するとAndroid SDKが出てきます。
![スクリーンショット 2021-12-26 15.44.11.png](https://q
Androidアプリのダウンロード数をBigQueryで連携・取得する方法
# はじめに
これまで、Androidアプリのインストール数を確認するときは、Google Play Consoleを開き、
アプリを選択しダウンロード数を**手動**でスプレッドシートに転記させていた。これはエンジニアとして許せないと思い、この面倒な作業をなくすために、
Google Play から取得できるアプリのインストール数をGBigQueryに毎日自動転送するよう設定した。
今日はそのAndroidアプリ(GooglePlay)をBigQueryに連携させた設定手順をアウトプット。
# GooglePlayからBigQueryへの転送手順
公式ドキュメントはこちら
https://cloud.google.com/bigquery-transfer/docs/play-transfer?hl=ja#before_you_begin
### 1/ 転送手順を始める前に
1. [BigQuery Data Transfer Service](https://cloud.google.com/bigquery-transfer/docs/enable-trans
Flutterでのバックグラウンド処理のスケジューリング実装が難しいというお話
## 初めに
iPhone純正アラームのような規定時刻&曜日に通知を送って音を鳴らす目覚ましアラームアプリを、Flutterにて個人開発しています。
しかし、作り始めてみたところ思った以上に実装難易度が高く、調べた中で得た知見を共有します。バックグラウンドって何度も書くのアレなので以降**BG**とします。また、いやいやこれでいけるんじゃないですか?みたいなコメントは大歓迎です。
## TL;DR (忙しい人用)
– 現状アプリkill状態でのBG処理のスケジューリング実装は**MethodChannel**を用いてOS毎にコードを書く必要がありそう…?(調査中)
– 調査段階の中途半端な状態で投稿すいません。
– アラームアプリ等、BG処理のスケジューリングは**茨の道**。
– 規定時刻&曜日のローカル通知は[flutter_local_notifications](https://pub.dev/packages/flutter_local_notifications)の[zonedSchedule](https://pub.dev/packages/flut
ARでクリスマス気分を味わってみた!
こんばんは!ZOZOTOWNでAndroidエンジニアをやっているマサと申します。
この投稿はZOZO Android Adventカレンダーのその2の25日目(最終回)の記事となります。
この記事ではAndroidのアプリ上でAR(拡張現実)を使用してクリスマスツリーを設置する方法を共有したと思います。
キッカケは、僕が普段からARに関連するアプリを(Pokemon Go,マップアプリ)使用する機会があり、ふとAndroidでARアプリを作成する方法が気になったからです。また、ちょうど投稿日がクリスマスということもあり、今回はARでクリスマスツリーを設置してみようと思います!
## はじめに
この記事は主に以下のような読者を対象として想定して書いてみました。他にも様々な実装手段やツールがあると思いますので、あくまで参考程度にしていただければと思います。この記事にはどういう特徴があるの?
– OpenGLについてあまり詳しくないけどARをAndoridで書いてみたいまたは実装方法を知りたい
– Andoridを普段JavaまたはKotlinを使用してAndroidStud
Navigation Componentのdeep linkの仕組みを調べて見た
Navigation Componentでは起動した時点でFragmentのバックスタックが作られるDeep Linkという機能があります。
リファクタリング中の既存の動作を維持しつつnavigationを適用していたときに、応用の仕方が分からず、どうやって実装されているのか、調べて見ることにしました。# Deep Linkの起動方法
Deep Linkには暗黙的deep link (implicit deep link) と明示的deep link (explicit deep link) の2種類があります。まずはそれぞれの起動方法がどうなっているのか調べて見ましょう。
## 暗黙的deep link
暗黙的deep linkではdeep linkにuriを設定して、そのuriで起動された時にdeep linkが発動するようになります。呼び出しの仕組みはuri指定のIntentなので、呼び出し側はなにも複雑なことはしていません。
設定の仕方は、navigation graphにdeeplinkタグを設定
“`xml:nav_graph.xml
Android StudioでEspressoを使ったUIテストのやり方
#はじめに
**Espresso**はAndroid StudioのUIテスト(画面のテスト)が出来ます。その使い方を紹介します。
#今回は・・・
以下のようなアプリケーションがあるとします。“`java:MainActivity.java
package com.websarva.wings.android.uitest1;import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {
private TextView textView;
private EditText editText;
private String text;@Override
pro
【Android】PlayStore遷移時のActivityNotFoundException
クラッシュリティクスにこんな報告が上がってきました。
“`
Fatal Exception: android.content.ActivityNotFoundException
No Activity found to handle Intent { act=android.intent.action.VIEW dat=https://play.google.com/… pkg=com.android.vending }
“`PlayStoreへのIntentが失敗している?
中華スマホとか、Kindleならわかるが対象端末は普通にキャリアで売られているものばかり。。## 問題はこれかも
![Screenshot 2021-12-02 135349.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429030/3fadf9c1-f1f0-0d2f-6c91-f7375e3ceeaa.jpeg)
Disabledにして、強制アップデートダイアログを叩いてストア遷移しようとすると落ちまし
家にきた赤い服のその人は、本当にサンタですか? 〜tflite modelを作って判別しよう〜
## メリークリスマス
アドベントカレンダーのネタを探してたら、kaggleで [IS THAT SANTA?](https://www.kaggle.com/deepcontractor/is-that-santa-image-classification) というデータセットを見つけてしまったので、on-device向けのサンタ識別モデルを作成することにしました。
## 準備
自分でモデルを組んでも良かったんですが、ここはお手軽に[TensorFlow Lite Model Maker](https://www.tensorflow.org/lite/guide/model_maker)を使うことにしました。
TensorFlow Lite Model Makerは転移学習を用いてtensorflow liteのモデルを作成できるライブラリで、少ないデータ量で精度が高いモデルを作成することができます。
また、モデル作成の実行環境は、[Colaboratory](https://colab.research.google.com/notebooks/welcome.ipyn
Android AppLinksについて
この記事は [ZOZO Advent Calendar 2021](https://qiita.com/advent-calendar/2021/zozo) カレンダー2の25日目です。
## AppLinksとは
あるURLをIntent FilterとしてアプリのManifestファイルに定義することで、定義したURLからアプリを起動することが出来るようになりますが、httpやhttpsといったschemeの場合は反応するアプリも多いですし、毎回目的のアプリを選択するのは面倒です。AppLinksに対応することで、特定のURLに直接アプリを関連付けることが出来、前述のような煩わしさが全くなくシームレスにアプリを起動することが出来るようになります。
公式ドキュメントでは、さらに詳しく解説されています。
https://developer.android.com/training/app-links?hl=ja#app-links-vs-deep-links
正直、新しいトピックではありませんが、Android 12で加えられた変更点も交えて書いていきたいと思います。
#
だからボクはオブジェクト指向が使いこなせない Android/Kotlin編
#はじめに
本記事は、Android/Kotlin開発において、オブジェクト指向を使いこなしたい、という方に向けた記事です。
※この記事は「[だからボクはオブジェクト指向が使いこなせない Android/Java編](https://qiita.com/argama147/items/dbd6210d4b0f570ad295)」をAndroid/Kotlinで書き直したものです。私が10年近くAndroidアプリ開発に関わってきて思うのが、開発現場でオブジェクト指向らしいコードを書けるプログラマーは、残念ながら全体の2割にも満たない、ということです。(あくまで私個人の感想です)。
逆に言えば、オブジェクト指向らしいコードを書けるようになるだけで、開発現場で重宝される人材になれます。Androidの最新ライブラリの使い方の勉強をすることも大切ですが、開発現場でより即効性があり、かつ、Android以外のプログラミングにも応用できる、潰しのきく技術、それがオブジェクト指向らしいコードを書く技術です。##どうしたらオブジェクト指向らしいコードを書く技術を身につけられる?
※具体的な
DialogFragmentで5分刻みのタイムピッカー
## はじめに
記事にするのを1年間忘れてたので、備忘録といっても今更役に立つやら。
一般的な手法なのかわかりませんが、
「5分刻み TimePicker」とかで検索すると、
Android標準のタイムピッカーを改造する例がちょいちょい見つかります。しかしこのタイムピッカーが、
API30以上がターゲットの場合にクラッシュするようになりました。https://developer.android.com/about/versions/11/non-sdk-11
APIへのアクセスが禁止されたものの中に、TimePickerがあります。
今は新しいTimePickerが提供されているので、そっちを使ってねってことみたいです。でもダイアル式のタイムピッカーが使いたいので、
クラッシュ原因以外の部分だけ切り取って、それっぽいものに復元しました。画面表示する都合で、
最終的に取得できる時間と分を数値にしています。## タイムピッカー
“`Java:TimePickerDialogFragment.java
package com.example.myapplicati
Play Billing LibraryでAndroidの課金実装してみた
# はじめに
こんにちは。
昨年に引き続きLivesense Advent Calendarで記事を書かせていただくことになりました。
今回は「Play Billing Library」を使ったAndroidの定期購入課金実装の話をしようと思います。# Play Billing Library
2017年ごろにリリースされた、アプリ内課金を実現するためのライブラリです。
課金サービスとの接続の管理や通信処理、課金を行うためのモーダル表示をすることができます。このライブラリは2年ごろにバージョンアップが行われ、その度に古いバージョンの足切りがあり課金ができなくなるため、バージョン管理には気をつけましょう。
https://developer.android.com/google/play/billing/integrate?hl=ja
# 課金処理の流れ
1. アプリで課金サービスへの接続を行う
1. 接続完了後、ユーザー操作による購入のタイミングで課金モーダルを表示する
1. モーダル内の「定期購入」をタップする
1. Google Play側へ支払いが行われ、レシート情報
Androidアプリのログが正しく送信されていることを担保する
こんにちは。NewsPicks Androidアプリエンジニアの sefwgweo です。
今回は[こちらの記事](https://tech.uzabase.com/entry/2021/05/21/094101)で書かれているログまわりについて、掲題の通りAndroidの事例として紹介します。なお、概要等についてはリンクの記事に全て詳細に書いてあるのである程度割愛し、本記事ではAndroidで工夫した部分に焦点を当てていきます。
## ログE2Eテストの大まかな仕組み
AndroidでUIテストということでJUNIT4系とEspresso3系を用いて実装しました。
テストコードにはテスト対象のログが送信されるときの画面操作を実装しています。例えば、ニュースフィードで記事を表示する、記事をタップする、といった操作です。
ログ送信のエンドポイントはスタブ化していて、テスト時のログが本番環境に送信されないようにしています。さらに、ログリクエストの内容をあとで検証できるように、スタブ化する過程でリクエスト内容をファイルに一時保存しています。
## ログE2Eテストの実装の詳細
ヒーローズ・リーグ2021「カフェのサイズが覚えられない」
# はじめに
ヒーローズ・リーグ2021へ「[カフェのサイズが覚えられない](https://protopedia.net/prototype/2722)」を応募しました。– ダイヤモンドさんの「スタバ」ネタが好き。
– チェーン店のカフェのサイズはお店毎に呼び方がちがって覚えにくい。
– 体でサイズを説明しながら楽しくチェーン店のカフェサイズを覚えたい。![コンテスト応募_タイトル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543183/640f24c0-baaa-730c-d082-d912a5c55d0c.png)
私がダイヤモンドさんのネタをやりたかっただけとも言えます。
# 応募した作品
元ネタを見てからアプリのデモ動画見ると、よりアプリを楽しめます。
[カフェのサイズが覚えられない](https://protopedia.net/prototype/2722)元ネタはこちら
漫才『スタバ』/コーヒーのサイズ おもしろ荘優勝ネタ/ダイヤモンド(ダイヤモンドお笑いチャンネル