Android関連のことを調べてみた2020年03月17日

Android関連のことを調べてみた2020年03月17日

【和訳】Jetpack Navigation(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/)

[Jetpack Navigation](https://codelabs.developers.google.com/codelabs/android-navigation/index.html?index=..%2F..ads19)の日本語訳

# 1.はじめに
[ナビゲーションアーキテクチャコンポーネント](http://d.android.com/arch/navigation)は、ナビゲーションの実装を簡素化すると同時に、アプリのナビゲーションフローを視覚化するのにも役立ちます。 ライブラリには、次のような多くの利点があります。

– フラグメントトランザクションの自動処理
– デフォルトで進むと戻るの適切な処理
– アニメーションと遷移のデフォルト動作
– ファーストクラスの

元記事を表示

Expecting android:screenOrientation=“unspecified”…の対処法

## 困ったこと
Andsroid3.6+から、AndsroidManifestファイル内で下記のように、Activityの向きを固定に指定しているとワーニングが出るようになりました。これは、Googleより「ユーザの(画面の向きを変えれる)選択肢を狭めないように横向きにもアプリを対応させましょうね。」というメッセージなわけでございます。

## 対処法① アプリを横向き対応する
ユーザの利便性を追求するのであれば横向きもサポートするほうが良いのは当然です。
なお、ワーニングの指示通り下記のどちらかを指定すれば消えます。

“`xml

“`

|パラメータ名|説明|
|—|—|
| unspecified | デフォルト値。システムが画面の向きを選択します。システムが使用するポリシー、つまり特定の状況における選択は、端末により異なる場合があります。 |
| fullSensor

元記事を表示

シワ(Sign in with Apple) 対応

# Sign in with Appleとは
Apple ID を利用したサインイン方法。
サードパーティーログインを使用しているアプリは2020/04までにSign in with Appleに対応する様に義務化した。
> App Storeに提出されるすべての新しいAppやアップデートは、2020年4月30日までにこれらのガイドラインに従う必要があります。
引用元:https://developer.apple.com/jp/news/?id=03042020d

そうです。いつものAppleの無茶振りです。
対応しないとリジェクトされてしまう為、仕方なく実装する事に、、
まずは仕様から

# アプリへの公開情報

アプリに公開される情報は大きく分けて以下の2つです。

* 名前
* メールアドレス
* 公開メールアドレス
* プライベートメールアドレス

これらの値はSign in with Apple新規登録時かユーザーがアプリと紐付け解除を行った後の初回のみ設定する事が出来ます。

#### 名前
アプリに連携する名前はアプリ毎にユーザーが設定することができます。
デフォ

元記事を表示

既存のプロジェクトでJetpack Composeを動かす方法について(2020/03/15時点)

モチベーションとしてはDroidKaigi App 2020でちょっと動かして見たかったんですが、そのうちすぐ状況が変わるとは思いますが、結構ハマるのでメモしています。
見た後に始めれば、ハマらずにすっと動かせるのではないかと思ったので、公開しています。

## Compose導入の現状の問題点と解決策

### Android Gradle Plugin(AGP) 4.1-alpha01でCrashlyticsが対応していない
Composeを使うにはAGPが4.1-alphaか4.0-alphaでないといけないです。
Composeというよりは、AGP 4.1-alpha01の問題で、CrashlyticsのGradle Pluginがまだ対応できていなくてビルドできないので、一旦外します。ここはAGPの問題なので、4.0のalphaなどを使えば一応通るはずです。
https://issuetracker.google.com/issues/150397894
変更ログ
https://github.com/DroidKaigi/conference-app-2020/commit

元記事を表示

KotlinでもPythonみたいに文字列操作したい!

kotlinの文字列操作も便利だけどやっぱりPythonみたいに文字列操作したいなぁ

というわけで、kotlinでもPythonと同等の文字列操作ができるようになるライブラリを作りました。

## ktPyString
https://github.com/ChanTsune/ktPyString

Stringに対して拡張関数を定義することで、kotlinでもpythonみたいな文字列操作ができるようにしています。

## 導入

### Gradle

“`groovy:build.gradle
dependencies {
implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
implementation”org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version”
implementation ‘dev.tsune:ktPyString:0.0.0’
implementation ‘androidx.appcompat:

元記事を表示

[Android]Firebase Performance Monitoringを導入する

タイトル通りFirebase Performance Monitoringを実装するだけの記事。

## 前提

Firebaseの導入は完了している事。
まだの場合は[Firebaseの導入についての公式の記事](https://firebase.google.com/docs/android/setup?hl=ja)を参照。

## 実装

プロジェクトレベルの`build.gradle`に以下を書き足す。

“`gradle
buildscript {
:
dependencies {
:
classpath ‘com.google.firebase:perf-plugin:1.3.1’
}
}
“`

アプリレベルの`build.gradle`に以下を書き足す。

“`gradle
:
dependencies {
:
implementation ‘com.google.firebase:firebase-perf:19.0.5’
}
“`

既にprotobufを利用している場合、二重インポート

元記事を表示

[Android]in-app updates APIの検証方法

本記事では表題の通り、in-app updates APIのテスト方法のみ説明する。
テスト方法がよく分からず試行錯誤した結果なので、もっと良い方法があるかも知れない。

実装方法については以下の記事がとても良いので参照されたい。
[Android in-app Updates API 解説と雑感 – Qiita](https://qiita.com/consomme72/items/bcda09cf36e4fc6d31b7)
なお当該記事の`An update has just been downloaded.`はサンプルプログラムのままになっており、うっかりそのまま使っちゃうと「あぁ〜」となるので、いい感じに変更されると良い。

## 手順

### 準備

in-app updates API対応バージョンのapkまたはaabを用意する。
バージョンコード/バージョン名はリリース済みのものより上である必要がある。

### テスターの登録

Playコンソールにログインする。
対象のアプリをクリックする。
リリース管理→アプリのリリースに遷移する。
「内部テスト版」の「管理」をク

元記事を表示

Android Activity タスクとスタック

アクティビティのタスクとスタックについてまとめます。間違っていたらご指摘のほどよろしくお願いいたします。
## タスク
タスクは複数のアクティビティのまとまりのことです。公式ドキュメント[^2]によると、

> タスクは、ユーザーが新しいタスクを開始したとき、またはホームボタンを使用してホーム画面に移動したときに、「バックグラウンド」に移動できるまとまったユニットです。

です。端末のバックキーの反対側にある □ ボタンを押したら出てくる[最近]画面で、タスクの一覧を確認することができます。

アクティビティAがアクティビティBを起動すると、基本的には、それらのアクティビティはひとつのタスクに所属します。(後述しますが、別のタスクで起動することもできます。)
![activities_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247791/92a2bbfb-89c0-17fe-98a3-f7a89b15fd33.png)
注意したいのが、タスクは一つのアプリ内のアクティビティをまとめたものとは限

元記事を表示

android 足し算ができない!

3/9 kotlinを勉強し始めてドットインストールのkotlin入門を履修終了
  (foreachからあんまり理解してない)

3/12 androidアプリ開発のテキストに沿ってアプリ開発の勉強開始。

テキストで学んだことを使って簡単なアプリ開発を使用と思い
摂取したカロリーをひたすら計算していくアプリを作ってみる。

しかし、うまくいかない・・・!
EditTextに数字を入力して追加を押すと、下のTextViewに追加した数字が表示され、
もう一度EditTextに数字を入力して追加を押すと、下のTextViewに表示された数字と足されて表示される仕組みが作りたかったが
なぜか追加ボタンを押すとイミュレーターがアプリが落ちる。。。
forを使うのか?とかも考えたけどその構文が分からず・・・

解決方法分かる方いたら教えてください。。。

“`kotlin:qiita.rb

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?

元記事を表示

Android StudioでAPIレベルを下げる

#はじめに
最近とあるプロジェクトに参加しAndroidアプリ開発をしていたのですが,渡されたタブレットで実行しようとしたら,APIが古いよと怒られてしました.解決するまでに色々調べて結構時間がかかったので,今回はその解決方法をメモしておきたいと思います.
今回のアプリ開発ではSonyさんの`Xperia Z4 Tablet SO-05G`のタブレットを使用しました.

##どんなエラーが出たのか?
“`
Installation did not succeed.
The application could not be installed: INSTALL_FAILED_OLDER_SDK
The application’s minSdkVersion is newer than the device API level.
“`
原因としては,デバイスのAPIよりプロジェクトのAPIのほうが新しいからだそう.シンプルにプロジェクトのAPIをデバイスのAPIに合わせて下げれば解決できます.

ちなみに実行時には**Sony SO-05G(minSdk(API 23) > devic

元記事を表示

GitHub Actionsで「No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.0.6113669」というエラーが出た時に…

# CIでエラー
GitHub ActionsでAndroidアプリのビルドをしようとしたら「 `No version of NDK matched the requested version 20.0.5594570. Versions available locally: 21.0.6113669` 」というエラーが出てCIが失敗するようになってしまいました。

# 対策
`app/build.gradle` に下記の通り `ndkVersion` を指定してあげることで、エラーが出ずにビルドが通るようになりました。

“`
android {
・・・略・・・

ndkVersion “21.0.6113669”
}
“`

# 参考
https://stackoverflow.com/questions/60404457/android-no-version-of-ndk-matched-the-requested-version

元記事を表示

Android/iOSストア情報まとめ(2020年03月更新)

# はじめに

アプリを新規公開する際に必要な情報をまとめました。
ストア情報はデザイナーや非エンジニアが決めることが多いため、そのような方たちが読めるようにまとめます。また、ストア情報の他にも、決めるべき項目について記載しました。
とはいえ、本記事では基本的に必要最低限に近いレベルのことしか記載していませんので、実際には様々なカスタマイズ情報を掲載してアプリのグロースをしてみてください。

※オプショナルな情報については薄い文字で記載しています。

# アプリ情報

| |Android|iOS|備考|
|—|—|—|—|
|**正式名称**|~50文字|~23文字|SEO対策しすぎるとリジェクトされる可能性があります|
|**短縮名称**|~12文字程度|~13文字|アプリアイコンの下に表示される名前。
機種などにより表示できる文字数は変わります|
|**サブタイトル**|なし|~30文字

Andorid Studioのインストールガイド

# 目次
– インストーラのダウンロード
– インストール
– Android Studioの初期設定

## インストーラのダウンロード
以下のリンクからAndroid Studio 3.6.1のインストーラをダウンロードする。
https://developer.android.com/studio
## インストール
– ダウンロードしたインストーラをクダブルリックする。
![0002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/75242963-db90-df07-a835-c6789571cdd5.jpeg)

– Android Studioのインストールポップアップが表示されたら、「Next」をクリックする。
![0004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/0a129391-494a-3a16-b65a-961808fd5352.jpeg)

– 「Next」をク

Android開発初心者の自分が躓いたところ

# その1 SDKの差異
– Conflict with dependency ‘com.android.support:support-annotations’. Resolved versions for app (26.1.0) and test app (27.1.1) differ

どうやらSDKのヴァージョンの差異が原因のよう。

以下をbuild.gradle(Module:app)のdependencies内に追記。

“`gradle
androidTestCompile ‘com.android.support:support-annotations:27.1.1’
compile ‘com.android.support.test:runner:1.+’
“`

#その2 エミュレーターが動かない
– 色々解決方法があるようだが、実機で確認したほうが手っ取り早い。
動かなければ諦めろ。

#その3 実機を認識しない
– スマホ側から設定→デバイス接続→USBの設定を確認し、「充電のみ」が設定されているので
「ファイルを転送」or 「写真を転送」に切り替える

Github ActionsのAndroid CIでNDKを切り替える

## 概要
Github ActionsのAndroid CIを実行させた場合、Github Actionsで用意されているHost Runnerをそのままを使うと、[virtual-environments/Ubuntu1804-README.md](https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu1804-README.md) に記載されたバージョンのNDKが適用される。
例えば、2020年3月14日時点では`Android NDK 21.0.6113669`となる。

ただ、場合によっては別のバージョンのNDKを利用したいケースもある。

## NDKの切り替えに対応したandroid.yml
[CircleCI Orb Registry – circleci/android](https://circleci.com/orbs/registry/orb/circleci/android) を参考に、NDKを指定できるようにandroid.ymlを記述する。

なお、`N

Android+RS-232C通信

# はじめに
まだまだ計測機器と通信はRS-232Cが現役です。
ある計測機器(USB-miniB/RS-232C)とAndroidでRS-232C通信できないかと相談がありました。
そこでUSB-miniB/RS-232C(変換ケーブル)で通信できるか調査しました。

先に結論を書くと、

– USB-TypeC→USB-TypeA変換→USB-miniBでは計測機器が認識できない端末あり。
– USB-TypeC→RS-232C変換ケーブル(ラトックシステム製)→RS-232CではUSB-TypeCの端末で認識できました。

# 調査環境
– Android(バージョンは後述)
– ある計測機器(USB-miniB/RS-232C)
– USB-TypeC→RS-232C変換ケーブル(ラトックシステム製)
[USBシリアルコンバーター RS-USB60FC](https://www.ratocsystems.com/products/subpage/convert/usb60fc_siyou.html)
– usb-serial-for-android(計測機器を認識できたとき

[Android]Flow と Retrofit を組み合わせたサンプルと解説

# はじめに

Flow と Retrofit を組み合わせたて次のサンプルを作成します。
アーキテクチャは Google が推奨している MVVM で作成を進めます。

| 作成するもの | アーキテクチャ |
| ——- | ——- |
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/111cd89e-834c-c64c-1222-a95a0b20c438.png) | ![img](https://developer.android.com/topic/libraries/architecture/images/final-architecture.png) |

# TL;DR

– Flow と Retrofit を連携するときは、戻り値が Flow となるように自分で実装する。
– Room から取得した Flow は `asLiveData` で LiveData に変換できる。
– Flow を LiveData に変換したあとは、通常の L

【Android】Epoxyのモデル変更判定

# はじめに
RecyclerViewを超絶簡単に実装できるEpoxyだけど、こいつを使い初めてから幾度となく**値を変更しても見た目が変更されない**不具合に悩まされ続けてきた。
その度になんとなく他の部分と同じように修正してどうにかしてきたけど、先日やっと根本的な原因がわかった。
もはや自分では忘れないと思うけど、何故か調べても同じようなことで悩んでいる人の記事とか出てこなかったので紹介する。

## やりたいこと
選択したやつの色を変えてあげたい。

SNSのいいねボタンとか想像してもらえるとわかりやすいと思う。
押すたびにステータスが変わって、それに応じて見た目も変化して欲しい。

## 実装方法

特別な処理は入れていないけど、一応のっけとく。

◾︎SampleActivity

“` kotlin
clas

Kotlin Coroutine 入門1: 起動と suspend

Kotlin 標準の並行プログラミング API である coroutine を理解[^1]したのでまとめました。

[本家のガイド](https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html) は包括的で(上から読めば)丁寧に書いてあるのですが、実際に自分が読んだ際には理解に結構苦労したので、少し別のアプローチでの入門になります。

[^1]: 入門読んで Hello, world! ができるようになった程度という意味。Flow も分かってないし…。

### (はじめにお断り: Coroutine と Promise, async/await, Rx, etc…)

並行処理の API といえば、ここ数年だと「Promise」や「Rx」のような計算結果を表すオブジェクトを `then()` や `map()` などでつなげていくスタイルか、「async/await」などと呼ばれるような計算結果オブジェクトを馴染みやすい形で書くスタイルが多いと思います。

coroutine の基本を学習する際には、*

FlutterのWebView内からメールアプリを起動してみた件

# はじめに
 みなさんはFlutterでWebViewを使用したことありますか?
 すみません、そんなことはどうでもいいです。今回はタイトルにもある通り、FlutterのWebView内から端末内のメールアプリを起動してみます。

# 最終結果
 最終的に、下の画像みたいにメールアプリを起動する画面を出します。

![66005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600842/69e94c91-c5bd-b59e-cae3-3bbb1b3abb9c.jpeg)

# いつメールアプリを起動するのか
 普通にWebViewを出してるだけだと、メールアプリを起動する場面はなかなかありませんが、あるとするなら、「お問合せはコチラ」みたいなとこクリックしてメールアプリを起動するみたいな感じです!
 掲示板みたいに、自分の名前とかメアドを入力してお問合せできるページが用意されていれば、特に問題はないんですけど、全部がそういうわけじゃないからな~~~

# 普通にWebViewからメールアプリを起動