- 1. THETAプラグインでスリットスキャンを試す
- 2. strings.xmlを用いて、Androidアプリを多言語化してみよう!
- 3. Espressoを使ったUIテストで、Sleepなしで非同期処理が完了するまで待つ(Rx編)
- 4. Android Studioでエミュレータが起動できないときの解決法
- 5. MotionLayoutのKeyCycleを使ってアニメーションを実装してみた
- 6. ネイティブ開発・Flutter開発を通じて感じた事。
- 7. DataStoreの保存形式をProtocol Bufferを使いつつJSONにする
- 8. GitLab CI + Docker で Android のインストゥルメント化単体テストを実行する
- 9. SurfaceViewをやめてOpenGL ES 2.0/3.0で描画しよう(2D)
- 10. WEBアプリとネイティブアプリの違い
- 11. HiltでMediaBrowserServiceCompatに依存関係を注入する
- 12. AndroidのMediaPlayer.seekTo()の機種依存バグに困ったお話+SoundPoolでのSE再生バグの解決
- 13. [Android] ブラウザを同じタブで開く方法(Chrome以外にも対応)
- 14. AndroidスマホでElixir/Phoenix起動っ!…ほいでUbuntuこそが世界最強のコンテナ(プリコンパイルドElixir導入付き)
- 15. 【今更ダヨ!】APILevel24におけるカレンダーじゃないDatePickerDialogの作り方
- 16. KotlinでSSLクライアント認証を実現する
- 17. エミュレーターとBurp SuiteでAndroidアプリのHTTP通信をキャプチャする(Android7.0以上対応)
- 18. 【個人開発】プライバシーポリシー、、、めんどくさいですよね?【iOS/Android】
- 19. 【Android】2020年からの MVVM【実践】
- 20. [Android]Firebase Storage + Glide
THETAプラグインでスリットスキャンを試す
この記事は [RICOH THETA Advent Calendar 2020](https://qiita.com/advent-calendar/2020/theta) の23日目の記事です。
アドベントカレンダーが終わっても、皆さんが作るTHETA関連(特にTHETAプラグイン)記事をまってます!
(過去の空箱を埋めていただくのも大歓迎です!)## はじめに
リコーの @KA-2 です。
弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA VやRICOH THETA Z1は、OSにAndroidを採用しています。Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます(詳細は本記事の末尾を参照)。今回は、「こんな実験してみたよ」くらいの内容です。
動画はサマにならないけど、静止画としたらなんとか“それっぽく”なったかも。~動画ツイートを貼り付けします~
strings.xmlを用いて、Androidアプリを多言語化してみよう!
#はじめに
こんにちは、どぎーです。
皆さんはstrings.xmlを活用していますか?
今回は、strings.xmlを用いて簡単にアプリを多言語対応させるTipsを紹介します。#開発環境
– AndroidStudio 4.0.1#手順
今回は、お手元のアプリを日本語と英語に対応させてゆきます。##日本語用のstrings.xmlを用意する。
まずはProjectツールウィンドウの表示を、AndroidビューからProjectビューに変更しましょう。
その後、resフォルダに`values-jaフォルダ`を追加しましょう。
このフォルダで、日本語表記で使用するデータを管理します。
![スクリーンショット 2020-12-23 0.41.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933349/c2a7ff0f-599f-72ea-26f3-b1239d666797.png)
![スクリーンショット 2020-12-23 0.41.42.png](https://qiita-ima
Espressoを使ったUIテストで、Sleepなしで非同期処理が完了するまで待つ(Rx編)
アプリのE2Eテストするとき、通信が完了するまで待つ必要がある。たとえば、E2Eテストにログイン操作があるとき。通信を待たないとログインの通信中にログイン後の画面を検証したり操作したりするので、当然テストは失敗する。
通信などの非同期処理をRxで実行しているとき、テストを待機させる方法を記述する。Androidアプリ、Espressoで使っているときの話。
## 実現手順
### 基本的な考え方– IdlingResourceを使う
– プロダクトコード内のRxの非同期処理1つ1つにIdlingResourceを使った処理は仕込まないRxJavaPlugins#setScheduleHandlerを使うと実現できる。Rxの全非同期処理の実行前後に、独自の処理を仕込めるので、それを利用する。
## Step0. IdlingResourceの導入
大体Espresso入れるときに、セットで導入しているとは思うが、一応示しておく。
“`gradle:app/build.gradle
dependencies {
// ここではプロダクトコードでIdlingRes
Android Studioでエミュレータが起動できないときの解決法
Android開発を始めたらAVDが起動しなくて沼ったのでメモ代わりに残す。
# 症状
AVDを起動しようとすると「Android emulator gives error “Resetting for cold boot: emulation engine failed” and exits」あるいは「The emulator process for AVD Pixel_2_API_29 was killed.」というエラーメッセージが出て起動できない。
が、古めのAPIを使っているAVDなら起動する。# 解決法 (Intel CPU前提)
Tools > SDK Managerを起動して、「SDK Tools」からIntel x86 Emulator Accelerator(HAXM)にチェックを入れてダウンロードorアップデートする。
もしHAXMのインストールが失敗するようなら、自分の使用しているCPUがHAXMに対応しているかを確認しBIOSでIntel Visualization TechnologyがOnになっているか確認する。
そしてPCを再起動してもう一度試して
MotionLayoutのKeyCycleを使ってアニメーションを実装してみた
この記事は、[and factory Advent Calendar 2020](https://qiita.com/advent-calendar/2020/andfactory)の**23日目**の記事です。
昨日は[@cpp0302](https://qiita.com/cpp0302)さんの「[GoのDIライブラリ google/wire でモックを使う場合のベストプラクティス](https://qiita.com/cpp0302/items/3c5254b840df6af24c10)」でした!## 試したこと
– クリックすると画像が揺れるアニメーションをMotionLayoutのKeyCycleを使って実装してみました
– 参考にしたアニメーション
## 環境
– Android Studio 4
ネイティブ開発・Flutter開発を通じて感じた事。
## はじめに。
筆者は最近異業種からエンジニアに転職したばかりで業務歴は三ヶ月程初学者です。
初学者なりにネイティブ開発とFlutter開発を通して感じたことを書いてみました。
コードベースの解説と言うよりは感想が主になりますので、
Fluttrのコード解説がみたい方は
[KBOYのFlutter大学 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/kboyflutteruniv)
こちらの他の記事の方が参考になるかと思われます。## Flutterのメリット・ネイティブ開発のメリット
### Flutterのメリット
* 一度の開発でandroid,ios2つのアプリをリリースする事ができる。
* android,iosで共通の見た目のアプリを開発することができる。
* ViewをDartコードで完結して開発できる(storyboardやxmlを使わずに済む)
* 宣言的UIフレームワークで直感的にViewを書くことができる。
* ホットリロードと呼ばれる機能を使う事で、コードを更新しても再ビルド
DataStoreの保存形式をProtocol Bufferを使いつつJSONにする
# はじめに
Jetpack DataStoreはSharedPreferenceに代わるデータ保存フレームワークです。
[公式ページを眺めているだけではわからないJetpack DataStoreのあれこれ](https://qiita.com/que9/items/54c60d9cbca1dfaffdbf)
以前上記の記事を書いたときに、
> 保存形式がprotobufのバイナリーであり、JSONやYAMLのように気軽に人間が読み書きできない(PreferenceDataStoreであっても!)
と書いたのですが、これは正確ではないというかほとんど誤り?みたいな認識だったので訂正したいと思います。
結論からいうと、 **protobufを使いつつもJSON化は楽にできる** 。# proto3はJSON変換を保証している
[protobufのリファレンス](https://developers.google.com/protocol-buffers/docs/proto3#json) には、
> Proto3 supports a canonical encodi
GitLab CI + Docker で Android のインストゥルメント化単体テストを実行する
[GitLab Runner]: https://docs.gitlab.com/runner/
[Docker]: https://www.docker.com/
[Android Emulator Container Scripts]: https://github.com/google/android-emulator-container-scripts
[Docker for Android SDK 30]: https://hub.docker.com/r/androidsdk/android-30[^1]: [インストゥルメント化単体テストを作成する | Android デベロッパー | Android Developers](https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests?hl=ja)
[^2]: [Start containers automatically | Docker Documentation](https://docs.dock
SurfaceViewをやめてOpenGL ES 2.0/3.0で描画しよう(2D)
この記事は、[Android Advent Calendar 2020](https://qiita.com/advent-calendar/2020/android) の21日目の記事です。
丁寧にまとめてたら最後は執筆中になってしまいました :bow:
# はじめに
Androidで図形表示と画像表示を始めると、最初はまず [Canvas](https://developer.android.com/reference/android/graphics/Canvas) を使うと思います。そうして、Canvasでの描画に限界を感じると [SurfaceView](https://developer.android.com/reference/android/view/SurfaceView) を使い始めると思います。ある程度までは「SurfaceViewは早い!」で通じますが、それでもやっぱり遅いことはあります。そこで登場するのがグラフィックスAPIの[OpenGL](https://www.opengl.org/)です。`OpenGL`とは、 **グラフィックス表示をGPUを
WEBアプリとネイティブアプリの違い
この記事はGlobal Mobility Serviceの社員による、[Global Mobility Service Advent Calendar 2020](https://qiita.com/advent-calendar/2020/global-mobility-service) 21日目の記事です。
#はじめに
未経験のAndroid向けアプリ開発を携わる事になった中で、Android専用のネイティブアプリが良いのか
WEBアプリでも良いのか気になった為、双方のメリット・デメリットを調査しました。#なぜAndroid?
弊社はフィリピン・カンボジア・インドネシアの各国で、貧困層を救うといったビジネスを展開していますが
今回、韓国現地法人向けと言う事で使用割合を調べてみました。
![スクリーンショット 2020-12-20 11.19.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/418460/ffc76d68-b225-075c-cfd8-4a64f1cc9d67.png)
20
HiltでMediaBrowserServiceCompatに依存関係を注入する
`MediaBrowserServiceCompat` へ `@AndroidEntryPoint` を使って依存関係を注入しようとすると、以下のエラーがでてしまいます。
“`
エラー: MediaBrowserServiceCompatにアクセスできません
androidx.media.MediaBrowserServiceCompatのクラス・ファイルが見つかりません
“`これを解決するために、新たに `EntryPoint` を定義します。
“`kotlin
@EntryPoint
@InstallIn(ApplicationComponent::class)
internal interface MediaBrowserServiceCompatInterface {
fun getHoge(): Hoge
}
“`そして、 `MediaBrowserServiceCompat` 内でこれを使って注入します。
“`kotlin
EntryPoints.get(applicationContext, MediaBrowserServic
AndroidのMediaPlayer.seekTo()の機種依存バグに困ったお話+SoundPoolでのSE再生バグの解決
Link-UのAndroidアプリエンジニアの大谷です。
面白みのある話ではないですが非常に難儀した`MediaPlayer`の機種依存バグへの対応を備忘録代わりに書こうと思います。(おまけの`SoundPool`の話は末尾にあります)
いつか誰かが似たように困ったとき参考となれれば幸いです。
ちなみに筆者は入社後プログラミングを始めて3年足らずのひよっこですので疎い面も多く、おかしな点などあればご指摘願います……。#検証端末抜粋
* Google **Pixel** 3a : Android 10
* SHARP **AQUOS** Sense SH-01K : Android 9
* Samsung **Galaxy** A20 : Android 9
* Sony **Xperia** XZ1 : Android 8#経緯
新規のプロジェクトで音声再生が必要となり、Androidに標準搭載であり拡張も楽なMediaPlayerクラスを使って実装を進めることにしました。
[Android Developers : MediaPlayer](https://develope
[Android] ブラウザを同じタブで開く方法(Chrome以外にも対応)
今開発中のアプリでは、アプリとブラウザを行ったり来たりする機能がありますが、単純に実装したところアプリから対象のWebページをブラウザで開く際に毎回新しいタブで開かれてしまったので、解決法を探ってみました。
ネット上ではChrome限定で行う方法などしか見つかりませんでしたが、もうちょっと汎用的な方法を見つけましたので、こちらに残しておきます。
# 環境
– Pixel 3a (Android 11)
# 方法
こんな感じで
“`kotlin
fun openBrowser(url: String) {
val intent = Intent(Intent.ACTION_VIEW).apply {
data = Uri.parse(url)val resolveInfo = context.packageManager.resolveActivity(this, PackageManager.MATCH_DEFAULT_ONLY)
val packageName = resolveInfo?.activityInfo?.packageNam
AndroidスマホでElixir/Phoenix起動っ!…ほいでUbuntuこそが世界最強のコンテナ(プリコンパイルドElixir導入付き)
[Elixir Digitalization Implementors/fukuoka.ex/kokura.ex](https://fukuokaex.connpass.com/)のpiacereです
ご覧いただいて、ありがとうございます :bow:昨夜、[ラズパイでElixir/Nervesを動かすコラム](https://qiita.com/piacerex/items/98e1bde676263f5f9f81)を書いた後、
「もしかしたら、同じエッジAndroidスマホでも、Elixirって動かせるんじゃね?」
ってふと思い立ち、攻略していったところ、成功しました:confetti_ball:
今回は、そのノウハウをシェアします(あと、ひさびさに軽いノリです)
### :anchor::anchor::anchor: Advent Calendar、fukuoka.ex1位、Elixir4位ヽ(=´▽`=)ノ:tada: :anchor::anchor::anchor:
今週で終わりのAdvent Calendar、Elixir系がランキ
【今更ダヨ!】APILevel24におけるカレンダーじゃないDatePickerDialogの作り方
やっほー
今をときめく最新技術、色々便利で楽しそう!
だが今回は今更APILevel24におけるDatePickerDialogの作り方のお話だ!
所謂古のお話ってやつだ。#DatePickerDialogって知ってるか?
DatePickerDialog、こいつぁ日付を選択したりするときに用いる。
ビャっとダイアログが出てきてイカしたカレンダーが出てきて?さっと日付を選択するかっちょいい奴だ。…だがこいつには弱点が有る。
`年` の選択がめちゃくちゃ苦手なのだ。
実は `年` の部分をタップすると、直接 `年` の選択ができるようになってるのだが、誰も気づかなかったようだ。MaterialDatePickerでデザインが変わってその辺りの弱点も解消されつつ有る。とは思うけれども。
あぁ、ちなみにコレがMateriDatePickerでのDatepickerだね。やっつけ仕事でつけた赤い枠に注目してほしい。ちゃんと `年` の選択ができるっぽい見た目に変わってる。
知ってた?昔のカレンダー表示なDatepickerってね、年の部分選択できるんだぜ?
|Material
KotlinでSSLクライアント認証を実現する
## はじめに
[ラクス Advent Calendar 2020](https://qiita.com/advent-calendar/2020/rakus)の21日目の記事です。
投稿日と研修の日が見事に重なった@rs_tukkiがお届けします。昨日は@ijikeman さんの[メール送信サーバ負荷試験の為、受信サーバのI/Oを0にした話](https://qiita.com/ijikeman/items/a6ae2f6c997323080a3d)でした。
さて今回ですが、**「AndroidアプリでもSSLクライアント認証がしたい!(某アニメ風味)」**という時のためにKotlinでの実装方法についてお話します。
## SSLクライアント認証について
まずはSSLクライアント認証の仕組みについて軽く確認しておきましょう。
一般的なSSL/TLS通信の場合、クライアント(接続元)がサーバ(接続先)から渡された電子証明書を確認することで、そのサーバが第三者によって認証された接続先かどうかを認証するプロセスが必要となります。
![非クライアント認証.png](https
エミュレーターとBurp SuiteでAndroidアプリのHTTP通信をキャプチャする(Android7.0以上対応)
# 概要
バグハンティングなどでAndroidアプリのHTTP通信をキャプチャする必要があるかと思う。そこで本記事ではAndroidエミュレーターのNoxPlayerとBurp Suiteを用いた環境を構築する。
本記事ではmacOSとNoxPlayerを使用することを前提としているが、それ以外の環境でもAndroidエミュレーターとBurp Suiteを用意できれば同様の方法で環境構築できる(と思う)。
Android7.0からは証明書の扱い方法の変更により、Burp Suiteのクライアント証明書のインストール方法に一手間加える必要がある。本記事ではその設定にも対応する。
# 環境
– macOS Catalina 10.15.7
– Homebrew 2.6.0
– NoxPlayer 3.0.5.0
– Burp Suite Community 2020.12.01# 手順
## 0. 準備
– homebrew-caskでNoxPlayerをインストールする
– Burp Suiteをインストールする
– Burp Suiteの証明書(`cacert.der
【個人開発】プライバシーポリシー、、、めんどくさいですよね?【iOS/Android】
# 個人開発で一番めんどくさいこと
プライバシーポリシーの作成とホスティングですね!個人開発で一番めんどくさい部分、プライバシーポリシーをどうつくって、どうホストするのか
法律のことよくわからんし、こちとらネイティブが本職だってのにウェブにわざわざ設置しなくはなりません## そんなあなたに!自動で作成&ホスティングしてくれるツールを紹介
[App Privacy Policy Generator](https://app-privacy-policy-generator.firebaseapp.com/)これをつかうと、空いている項目に入力するだけで、
![スクリーンショット 2020-12-20 21.38.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138063/1eb6fc9a-6a49-bbc5-6e2f-5dda54d891dc.png)
こんなふうに、いい感じのプライバシーポリシーを作成してくれます!
![スクリーンショット 2020-12-20 21.40.25.p
【Android】2020年からの MVVM【実践】
![Android Studio 4.1.1](https://img.shields.io/badge/Android_Studio-4.1.1-brightgreen) ![androidx.lifecycle 2.2.0](https://img.shields.io/badge/androidx.lifecycle-2.2.0-brightgreen) ![Kotlin 1.4.20](https://img.shields.io/badge/Kotlin-1.4.20-blue) ![kotlinx.coroutines](https://img.shields.io/badge/kotlinx.coroutines-1.4.2-blue)
2020-10-27、[kotlinx.coroutines 1.4.0](https://github.com/Kotlin/kotlinx.coroutines/releases/tag/1.4.0) がリリースされました。
これにより [`SharedFlow`](https://kotlin.github.io/kotlinx.
[Android]Firebase Storage + Glide
Androidで`DataBinding`を使って`Firebase Storage`から画像を読み込む方法です。
`Glide`も一緒に使います。Kotlinで書いています。## セットアップ
FirebaseとDataBindingのセットアップは割愛します。
### Glide
KotlinでGlideを使う場合は、
“`app/build.gradle
dependencies {
implementation ‘com.github.bumptech.glide:glide:4.11.0’
kapt ‘com.github.bumptech.glide:compiler:4.11.0’
}
“`
→本家のgithubでは2つ目は`annotationProcessor`でしたが、Kotlinでは`kapt`を使います。次に、`AppGlideModule`を継承したクラスを作成します。
“`MyAppGlideModule.kt
@GlideModule
class MyAppGlideModule : AppGlideModule() {