Android関連のことを調べてみた2019年12月07日

Android関連のことを調べてみた2019年12月07日
目次

Firebase consoleで登録したFCM(プッシュ通知)で受け取れるデータメモ

FCM(Firebase Cloud Messaging)は、アプリがForegroundの場合と、Backgroundの場合でデータの受け取り方と形式が異なります。
その辺りを簡潔にまとめました。

#### 公式リファレンスは[「こちら」](https://firebase.google.com/docs/cloud-messaging/android/receive?hl=ja)

## アプリがForegroundの場合
FirebaseMessagingService#onMessageReceived で以下のデータを受信できます。
ちなみに、画面上に通知は表示されません。

“`
============================
Class : RemoteMessage
From : xxxxxxxxxxxx
To : null
MessageType : null
MessageId : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SentTime : 157559472969

元記事を表示

AndroidのEdge to Edgeを理解する

## Edge to Edgeとは
Android 10の情報が出始めてからEdge to Edgeという単語が聞かれるようになりましたが、平たく言うとアプリのコンテンツを表示する領域をStatusBarやNavigationBarのところまで拡大しようという感じです

参考:

– https://developer.android.com/guide/navigation/gesturenav
– https://medium.com/androiddevelopers/gesture-navigation-going-edge-to-edge-812f62e4e83e

アプリのコンテンツ領域を拡大するという仕組みはAPI 21や部分的にはそれ以前からあり、最近になってEdge to Edgeと呼ばれるようになったという感じです
ちなみに、自分は透過UIとかいう呼び方をしていました。以前にQiitaで[StatusBarに色を付けてNavigationBarを透明にしてCoordinatorLayoutを使おうとしたらハマった](https://qiita.com/MeilCli

元記事を表示

Androidアプリの譲渡で取引IDがエラーになる問題

GooglePlayで公開中のAndroidアプリを別のアカウントに譲渡する際に起きたエラーとその解決について共有します。アプリの譲渡はヘルプにある手順通りに進めます。
https://support.google.com/googleplay/android-developer/answer/6230247?hl=ja

取引IDを入力した際、以下のようなエラーが出ます。
> 入力した取引IDがこのデベロッパーアカウントのIDと一致しません

![スクリーンショット 2019-12-07 0.15.29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2490/d902fbc6-2871-ea27-bba6-4a3dbec66c04.jpeg)

これは、取引IDが特定のフォーマットのものだと起きる問題のようで、IDの先頭を取り除くと解決するようです

変更前
`01234567890123456789.token.0123456789012345`
変更後
`token.012345678901234

元記事を表示

Androidアプリの内部テストを実施する

初めてAndroidアプリをリリースするので、[公式ドキュメント](https://support.google.com/googleplay/android-developer/answer/3131213?hl=ja)を見ながら内部テストしようと作業してみた所ドキュメントが若干違ってて色々迷いましたんで記録しておきます。

# 前提
– GoogleDeveloperアカウントを保有している
– GooglePlayConsoleにログインできる
– Android App Bundle作成済
– 開発して署名したapkファイルが出力済

# 手順
## ステップ0:アプリ登録
[GooglePlayConsole](https://play.google.com/)にログインし右上の[アプリの作成]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178016/464e5e30-4b88-ec09-279a-415c5bd599be.png)
アプリ作成画面で言語とタイトル

元記事を表示

Android StudioでJsonを使う方法

## はじめに
外部からAPIとか使ってJsonを持ってくる方式については多かったけども、
内部に置く方法が意外と少なかったから覚書程度に書く。

## 内容
+ AndroidでJsonを使おう
+ AndroidStudioの内部にJsonを置いて使う方法

## Json準備
### Jsonファイル
今回使うJsonファイル

“` json:Sample.json
{
“sample”: [
{
“name”: “Andy”,
“age”: 31,
“gender”: false,
“other”: “”
},
{
“name”: “Bob”,
“age”: 14,
“gender”: false,
“other”: “Student”
},
{
“name”: “Carry”,
“age”: 22,
“gender”: true,
“other”: “Rich”
},
{

元記事を表示

Using Dagger in your Android app(Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.)

[Android Dev Summit 2019
Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.](https://codelabs.developers.google.com/ads19/)

[Using Dagger in your Android app](https://codelabs.developers.google.com/codelabs/android-dagger/index.html?index=..%2F..ads19)の日本語訳

# 1.はじめに
このコードラボでは、Dependency Injection(DI)の重要性を学習し、大規模プロジェクトに対応する堅実で拡張可能なアプリケーションを作成します。Daggerは依存関係を管理するDIツールとして使用します。
依存性注入(DI)は、プログラミングで広く使用されている手法であり、Android開発に適しています。 DIの原則に従うことで、優れたアプリアーキテクチャの基礎を築きます。
依存性注入を

元記事を表示

Lifecycle-Aware Components(Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.)

[Android Dev Summit 2019
Codelabs for the 2019 Android Dev Summit: Mountain View, October 23-24, 2019.](https://codelabs.developers.google.com/ads19/)

[Lifecycle-Aware Components](https://codelabs.developers.google.com/codelabs/android-lifecycles/index.html?index=..%2F..ads19#0)の日本語訳

# 1.はじめに
## 構成部品
[アーキテクチャコンポーネント](https://developer.android.com/topic/libraries/architecture/index.html)は、堅牢、テスト可能、保守可能な方法でアプリを構築するのに役立つAndroidライブラリのセットです。
このコードラボでは、Androidアプリを構築するための次のライフサイクル対応アーキテクチャコンポーネントを紹介し

元記事を表示

【Android】DIライブラリKoinの勧め

モバイルエンジニアとして、CBcloudに参画したbigbackboomです。メインでAndroidアプリの開発を行なっています。
現在、弊社のAndroidアプリはモバイルエンジニアがいなかったこともあり、独自のアーキテクチャを採用していて非常に開発しにくいものになっています。その改善のためにリファクタリングでMVVMアーキテクチャを導入したのですが、DIライブラリには**[Koin](https://github.com/InsertKoinIO/koin)**を採用しました。今回はなぜ主流ライブラリのDaggerではなく、新参のKoinを採用したのかを中心に書いていきます!

# そもそもDependency Injectionって?
Inversion of Control Principle”(制御の反転の原則)を実現するための手法です。Dependency Inject(以下DI)を使うことでクラスの依存を全て外部から注入し、クラス同士の結合を弱めることができる。そのためテストのしやすい構造と、変更強い構造を同時に実現することができます。

# Koinとは?
Kotli

元記事を表示

UnityをバージョンアップするとNDK not foundになり、Androidビルドに失敗する

#問題
-Unityのバージョンを2019.2.13f1から2019.2.15f1にアップデート
-2.13fでは行えていたAndroidビルドに失敗するようになった(NDK not found)

[解決方法](#解決方法)

#試してみたこと
– Unity 2.13fから2.15fにUnity Hub経由でAndroidモジュール込みで、バージョンアップ
– NDK not foundでAndroidビルドに失敗する
– 外部ツールの設定でNDKの場所を”NDK\android-ndk-r16b”に設定
– 参考のようにエラーが出てAndroidビルドに失敗する
– 外部ツールの設定でNDKの場所を2.13f(ビルドできていたバージョン)のものにする
– Androidビルド成功
– 2.13の”NDK”と2.15の”NDK\android-ndk-r16b”の中身を比較
– 一致する

以上の結果からNDKの場所が悪いっぽい気がしたので変更してみたら、ビルドできた

#解決方法
NDKのフォルダの直下にNDKの中身を配置するように変更
“NDK\android-ndk-

元記事を表示

AppiumでAndroidアプリのスクリーンショットをとってみた

#Appiumとは

[Appium](http://appium.io/)

Appiumはネイティブもしくはハイブリッドなモバイルアプリのためのオープンソーステスト自動化フレームワークです。

私は毎週毎週Androidアプリの最新版のスクリーンショットを手動で取るのが嫌になってAppium導入しました:sweat_smile:

UIテストの自動化もできますが、今回はひとまずスクリーンショット取れるところまで。

##環境構築
まずはAppiumを動かせる環境を構築します。
Node.jsをインストールしてからnpmでappiumとwd(Webdriver/Selenium 2クライアント)をインストールするだけです。

以下、公式ページから引用

“`
brew install node # get node.js
npm install -g appium # get appium
npm install wd # get appium client
appium & # start appium
node your-

元記事を表示

Re:0から始めるAndroid開発 ~いろんなフレームワークを使ってみる(8/25完了)~

# はじめに
この記事は [Android Advent Calendar 2019](https://qiita.com/advent-calendar/2019/android) の6日目です!

普段、Androidアプリケーションをどの言語どのフレームワークetc..を使って開発していますか?
自分は `Android Studio + Java` や `Unity + C#` で開発することが多いです
思えば自分が触ったことが無いフレームワークはたくさんありますが、自分が開発したいもの合わせて、よりベストな環境を選んでおきたい身としてはいろんなフレームワーク、言語を知って触っておくに越したことは無いのはエンジニアとしては当然だと思ってます。
なので、いろんなフレームワークを使って **同じ動作をする** Androidアプリを作成します!

# TL;DR
Androidアプリケーション開発のフレームワーク一覧

| フレームワーク | 言語 | 公式ページ

元記事を表示

Flutter で Stateを保持したまま画面切り替えができる BottomNavigationBar や TabBar の作り方

## はじめに

[ユアマイスター Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yourmystar) の6日目の記事です。

ユアマイスターでは、 [あなたのマイスター](https://yourmystar.jp/) でハウスクリーニングや修理などのサービスを提供するプロや職人が利用する店舗向けアプリ「マイスターアプリ」 ([Android版](https://apps.apple.com/jp/app/id1478724946?l=ja), [iOS版](https://apps.apple.com/jp/app/id1478724946?l=ja)) があります。
このアプリでは、Flutterを採用しており、2019年10月にリリースされました。(その他の技術スタックは [こちら](https://yourmystar-engineer.hatenablog.jp/entry/2019/11/25/090000))

このアプリには、 BottomNavigationBar や TabBar など使

元記事を表示

「adb shell am kill」を使って「アクティビティを保持しない」設定から卒業する

`adb shell am kill` が便利だったのでご紹介したいと思います。

# 「アクティビティを保持しない」設定
開発者オプションにある「アクティビティを保持しない」設定、Androidエンジニアなら使ったことがあるかと思います。

この設定を有効にすることで、Activityがバックグラウンドに行ったタイミングで破棄されるようになり、Activityの破棄に起因するバグなどを確認するのに役立つ便利な設定です。:relaxed:

## ちょっと不満なところ :worried:
そんな便利な設定なのですが、

1. いちいち開発者オプションを開いてON/OFFを切り替えないといけない
2. 設定をONにすると端末全体でその設定が有効になってしまう

といった、ちょっとだけ不満に感じる点も個人的には感じています。

# `adb shell am kill`

そこで今回ご紹介するのが `adb shell am kill` です。
まぁ雑に説明するなら、好きなタイミングで特定のアプリをkillすることができる、というadbコマンドになります。

## 使い方
使い方はすごく

元記事を表示

AWS CognitoにAndroidネイティブアプリでサインインする

今回は、Androidのネイティブアプリで、AWS Cognitoにサインインしてみます。
SDKが提供されていますが、OpenID Connectに準拠したエンドポイントを呼び出すだけなのに、内部で何をしているかわからずに、てこずりそうだったので、いっそのこと自分で実装しています。

# 大まかな流れ

サインインは、OpenID Connectに準拠したエンドポイントを呼び出しているだけです。

以下が参考になります。
 [AWS Cognitoのエンドポイントを使いこなす](https://qiita.com/poruruba/items/a284b9f522d8d6e1e3f9 )

ただし、これらエンドポイントは、ブラウザからの利用を想定しているため、そのままでは、ネイティブのAndroidアプリケーションでは使えません。
そこで、ネイティブアプリからブラウザを起動し、ブラウザでログインした結果をネイティブアプリに戻すようにしました。

ここで使うブラウザとして、通常のブラウザのほかに、Chrome Custom TabsやWebViewを使う方法があります。今回はこのうち、

元記事を表示

アンドロイドエンジニアが不足しているという噂について調べてみた

概要

最近アンドロイド開発におけるエンジニアが不足しているという話をよく聞く様になった。特にkotlinエンジニアはグーグルがkotlinファーストを掲げるなど需要がかなり高まってると言われている。しかし、swiftの様に今まで人気がなかったことや、Javaで開発していたことが多かったためkotlinで開発ができるエンジニアの供給が追いついていないのが現状である。売り手市場といわれるAndroidエンジニアのについて、その真相を調査した。

現状の分析

まず、エンジニアの単価をiOSとAndroidで比較してみようと思う。

アンドロイドエンジニアの単価

フリーランスエンジニア運営事務局の調べによると、下記の様になっている。

Android経験1年未満 25万円~30万円/月(週5常駐案件の相場単価)

Android経験1年   30万円~45万円/月(週5常駐案件の相場単価)

Android経験2年   40万円~55万円/月(週5常駐案件の相場単価)

元記事を表示

【Firebase Analytics】Universal Links/App Linksでアプリを起動した回数が知りたい

# はじめに
* この記事は[オールアバウトアドベントカレンダー](https://qiita.com/advent-calendar/2019/allabout)6日目の記事です。
* これまでモバイルアプリ(Android, iOS)の集計にGoogleアナリティクスSDKを利用していたのですが、**[2019年10月にGoogleアナリティクス開発者サービスSDKが終了](https://support.google.com/firebase/answer/9167112?ref_topic=6386699&authuser=1) しました(Googleアナリティクス 360 のユーザーのプロパティには影響はありません)**
* 今後のモバイルアプリ向けの集計は、Firebase SDKを利用して集計する**Firebase Analytics**に移行する必要があります
* [Firebase 向け Google アナリティクスについて](https://support.google.com/analytics/answer/9165830?authuser=1)
*

元記事を表示

Flavorってなんなのか

# Flavor(味付け)?
みなさんFlavor使ってますか
意外と使ってないアプリも多かったりするんじゃないですかね

今日はFlavorのよくある使い方を例に、少しだけアプリに味付けをしてみたいと思います

とりあえずAndroidStudioで適当なプロジェクトつくります
URLとか出したいじゃないですか。ふつう。
ということで、Configファイルに記載してあるURLを出してみます。
スクリーンショット 2019-12-05 19.55.50.png
スクリーンショット 2019-12-05 19.56.02.pngAndroidアプリ開発をしているときに思ったことや気づいたこと、感じたこと

 こんにちは。最近寒くなってきましたねー。僕は未だにジャンバーを着るタイミングがつかめませんw

アプリ開発をしている人しか分からないネタですw

– できるだけネットに頼りたくない
– 思うようなことができたらうれしい
– PCとノートの使い分け
– 次作るアプリの案が出てくる

### できるだけネットに頼りたくない
 初めてアプリを作る際や新しくプログラミング言語を学ぶときに僕は必ず参考書を買います。その中で必ずと言っていいほど参考書だけでは分からないところが出てきます。例えば、タイマー機能を実装したいという時はネットに頼ります。そういうのではなくて、自分の力で何とかなりそう、考え方を変えれば実現できそうという時にネットを頼りたくはないと感じます。それでも分からない!となるとインターネットに頼るんですが、やっぱり悔しいですね。僕の中ではネットは最終手段

元記事を表示

Android / iOS アプリのテスト配布サービスあれこれ(DeployGate、Firebase App Distribution、Bitrise)

この記事は [くふうカンパニー Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kufu)、5日目の記事です。

くふうグループの [Da Vinci Studio](https://da-vinci-studio.com/) では、さまざまな Android / iOS アプリの開発やサポートを行なっています。
そしてふだんから複数のサービスを使ってテスト配布しているので、それぞれのサービスについての感想と使用例を書きます。

**1. [DeployGate](https://deploygate.com/)**
**2. [Firebase App Distribution](https://firebase.google.com/docs/app-distribution?hl=ja)**
**3. [Bitrise](https://www.bitrise.io/)(の配布サービス)**

1 と 2 は [fastlane](https://docs.fastlane.tools/) を使ってアップロ

元記事を表示

NavigationViewのアイテムを動的に隠す

## はじめに
業務において「条件に応じてNavigationViewのアイテムを隠す」
という要件があって調べたので備忘録として残しておきます。

## 実装方法
[BottomNavigationのアイテム](https://qiita.com/masaibar/items/8c6d6ab5a898233f1301 )の場合とは違い、Visibilityをいじるのが正解のようです。

“`kotlin
navigationView.menu.findItem(R.id.nav_slideshow).isVisible = false
“`
## 結果
Slideshowというメニューを隠してみます。

### 通常時
通常時は下記のようなアイテムを表示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68671/af960db2-a1c5-4fef-a905-d167bbb435f8.png)

### 隠した時
このようにSlideshowが隠れました。
Visib

元記事を表示

OTHERカテゴリの最新記事