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

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

Unit Test 探求記(その2)

# はじめに
[前回](https://qiita.com/beyondseeker/items/ecc294d0ca39a49e475f)は、Android Studio を用いて自動生成されたプロジェクトの unit test を確認してみました。

– Android Studio から Android プロジェクトを自動生成
– unit test と instrumented unit test を実行
– 依存関係の確認

今回は、build.gradle を build.gradle.kts に書き換えてみようと思います。

# root
## ◆ build.gradle
[src](https://github.com/beyondseeker/chrono0013/blob/4c19532e449c025eee9ec76365a69e45c31b5cfc/build.gradle)

“`groovy
// Top-level build file where you can add configuration options common to all sub-

元記事を表示

Unit Test 探求記(その1)

# はじめに
Unit test に関して、あまりトピックを絞らずに、まったりと実験しつつ、その過程を綴ってみようと思います。

# 新規プロジェクトの作成
まずは、Android Studio にて、新規のプロジェクトを作ってみました。[^1]

# Unit Test の実行
ここで言う unit test とは、src/test 以下のテストのことを指しています。

わざと間違えて、テストが実行されていることを確認してみます。[^2]

“`kotlin
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
// assertEquals(4, 2 + 2)

// わざと間違えてみる。
assertEquals(5, 2 + 2)
}
}
“`

“`
$ ./gradlew clean test –info

com.objectfanatics.myapplication.ExampleUnitTest > addition_isCor

元記事を表示

AWS CodeBuildでFlutterのAdd-to-app向けのMavenリポジトリを作成する。

先日の[GDG Tokyo Flutter Meetup](https://gdg-tokyo.connpass.com/event/181844/)の**既存アプリにFlutterで新機能を追加しよう**というセッションに感銘を受けて、[FlutterのAdd-to-app](https://flutter.dev/docs/development/add-to-app)を始めました。そのセッションでは

*モジュールからAARをビルドして既存アプリに追加
社内Mavenリポジトリを運用していてそこに相乗りするなどのケース*

という説明があり、MavenリポジトリにAARを置くとネイティブアプリが簡単にビルドできるようになるのでやってみました。

該当セッションのスライドはこちらです。(Google Drive)
[既存アプリにFlutterで新機能を追加しよう](https://t.co/ewmkphMOqP?amp=1)

# 今回のゴール

[公式のAdd-to-appの解説](https://flutter.dev/docs/development/add-to-app/a

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜WorkManager編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`WorkManager`編です

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそも`WorkManager`ってなに?
“`
WorkManager API を使用すると、アプリが終了したりデバイスが再起動したりしても
実行することが要求される延期可能な非同期タスクのスケジュールを簡単に設定できます。
“`

です!

# `WorkManager`の主な機能
## 機能
* API 14 までの下位互換性
* API 23 以上が搭載されたデバイスでは `JobScheduler` を使用
*

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜Room編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`Room`編です

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそも`Room`ってなに?
公式の説明

“`
Room 永続ライブラリは SQLite 全体に抽象化レイヤを提供することで、
データベースへのより安定したアクセスを可能にし、
SQLite を最大限に活用できるようにします。
“`

です!

# `Room`を使う理由

* アプリ内ではオブジェクトを利用して、`SQLite`のデータベースにアクセスできる。
* コンパイル時にチェックができる

(`Sunflower`のリポジトリのトップペー

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜ViewModel編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`ViewModel`編です
[DataBinding編](https://qiita.com/apimama/items/87da362855a9ca74e167)、[LiveData編](https://qiita.com/apimama/items/7f53ddc9bbd9fdf305b8)などでも、
チラチラ出てきてはいましたが、見てみぬふりをしていました笑

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそも`ViewModel`ってなに?
公式の説明によると

* `ViewModel` は、`ライフサイ

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜LiveData編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを勧めてもらいました。

JetPackのライブラリのうち、今回は`LiveData`編です
[DataBinding編](https://qiita.com/apimama/items/87da362855a9ca74e167)からの続きです。

尚、引用しているソースは明記しているところ以外は、基本的には全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用しました
* `JetPack`は`AndroidX`ライブラリを利用するので`Compile SDK`を`28`以上にする必要があります

# そもそもLiveDataってなに?
公式の説明によると

* `LiveData`は監視可能なデータホルダー クラス
* 通常の監視と異なるのは**ライフサイクル**に応じた監視が可能
* ライフサイクルが**アクティブ**なオブザーバーのみを更新する
* ライフサイクルの状態が`ST

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜DataBinding編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`DataBinding`編です

尚、引用しているソースは明記しているところ以外は、全て`Sunflower`のリポジトリのものです。 

# 環境
* 確認時は`Android Studio`のバージョンは `3.6.2`を使用
* `Data binding`はサポートライブラリなので、`Android 4.0`(API レベル 14)以降で利用可能
* `Android Plugin for Gradle`の`1.5.0`以降でサポートされているが、なるべく最新を使用したほうがいい(らしい)

# DataBinding を利用するのに必要なこと
* ビルド環境設定
* レイアウトファイルを変更
* 購読処理の実施(LiveDataとの連携)

# 準備
`Build.gradle`ファイルで`Data Binding`の機能を有効にします
`Sunflower`では`app/build.gradle`に記載して

元記事を表示

Sunflowerリポジトリで学ぶJetPack〜Navigation編

新型コロナの影響で自宅待機になってしまい、その間勉強するものとして`Sunflower`リポジトリを
勧めてもらいました。

JetPackのライブラリのうち、今回は`Navigation`編です

尚、引用しているソースは明記しているところ以外は、全て`Sunflower`のリポジトリのものです。 

# 環境
* Android Studioは`3.3`以上が必要
* 確認時は`3.6.2`を使用

# Navgation を利用するのに必要なこと
大きく分けて3つ必要です
1. 準備(依存関係の記載)
1. レイアウトファイルにナビゲーションを使うことを記載する
3. ナビゲーション グラフのファイルを作る

# 準備

## 依存関係の記載

* 公式によると、`build.gradle`に以下の4つの依存関係を記載する必要があります。
* Java language implementation
* Kotlin
* Dynamic Feature Module Support
* Testing Navigation

### 公式の

元記事を表示

新卒プログラマの学習ログ 〜 其の一 〜

#本記事の目的
基本的には自分用の学習ログとして投稿していきます。

そのため、誤った解釈や方法をとっている可能性があることは否めません。
ご指摘いただければ修正し、今後の学びで気づくことがあれば随時加筆していきます。

#投稿者の背景
今年度より外資系IT企業で新卒エンジニアとしての
キャリアをスタートしました。

With Covid-19で新卒入社から完全リモート勤務という、
この状況下でプログラマとして成長をしていけるように
色んなことを模索しています。

大学でもプログラミングは学んできましたが、
実務経験は皆無なのでまだまだわからないことだらけです。

業務に関わる内容や取り組みはもちろんここに書くことはできませんが、
自学的に取り組んだことを今後書き留めて行きたいと思います。

#Android アプリ開発
アンドロイドでアプリを開発するのであれば、
Android StudioはIDEとして優秀なツールです。

その基礎構築としてGoogleが提供しているCodelabsは非常に有効な学習ツールとなるでしょう。
(https://codelabs.developer

元記事を表示

Android CameraX+ML Kitで顔検出

# はじめに
この記事ではCameraXの画像解析ユースケースとML kitの顔検出APIを連携した技術ついて解説します。

この記事を読むと、画像解析によって検出した顔の位置情報をもとに、どのようにして画面に顔枠を表示したらよいか理解できるようになります。

![CameraX+XMKit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143712/8623e8d3-b96d-0810-b31a-79b7b611cca2.png)

顔枠をオーバーレイ(後述)に出力する仕様についてはML Kitのサンプルコードに基に調査した内容となっています。

# CameraX 画像解析ユースケースとは
画像解析ユースケースを使用すると、カメラをファインダーから覗いているときに、顔を検出したり、物(ヤカンや鍋とか)、バーコードなど検出できるようになります。

どのようにして画像解析が行われるか?について解説します。

まず、ファインダーに映ってる映像をもとに次々と画像を作って、画像アナライザーに渡します。

元記事を表示

ちょっと凝ったローディングダイアログ作った

# 作ったもの

“`xml
android:indeterminateTint=”@color/teal_200″
“`
だと以下のようにちょっと白く欠けたようになるので、白い部分が消えるようにしてみた。

# コード

LoadingDialogFragment

“`kotlin
package com.example.sampleapp.ui

import android.app.Dialog
import android.os.Bundle

元記事を表示

Android: layout_marginHorizontal と paddingHorizontal は積極的に使おう

# 結論

Android XML のレイアウトで左右に同じサイズの margin, padding を設定するときには、個別にパラメーターを設定するのではなく `layout_marginHorizontal` `paddingHorizontal` を使いましょう。

“`XML



“`

`android:paddingHorizontal=”16dp”` は `android:paddingLeft=”16dp”` と `android:paddingRight=”16dp”` を指定したものと同じ意味となります。

上下の margin, padding の場合は `layout_marginVertical` `paddingVertical` を使います。

# ~Hori

元記事を表示

Maven Publish PluginでAndroid Libraryのソースコードを公開する

# 概要
[Maven Publish Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html) で Android Library のソースコードを添付する方法です。

# build.gradle.kts(差分のみ)
以下、既に Maven Publish Plugin を利用している場合向けの、差分のみを示したコードです。
※ 各値は自身の環境に合わせてください

“`kotlin:build.gradle.kts
tasks {
val androidSourcesJar by creating(Jar::class) {
archiveClassifier.set(“sources”)
from(android.sourceSets[“main”].java.srcDirs)
}
}

afterEvaluate {
publishing {
publications {
create

元記事を表示

ConstraintLayout入門その2 – センタリング、あるいはbias

ConstraintLayoutを使用するための設定については、[前回記事](https://qiita.com/yamadacsa/items/a4fcf4de9982111cdb7c)をご覧ください。

## ConstraintLayoutのセンタリング

FrameLayoutの子Viewを親Viewの中央に置くときは “`android:layout_gravity“` に “`center_horizontal“`, “`center_vertical“` などの値を設定します。RelativeLayoutの子Viewを親Viewの中央に置くときは “`android:layout_centerHorizontal“`, “`android:layout_centerVertical“` などの値を “`”true”“` に設定します。
これらに対し、ConstraintLayoutでのセンタリングは、「Viewの上下端もしくは左右端を同時に制約する」、という、いささか手間のかかる方式を用います。

“`xml:activity_main.xml

元記事を表示

TabLayoutのインジケーターをカスタマイズする

Material ComponentsにはTabLayoutというものがあり、ViewPagerなどと組み合わせてタブ切り替えのUIを提供します。
標準的な見た目は以下のようになっています。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/b134c5cc-fe09-4687-671b-3f66ebe582dc.gif)

このように、標準では選択されているタブを示すインジケーターがアンダーラインで表示され、選択した場所へアニメーションを伴って移動します。

一方、iOS版のGoogleMapではタブがこんな動作をしています。(Android版はアニメーションしない)
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/7585ab77-1f64-1083-020e-66a16ee6cdab.gif)

これの実装がどうなっているのか、iOSに詳しくないこともあって分かりませんが、Segmented Co

元記事を表示

sora-unity-sdkがAndroidに正式対応したらしいのでサンプルを動かしてみた

![a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101808/a9bb7360-a084-8af0-683f-05e2d7179900.gif)

株式会社時雨堂様が提供してくださっているsora-unity-sdkがAndroidに正式に対応したらしいので、サンプルを動かしてみました。

試した環境

sora-unity-sdk 2020.5

PC
Windows10
Unity2019.1.14f1

スマホ
Android10
Motog8

#1.サンプルの入手
GitHubから入手。
https://github.com/shiguredo/sora-unity-sdk-samples

READMEに依ると

>
sora-unity-sdk のインストール
Windows の場合は install.bat を、macOS の場合は install.sh を実行して下さい。 これで各種サンプルを実行するために必要になる sora-unity-sdk をインストールできます。

との

元記事を表示

ReactNative+ExpoでAndroidアプリをビルドする

ReactNative+ExpoでAndroidアプリをビルドする場合にいくつか面倒なことがあったので、備忘録を残します。

# ReactNativeとは
![1280px-React-icon.svg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275351/996bf1d4-2f96-d612-dfcd-93db90c1156a.png)

[ReactNative](https://reactnative.dev/)はFacebookが開発したモバイルアプリケーションフレークワークです。
Reactの機能をネイティブアプリに使うことができ、マルチプラットフォーム対応で、JavascriptでiOSアプリとAndroidアプリを作ることができます。

Javascriptを使うモバイルアプリケーションフレークワークはMonacaやCORDOVAなどいくつかありますが、ReactNativeの私的なメリット・デメリットは下記です。

### メリット
**・ネイティブアプリ並の速さが出る**
 

元記事を表示

大学生が1週間でFlutterアプリを学んでリリースした過程(7日目)

こんにちはシオンです。

ついに最終日がきました。
ここまで読んでくださって本当にありがとうございます。
思いつきで始めたこの企画ですが、いい感じにFlutterの勉強になったし、記事を書く楽しさも感じられて始めてすごく良かったなと感じています。
ですが、今日アプリが完成しないことには終わるに終われませんので、引き続きラストスパート頑張りたいと思います。

#目次
#####■完成までにやること
#####■路線変更:AppStoreへアップする
#####■いよいよ審査!
#####■まとめ

#■完成までにやること

今日アプリを完成させるためにやらなければいけないことを先にまとめておきます。
大きくやることを分けると
**①アプリのコードを書ききること。**
**②リリース申請をすること。**
この2つになります。

では、それぞれ進めていきます。

##①アプリのコードを書ききる

現状画面を全て作成し終わって、画面遷移まで実装できました。
残る機能は以下の通りです。
**1. 2画面目でストレスLvを表示**
**2. 3画面目に2画面目で入力した愚痴タイトルを表示**

元記事を表示

有名人と対戦してる気分が味わえるオセロアプリ作ってみた

対戦相手の名前を入力するとランダムで画像を持ってくるオセロアプリを作りました。
![ダウンロード (3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/bacc40f3-24c2-24b7-9ff2-8eeb2fe1dcd6.png) ⇒ ![ダウンロード (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/acaf382a-ddf4-cf4d-3339-495cfcac9aa5.png)

名前を入力するとgoogleの検索結果から画像を取得してきます。
これを使えば憧れの「石原さとみ」さんや「綾瀬はるか」さんとオセロで対戦気分を味わえる!
カワイイ!ヤッター!

#遊んでみた感想
こみ上げる虚無感。
作り始めた時は素晴らしいアイデアだと思っていたのですが。

#使用したもの
Google Custom Search API
遅延処理(Handler)
非同期処理(AsyncTask)

#

元記事を表示

OTHERカテゴリの最新記事